Browse Source

Backends: Metal: Ignore ImDrawCmd where ElemCount == 0. (#4857)

ocornut 3 years ago
parent
commit
efa50f72a7
2 changed files with 5 additions and 0 deletions
  1. 3 0
      backends/imgui_impl_metal.mm
  2. 2 0
      docs/CHANGELOG.txt

+ 3 - 0
backends/imgui_impl_metal.mm

@@ -12,6 +12,7 @@
 
 
 // CHANGELOG
 // CHANGELOG
 // (minor and older changes stripped away, please see git history for details)
 // (minor and older changes stripped away, please see git history for details)
+//  2022-01-03: Metal: Ignore ImDrawCmd where ElemCount == 0 (very rare but can technically be manufactured by user code).
 //  2021-12-30: Metal: Added Metal C++ support. Enable with '#define IMGUI_IMPL_METAL_CPP' in your imconfig.h file.
 //  2021-12-30: Metal: Added Metal C++ support. Enable with '#define IMGUI_IMPL_METAL_CPP' in your imconfig.h file.
 //  2021-08-24: Metal: Fixed a crash when clipping rect larger than framebuffer is submitted. (#4464)
 //  2021-08-24: Metal: Fixed a crash when clipping rect larger than framebuffer is submitted. (#4464)
 //  2021-05-19: Metal: Replaced direct access to ImDrawCmd::TextureId with a call to ImDrawCmd::GetTexID(). (will become a requirement)
 //  2021-05-19: Metal: Replaced direct access to ImDrawCmd::TextureId with a call to ImDrawCmd::GetTexID(). (will become a requirement)
@@ -552,6 +553,8 @@ void ImGui_ImplMetal_DestroyDeviceObjects()
                 if (clip_max.y > fb_height) { clip_max.y = (float)fb_height; }
                 if (clip_max.y > fb_height) { clip_max.y = (float)fb_height; }
                 if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y)
                 if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y)
                     continue;
                     continue;
+                if (pcmd->ElemCount == 0) // drawIndexedPrimitives() validation doesn't accept this
+                    continue;
 
 
                 // Apply scissor/clipping rectangle
                 // Apply scissor/clipping rectangle
                 MTLScissorRect scissorRect =
                 MTLScissorRect scissorRect =

+ 2 - 0
docs/CHANGELOG.txt

@@ -54,6 +54,8 @@ Other Changes:
   It would generally not have noticeable side-effect at runtime but would be detected by runtime checkers.
   It would generally not have noticeable side-effect at runtime but would be detected by runtime checkers.
 - Backends: Metal: Added Apple Metal C++ API support. (#4824, #4746) [@luigifcruz]
 - Backends: Metal: Added Apple Metal C++ API support. (#4824, #4746) [@luigifcruz]
   Enable with '#define IMGUI_IMPL_METAL_CPP' in your imconfig.h file.
   Enable with '#define IMGUI_IMPL_METAL_CPP' in your imconfig.h file.
+- Backends: Metal: Ignore ImDrawCmd where ElemCount == 0, which are normally not emitted by the library but
+  can theorically be created by user code manipulating a ImDrawList. (#4857)
 
 
 
 
 -----------------------------------------------------------------------
 -----------------------------------------------------------------------