From d71bd374d75073ed217cdbebab2f19866d6082de Mon Sep 17 00:00:00 2001 From: Morris Tabor <80684659+mortarroad@users.noreply.github.com> Date: Thu, 18 Mar 2021 14:19:13 +0100 Subject: [PATCH] additionally check priority --- drivers/gles3/rasterizer_scene_gles3.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index d813f2753000..46565b20928a 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -4642,24 +4642,27 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const // first chunk_start int chunk_split = render_list.max_elements - render_list.alpha_element_count; - bool chunk_directional_add = false; // use directional add in this chunk while (chunk_split < render_list.max_elements) { int chunk_start = chunk_split; - chunk_directional_add = !chunk_directional_add; + bool first = true; + bool chunk_directional_add = false; + uint32_t chunk_priority = 0; // determine chunk end for (; chunk_split < render_list.max_elements; chunk_split++) { bool directional_add = _element_needs_directional_add(render_list.elements[chunk_split]); - if (directional_add != chunk_directional_add) { + uint32_t priority = uint32_t(render_list.elements[chunk_split]->sort_key >> RenderList::SORT_KEY_PRIORITY_SHIFT); + if (first) { + chunk_directional_add = directional_add; + chunk_priority = priority; + first = false; + } + if ((directional_add != chunk_directional_add) || (priority != chunk_priority)) { break; } } - if (chunk_start == chunk_split) { - continue; // empty chunk - } - if (chunk_directional_add) { for (int i = 0; i < state.directional_light_count; i++) { directional_light = directional_lights[i];