diff --git a/imgui-gfx-renderer/src/lib.rs b/imgui-gfx-renderer/src/lib.rs index 280a823..1b6d0a1 100644 --- a/imgui-gfx-renderer/src/lib.rs +++ b/imgui-gfx-renderer/src/lib.rs @@ -255,6 +255,7 @@ where } self.slice.start = self.slice.end; } + DrawCmd::ResetRenderState => (), // TODO DrawCmd::RawCallback { callback, raw_cmd } => unsafe { callback(draw_list.raw(), raw_cmd) }, diff --git a/imgui-glium-renderer/src/lib.rs b/imgui-glium-renderer/src/lib.rs index 7280899..e7001d9 100644 --- a/imgui-glium-renderer/src/lib.rs +++ b/imgui-glium-renderer/src/lib.rs @@ -200,6 +200,7 @@ impl GliumRenderer { } idx_start = idx_end; } + DrawCmd::ResetRenderState => (), // TODO DrawCmd::RawCallback { callback, raw_cmd } => unsafe { callback(draw_list.raw(), raw_cmd) }, diff --git a/src/render/draw_data.rs b/src/render/draw_data.rs index 0d90105..413ac18 100644 --- a/src/render/draw_data.rs +++ b/src/render/draw_data.rs @@ -167,16 +167,16 @@ impl<'a> Iterator for DrawCmdIterator<'a> { vtx_offset: cmd.VtxOffset as usize, idx_offset: cmd.IdxOffset as usize, }; - if let Some(raw_callback) = cmd.UserCallback { - DrawCmd::RawCallback { + match cmd.UserCallback { + Some(raw_callback) if raw_callback as isize == -1 => DrawCmd::ResetRenderState, + Some(raw_callback) => DrawCmd::RawCallback { callback: raw_callback, raw_cmd: cmd, - } - } else { - DrawCmd::Elements { + }, + None => DrawCmd::Elements { count: cmd.ElemCount as usize, cmd_params, - } + }, } }) } @@ -197,6 +197,7 @@ pub enum DrawCmd { count: usize, cmd_params: DrawCmdParams, }, + ResetRenderState, RawCallback { callback: unsafe extern "C" fn(*const sys::ImDrawList, cmd: *const sys::ImDrawCmd), raw_cmd: *const sys::ImDrawCmd,