MCPcopy Create free account
hub / github.com/GPUOpen-LibrariesAndSDKs/Cauldron / Render

Method Render

libs/imgui/imgui.cpp:2989–3056  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2987}
2988
2989void ImGui::Render()
2990{
2991 ImGuiContext& g = *GImGui;
2992 IM_ASSERT(g.Initialized); // Forgot to call ImGui::NewFrame()
2993
2994 if (g.FrameCountEnded != g.FrameCount)
2995 ImGui::EndFrame();
2996 g.FrameCountRendered = g.FrameCount;
2997
2998 // Skip render altogether if alpha is 0.0
2999 // Note that vertex buffers have been created and are wasted, so it is best practice that you don't create windows in the first place, or consistently respond to Begin() returning false.
3000 if (g.Style.Alpha > 0.0f)
3001 {
3002 // Gather windows to render
3003 g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = g.IO.MetricsActiveWindows = 0;
3004 for (int i = 0; i < IM_ARRAYSIZE(g.RenderDrawLists); i++)
3005 g.RenderDrawLists[i].resize(0);
3006 for (int i = 0; i != g.Windows.Size; i++)
3007 {
3008 ImGuiWindow* window = g.Windows[i];
3009 if (window->Active && window->HiddenFrames <= 0 && (window->Flags & (ImGuiWindowFlags_ChildWindow)) == 0)
3010 AddWindowToRenderListSelectLayer(window);
3011 }
3012
3013 // Flatten layers
3014 int n = g.RenderDrawLists[0].Size;
3015 int flattened_size = n;
3016 for (int i = 1; i < IM_ARRAYSIZE(g.RenderDrawLists); i++)
3017 flattened_size += g.RenderDrawLists[i].Size;
3018 g.RenderDrawLists[0].resize(flattened_size);
3019 for (int i = 1; i < IM_ARRAYSIZE(g.RenderDrawLists); i++)
3020 {
3021 ImVector<ImDrawList*>& layer = g.RenderDrawLists[i];
3022 if (layer.empty())
3023 continue;
3024 memcpy(&g.RenderDrawLists[0][n], &layer[0], layer.Size * sizeof(ImDrawList*));
3025 n += layer.Size;
3026 }
3027
3028 // Draw software mouse cursor if requested
3029 if (g.IO.MouseDrawCursor)
3030 {
3031 const ImGuiMouseCursorData& cursor_data = g.MouseCursorData[g.MouseCursor];
3032 const ImVec2 pos = g.IO.MousePos - cursor_data.HotOffset;
3033 const ImVec2 size = cursor_data.Size;
3034 const ImTextureID tex_id = g.IO.Fonts->TexID;
3035 g.OverlayDrawList.PushTextureID(tex_id);
3036 g.OverlayDrawList.AddImage(tex_id, pos+ImVec2(1,0), pos+ImVec2(1,0) + size, cursor_data.TexUvMin[1], cursor_data.TexUvMax[1], IM_COL32(0,0,0,48)); // Shadow
3037 g.OverlayDrawList.AddImage(tex_id, pos+ImVec2(2,0), pos+ImVec2(2,0) + size, cursor_data.TexUvMin[1], cursor_data.TexUvMax[1], IM_COL32(0,0,0,48)); // Shadow
3038 g.OverlayDrawList.AddImage(tex_id, pos, pos + size, cursor_data.TexUvMin[1], cursor_data.TexUvMax[1], IM_COL32(0,0,0,255)); // Black border
3039 g.OverlayDrawList.AddImage(tex_id, pos, pos + size, cursor_data.TexUvMin[0], cursor_data.TexUvMax[0], IM_COL32(255,255,255,255)); // White fill
3040 g.OverlayDrawList.PopTextureID();
3041 }
3042 if (!g.OverlayDrawList.VtxBuffer.empty())
3043 AddDrawListToRenderList(g.RenderDrawLists[0], &g.OverlayDrawList);
3044
3045 // Setup draw data
3046 g.RenderDrawData.Valid = true;

Callers

nothing calls this directly

Calls 8

ImVec2Class · 0.85
AddDrawListToRenderListFunction · 0.85
PushTextureIDMethod · 0.80
AddImageMethod · 0.80
PopTextureIDMethod · 0.80
resizeMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected