MCPcopy Create free account
hub / github.com/Aegel5/SimpleSwitcher / AddDrawListToDrawDataEx

Method AddDrawListToDrawDataEx

imgui_tiny_app/imgui/imgui_draw.cpp:2278–2321  ·  view source on GitHub ↗

Important: 'out_list' is generally going to be draw_data->CmdLists, but may be another temporary list as long at it is expected that the result will be later merged into draw_data->CmdLists[].

Source from the content-addressed store, hash-verified

2276// Important: 'out_list' is generally going to be draw_data->CmdLists, but may be another temporary list
2277// as long at it is expected that the result will be later merged into draw_data->CmdLists[].
2278void ImGui::AddDrawListToDrawDataEx(ImDrawData* draw_data, ImVector<ImDrawList*>* out_list, ImDrawList* draw_list)
2279{
2280 if (draw_list->CmdBuffer.Size == 0)
2281 return;
2282 if (draw_list->CmdBuffer.Size == 1 && draw_list->CmdBuffer[0].ElemCount == 0 && draw_list->CmdBuffer[0].UserCallback == NULL)
2283 return;
2284
2285 // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
2286 // May trigger for you if you are using PrimXXX functions incorrectly.
2287 IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
2288 IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
2289 if (!(draw_list->Flags & ImDrawListFlags_AllowVtxOffset))
2290 IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
2291
2292 // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = unsigned short = 2 bytes = 64K vertices per ImDrawList = per window)
2293 // If this assert triggers because you are drawing lots of stuff manually:
2294 // - First, make sure you are coarse clipping yourself and not trying to draw many things outside visible bounds.
2295 // Be mindful that the lower-level ImDrawList API doesn't filter vertices. Use the Metrics/Debugger window to inspect draw list contents.
2296 // - If you want large meshes with more than 64K vertices, you can either:
2297 // (A) Handle the ImDrawCmd::VtxOffset value in your renderer backend, and set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset'.
2298 // Most example backends already support this from 1.71. Pre-1.71 backends won't.
2299 // Some graphics API such as GL ES 1/2 don't have a way to offset the starting vertex so it is not supported for them.
2300 // (B) Or handle 32-bit indices in your renderer backend, and uncomment '#define ImDrawIdx unsigned int' line in imconfig.h.
2301 // Most example backends already support this. For example, the OpenGL example code detect index size at compile-time:
2302 // glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
2303 // Your own engine or render API may use different parameters or function calls to specify index sizes.
2304 // 2 and 4 bytes indices are generally supported by most graphics API.
2305 // - If for some reason neither of those solutions works for you, a workaround is to call BeginChild()/EndChild() before reaching
2306 // the 64K limit to split your draw commands in multiple draw lists.
2307 if (sizeof(ImDrawIdx) == 2)
2308 IM_ASSERT(draw_list->_VtxCurrentIdx < (1 << 16) && "Too many vertices in ImDrawList using 16-bit indices. Read comment above");
2309
2310 // Resolve callback data pointers
2311 if (draw_list->_CallbacksDataBuf.Size > 0)
2312 for (ImDrawCmd& cmd : draw_list->CmdBuffer)
2313 if (cmd.UserCallback != NULL && cmd.UserCallbackDataOffset != -1 && cmd.UserCallbackDataSize > 0)
2314 cmd.UserCallbackData = draw_list->_CallbacksDataBuf.Data + cmd.UserCallbackDataOffset;
2315
2316 // Add to output list + records state in ImDrawData
2317 out_list->push_back(draw_list);
2318 draw_data->CmdListsCount++;
2319 draw_data->TotalVtxCount += draw_list->VtxBuffer.Size;
2320 draw_data->TotalIdxCount += draw_list->IdxBuffer.Size;
2321}
2322
2323void ImDrawData::AddDrawList(ImDrawList* draw_list)
2324{

Callers

nothing calls this directly

Calls 1

push_backMethod · 0.45

Tested by

no test coverage detected