MCPcopy Create free account
hub / github.com/IppClub/Dora-SSR / RenderPrimitivesEx

Function RenderPrimitivesEx

Source/3rdParty/implot/implot_items.cpp:1487–1523  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1485/// Renders primitive shapes in bulk as efficiently as possible.
1486template <class _Renderer>
1487void RenderPrimitivesEx(const _Renderer& renderer, ImDrawList& draw_list, const ImRect& cull_rect) {
1488 unsigned int prims = renderer.Prims;
1489 unsigned int prims_culled = 0;
1490 unsigned int idx = 0;
1491 renderer.Init(draw_list);
1492 while (prims) {
1493 // find how many can be reserved up to end of current draw command's limit
1494 unsigned int cnt = ImMin(prims, (MaxIdx<ImDrawIdx>::Value - draw_list._VtxCurrentIdx) / renderer.VtxConsumed);
1495 // make sure at least this many elements can be rendered to avoid situations where at the end of buffer this slow path is not taken all the time
1496 if (cnt >= ImMin(64u, prims)) {
1497 if (prims_culled >= cnt)
1498 prims_culled -= cnt; // reuse previous reservation
1499 else {
1500 // add more elements to previous reservation
1501 draw_list.PrimReserve((cnt - prims_culled) * renderer.IdxConsumed, (cnt - prims_culled) * renderer.VtxConsumed);
1502 prims_culled = 0;
1503 }
1504 }
1505 else
1506 {
1507 if (prims_culled > 0) {
1508 draw_list.PrimUnreserve(prims_culled * renderer.IdxConsumed, prims_culled * renderer.VtxConsumed);
1509 prims_culled = 0;
1510 }
1511 cnt = ImMin(prims, (MaxIdx<ImDrawIdx>::Value - 0/*draw_list._VtxCurrentIdx*/) / renderer.VtxConsumed);
1512 // reserve new draw command
1513 draw_list.PrimReserve(cnt * renderer.IdxConsumed, cnt * renderer.VtxConsumed);
1514 }
1515 prims -= cnt;
1516 for (unsigned int ie = idx + cnt; idx != ie; ++idx) {
1517 if (!renderer.Render(draw_list, cull_rect, idx))
1518 prims_culled++;
1519 }
1520 }
1521 if (prims_culled > 0)
1522 draw_list.PrimUnreserve(prims_culled * renderer.IdxConsumed, prims_culled * renderer.VtxConsumed);
1523}
1524
1525template <template <class> class _Renderer, class _Getter, typename ...Args>
1526void RenderPrimitives1(const _Getter& getter, Args... args) {

Callers 3

RenderPrimitives1Function · 0.85
RenderPrimitives2Function · 0.85
RenderPrimitives3Function · 0.85

Calls 5

ImMinFunction · 0.85
PrimReserveMethod · 0.80
PrimUnreserveMethod · 0.80
InitMethod · 0.45
RenderMethod · 0.45

Tested by

no test coverage detected