mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-11 13:38:35 +00:00
Add support for RENDERER_HAS_VTX_OFFSET
This commit is contained in:
parent
c575dec15b
commit
fad0f5811b
@ -9,7 +9,10 @@ use gfx::texture::{FilterMethod, SamplerInfo, WrapMode};
|
|||||||
use gfx::traits::FactoryExt;
|
use gfx::traits::FactoryExt;
|
||||||
use gfx::{CommandBuffer, Encoder, Factory, IntoIndexBuffer, Rect, Resources, Slice};
|
use gfx::{CommandBuffer, Encoder, Factory, IntoIndexBuffer, Rect, Resources, Slice};
|
||||||
use imgui::internal::RawWrapper;
|
use imgui::internal::RawWrapper;
|
||||||
use imgui::{DrawCmd, DrawCmdParams, DrawData, DrawIdx, DrawVert, ImString, TextureId, Textures};
|
use imgui::{
|
||||||
|
BackendFlags, DrawCmd, DrawCmdParams, DrawData, DrawIdx, DrawVert, ImString, TextureId,
|
||||||
|
Textures,
|
||||||
|
};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::usize;
|
use std::usize;
|
||||||
@ -179,6 +182,9 @@ where
|
|||||||
"imgui-gfx-renderer {}",
|
"imgui-gfx-renderer {}",
|
||||||
env!("CARGO_PKG_VERSION")
|
env!("CARGO_PKG_VERSION")
|
||||||
))));
|
))));
|
||||||
|
ctx.io_mut()
|
||||||
|
.backend_flags
|
||||||
|
.insert(BackendFlags::RENDERER_HAS_VTX_OFFSET);
|
||||||
Ok(Renderer {
|
Ok(Renderer {
|
||||||
vertex_buffer,
|
vertex_buffer,
|
||||||
index_buffer,
|
index_buffer,
|
||||||
@ -242,6 +248,8 @@ where
|
|||||||
DrawCmdParams {
|
DrawCmdParams {
|
||||||
clip_rect,
|
clip_rect,
|
||||||
texture_id,
|
texture_id,
|
||||||
|
vtx_offset,
|
||||||
|
idx_offset,
|
||||||
..
|
..
|
||||||
},
|
},
|
||||||
} => {
|
} => {
|
||||||
@ -252,7 +260,9 @@ where
|
|||||||
(clip_rect[3] - clip_off[1]) * clip_scale[1],
|
(clip_rect[3] - clip_off[1]) * clip_scale[1],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
self.slice.start = idx_offset as u32;
|
||||||
self.slice.end = self.slice.start + count as u32;
|
self.slice.end = self.slice.start + count as u32;
|
||||||
|
self.slice.base_vertex = vtx_offset as u32;
|
||||||
|
|
||||||
if clip_rect[0] < fb_width
|
if clip_rect[0] < fb_width
|
||||||
&& clip_rect[1] < fb_height
|
&& clip_rect[1] < fb_height
|
||||||
@ -283,7 +293,6 @@ where
|
|||||||
};
|
};
|
||||||
encoder.draw(&self.slice, &self.pso, &data);
|
encoder.draw(&self.slice, &self.pso, &data);
|
||||||
}
|
}
|
||||||
self.slice.start = self.slice.end;
|
|
||||||
}
|
}
|
||||||
DrawCmd::ResetRenderState => (), // TODO
|
DrawCmd::ResetRenderState => (), // TODO
|
||||||
DrawCmd::RawCallback { callback, raw_cmd } => unsafe {
|
DrawCmd::RawCallback { callback, raw_cmd } => unsafe {
|
||||||
|
|||||||
@ -11,7 +11,7 @@ use glium::{
|
|||||||
Surface, Texture2d, VertexBuffer,
|
Surface, Texture2d, VertexBuffer,
|
||||||
};
|
};
|
||||||
use imgui::internal::RawWrapper;
|
use imgui::internal::RawWrapper;
|
||||||
use imgui::{DrawCmd, DrawCmdParams, DrawData, ImString, TextureId, Textures};
|
use imgui::{BackendFlags, DrawCmd, DrawCmdParams, DrawData, ImString, TextureId, Textures};
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
@ -104,6 +104,9 @@ impl Renderer {
|
|||||||
"imgui-glium-renderer {}",
|
"imgui-glium-renderer {}",
|
||||||
env!("CARGO_PKG_VERSION")
|
env!("CARGO_PKG_VERSION")
|
||||||
))));
|
))));
|
||||||
|
ctx.io_mut()
|
||||||
|
.backend_flags
|
||||||
|
.insert(BackendFlags::RENDERER_HAS_VTX_OFFSET);
|
||||||
Ok(Renderer {
|
Ok(Renderer {
|
||||||
ctx: Rc::clone(facade.get_context()),
|
ctx: Rc::clone(facade.get_context()),
|
||||||
program,
|
program,
|
||||||
@ -162,7 +165,6 @@ impl Renderer {
|
|||||||
PrimitiveType::TrianglesList,
|
PrimitiveType::TrianglesList,
|
||||||
draw_list.idx_buffer(),
|
draw_list.idx_buffer(),
|
||||||
)?;
|
)?;
|
||||||
let mut idx_start = 0;
|
|
||||||
for cmd in draw_list.commands() {
|
for cmd in draw_list.commands() {
|
||||||
match cmd {
|
match cmd {
|
||||||
DrawCmd::Elements {
|
DrawCmd::Elements {
|
||||||
@ -171,10 +173,11 @@ impl Renderer {
|
|||||||
DrawCmdParams {
|
DrawCmdParams {
|
||||||
clip_rect,
|
clip_rect,
|
||||||
texture_id,
|
texture_id,
|
||||||
|
vtx_offset,
|
||||||
|
idx_offset,
|
||||||
..
|
..
|
||||||
},
|
},
|
||||||
} => {
|
} => {
|
||||||
let idx_end = idx_start + count;
|
|
||||||
let clip_rect = [
|
let clip_rect = [
|
||||||
(clip_rect[0] - clip_off[0]) * clip_scale[0],
|
(clip_rect[0] - clip_off[0]) * clip_scale[0],
|
||||||
(clip_rect[1] - clip_off[1]) * clip_scale[1],
|
(clip_rect[1] - clip_off[1]) * clip_scale[1],
|
||||||
@ -188,9 +191,11 @@ impl Renderer {
|
|||||||
&& clip_rect[3] >= 0.0
|
&& clip_rect[3] >= 0.0
|
||||||
{
|
{
|
||||||
target.draw(
|
target.draw(
|
||||||
&vtx_buffer,
|
vtx_buffer
|
||||||
&idx_buffer
|
.slice(vtx_offset..)
|
||||||
.slice(idx_start..idx_end)
|
.expect("Invalid vertex buffer range"),
|
||||||
|
idx_buffer
|
||||||
|
.slice(idx_offset..(idx_offset + count))
|
||||||
.expect("Invalid index buffer range"),
|
.expect("Invalid index buffer range"),
|
||||||
&self.program,
|
&self.program,
|
||||||
&uniform! {
|
&uniform! {
|
||||||
@ -213,7 +218,6 @@ impl Renderer {
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
idx_start = idx_end;
|
|
||||||
}
|
}
|
||||||
DrawCmd::ResetRenderState => (), // TODO
|
DrawCmd::ResetRenderState => (), // TODO
|
||||||
DrawCmd::RawCallback { callback, raw_cmd } => unsafe {
|
DrawCmd::RawCallback { callback, raw_cmd } => unsafe {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user