diff options
| author | Juan Linietsky <reduzio@gmail.com> | 2019-06-26 19:48:05 -0300 |
|---|---|---|
| committer | Juan Linietsky <reduzio@gmail.com> | 2020-02-11 11:53:28 +0100 |
| commit | 92b27bccf10a68f04a3553f1c925bdf09e076a89 (patch) | |
| tree | 43fa6f58a4fa0e1cd07a13ba09f2f3303eb77725 /servers/visual/rasterizer/rasterizer_canvas_rd.cpp | |
| parent | 24b16f3bf08587b3c7acf9d3a7ee13e7af0daf75 (diff) | |
Changed allocation strategy of CanvasItem draw commands.
They should now allocate memory in blocks and reuse the same
memory every time the item is cleared and redrawn.
This should improve performance considerably.
Diffstat (limited to 'servers/visual/rasterizer/rasterizer_canvas_rd.cpp')
| -rw-r--r-- | servers/visual/rasterizer/rasterizer_canvas_rd.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/servers/visual/rasterizer/rasterizer_canvas_rd.cpp b/servers/visual/rasterizer/rasterizer_canvas_rd.cpp index 4d6910af32..d72be70677 100644 --- a/servers/visual/rasterizer/rasterizer_canvas_rd.cpp +++ b/servers/visual/rasterizer/rasterizer_canvas_rd.cpp @@ -495,9 +495,6 @@ Size2i RasterizerCanvasRD::_bind_texture_binding(TextureBindingID p_binding, RD: //////////////////// void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_item, RenderTargetFormat p_render_target_format, RD::TextureSamples p_samples, const Color &p_modulate, const Transform2D &p_canvas_transform_inverse, Item *¤t_clip) { - int cc = p_item->commands.size(); - const Item::Command *const *commands = p_item->commands.ptr(); - //create an empty push constant PushConstant push_constant; Transform2D base_transform = p_canvas_transform_inverse * p_item->final_transform; @@ -521,9 +518,9 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_ bool reclip = false; - for (int i = 0; i < cc; i++) { + const Item::Command *c = p_item->commands; + while (c) { - const Item::Command *c = commands[i]; push_constant.flags = 0; //reset on each command for sanity switch (c->type) { @@ -1100,6 +1097,8 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_ } break; } + + c = c->next; } if (current_clip && reclip) { |