[Bf-blender-cvs] [b44a8f6749a] master: Fix: Draw: Negative scaled objects cause wrong resource indexing

Miguel Pozo noreply at git.blender.org
Mon Jan 23 16:54:43 CET 2023


Commit: b44a8f6749a5eed3fea980a413b1cd179dea2781
Author: Miguel Pozo
Date:   Mon Jan 23 16:25:04 2023 +0100
Branches: master
https://developer.blender.org/rBb44a8f6749a5eed3fea980a413b1cd179dea2781

Fix: Draw: Negative scaled objects cause wrong resource indexing

In the new Draw Manager, when the same DrawGroup has both front and back facing instances, the front facing instances don't offset their indices accordingly.

Differential Revision: https://developer.blender.org/D17069

===================================================================

M	source/blender/draw/intern/shaders/draw_command_generate_comp.glsl

===================================================================

diff --git a/source/blender/draw/intern/shaders/draw_command_generate_comp.glsl b/source/blender/draw/intern/shaders/draw_command_generate_comp.glsl
index 75e5cda29d2..11bf862a911 100644
--- a/source/blender/draw/intern/shaders/draw_command_generate_comp.glsl
+++ b/source/blender/draw/intern/shaders/draw_command_generate_comp.glsl
@@ -13,7 +13,8 @@ void write_draw_call(DrawGroup group, uint group_id)
   DrawCommand cmd;
   cmd.vertex_len = group.vertex_len;
   cmd.vertex_first = group.vertex_first;
-  if (group.base_index != -1) {
+  bool indexed_draw = group.base_index != -1;
+  if (indexed_draw) {
     cmd.base_index = group.base_index;
     cmd.instance_first_indexed = group.start;
   }
@@ -23,7 +24,15 @@ void write_draw_call(DrawGroup group, uint group_id)
   /* Back-facing command. */
   cmd.instance_len = group_buf[group_id].back_facing_counter;
   command_buf[group_id * 2 + 0] = cmd;
+
   /* Front-facing command. */
+  uint front_facing_start = group.start + (group.len - group.front_facing_len);
+  if (indexed_draw) {
+    cmd.instance_first_indexed = front_facing_start;
+  }
+  else {
+    cmd._instance_first_array = front_facing_start;
+  }
   cmd.instance_len = group_buf[group_id].front_facing_counter;
   command_buf[group_id * 2 + 1] = cmd;



More information about the Bf-blender-cvs mailing list