浏览代码

ImDrawData: added ScaleClipRects() helper (#287)

ocornut 10 年之前
父节点
当前提交
a36001212f
共有 2 个文件被更改,包括 15 次插入0 次删除
  1. 1 0
      imgui.h
  2. 14 0
      imgui_draw.cpp

+ 1 - 0
imgui.h

@@ -1142,6 +1142,7 @@ struct ImDrawData
 
 
     // Functions
     // Functions
     void DeIndexAllBuffers();               // For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
     void DeIndexAllBuffers();               // For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
+    void ScaleClipRects(const ImVec2& sc);  // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
 };
 };
 
 
 struct ImFontConfig
 struct ImFontConfig

+ 14 - 0
imgui_draw.cpp

@@ -833,6 +833,20 @@ void ImDrawData::DeIndexAllBuffers()
     }
     }
 }
 }
 
 
+// Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
+void ImDrawData::ScaleClipRects(const ImVec2& scale)
+{
+    for (int i = 0; i < CmdListsCount; i++)
+    {
+        ImDrawList* cmd_list = CmdLists[i];
+        for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
+        {
+            ImDrawCmd* cmd = &cmd_list->CmdBuffer[cmd_i];
+            cmd->ClipRect = ImVec4(cmd->ClipRect.x * scale.x, cmd->ClipRect.y * scale.y, cmd->ClipRect.z * scale.x, cmd->ClipRect.w * scale.y);
+        }
+    }
+}
+
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // ImFontAtlias
 // ImFontAtlias
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------