[Bf-blender-cvs] [b27492d078b] master: DRW: Make Instance count not a pointer

Clément Foucault noreply at git.blender.org
Tue May 14 11:01:20 CEST 2019


Commit: b27492d078b49d5ef7291697497c90d373a8036e
Author: Clément Foucault
Date:   Sat May 11 16:14:25 2019 +0200
Branches: master
https://developer.blender.org/rBb27492d078b49d5ef7291697497c90d373a8036e

DRW: Make Instance count not a pointer

Goal is still to simplify the draw manager.

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

M	source/blender/draw/engines/eevee/eevee_effects.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.h
M	source/blender/draw/intern/draw_manager_data.c
M	source/blender/draw/intern/draw_manager_exec.c
M	source/blender/draw/modes/edit_curve_mode.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index ea01f5d36df..b25573f89bc 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -305,15 +305,13 @@ void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
   }
 
   {
-    static int zero = 0;
-    static uint six = 6;
     psl->color_downsample_cube_ps = DRW_pass_create("Downsample Cube", DRW_STATE_WRITE_COLOR);
     DRWShadingGroup *grp = DRW_shgroup_create(e_data.downsample_cube_sh,
                                               psl->color_downsample_cube_ps);
     DRW_shgroup_uniform_texture_ref(grp, "source", &e_data.color_src);
     DRW_shgroup_uniform_float(grp, "texelSize", &e_data.cube_texel_size, 1);
-    DRW_shgroup_uniform_int(grp, "Layer", &zero, 1);
-    DRW_shgroup_call_instances_add(grp, quad, NULL, &six);
+    DRW_shgroup_uniform_int_copy(grp, "Layer", 0);
+    DRW_shgroup_call_instances_add(grp, quad, NULL, 6);
   }
 
   {
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 6f9f15a7aba..d43a0e97d24 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -445,11 +445,7 @@ void DRW_shgroup_call_sculpt_with_materials_add(DRWShadingGroup **shgroups,
 void DRW_shgroup_call_instances_add(DRWShadingGroup *shgroup,
                                     struct GPUBatch *geom,
                                     float (*obmat)[4],
-                                    uint *count);
-void DRW_shgroup_call_object_instances_add(DRWShadingGroup *shgroup,
-                                           struct GPUBatch *geom,
-                                           struct Object *ob,
-                                           uint *count);
+                                    uint count);
 void DRW_shgroup_call_dynamic_add_array(DRWShadingGroup *shgroup,
                                         const void *attr[],
                                         uint attr_len);
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index d4a5c4b996b..ae765775929 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -149,8 +149,7 @@ typedef struct DRWCall {
     } range;
     struct { /* type == DRW_CALL_INSTANCES */
       GPUBatch *geometry;
-      /* Count can be adjusted between redraw. If needed, we can add fixed count. */
-      uint *count;
+      uint count;
     } instances;
     struct { /* type == DRW_CALL_PROCEDURAL */
       uint vert_count;
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 0eac9512d0f..75dcf6e7796 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -574,7 +574,7 @@ void DRW_shgroup_call_object_add_with_callback(DRWShadingGroup *shgroup,
 void DRW_shgroup_call_instances_add(DRWShadingGroup *shgroup,
                                     GPUBatch *geom,
                                     float (*obmat)[4],
-                                    uint *count)
+                                    uint count)
 {
   BLI_assert(geom != NULL);
   BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
@@ -591,27 +591,6 @@ void DRW_shgroup_call_instances_add(DRWShadingGroup *shgroup,
 #endif
 }
 
-/* These calls can be culled and are optimized for redraw */
-void DRW_shgroup_call_object_instances_add(DRWShadingGroup *shgroup,
-                                           GPUBatch *geom,
-                                           Object *ob,
-                                           uint *count)
-{
-  BLI_assert(geom != NULL);
-  BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM));
-
-  DRWCall *call = BLI_memblock_alloc(DST.vmempool->calls);
-  BLI_LINKS_APPEND(&shgroup->calls, call);
-
-  call->state = drw_call_state_object(shgroup, ob->obmat, ob);
-  call->type = DRW_CALL_INSTANCES;
-  call->instances.geometry = geom;
-  call->instances.count = count;
-#ifdef USE_GPU_SELECT
-  call->select_id = DST.select_id;
-#endif
-}
-
 // #define SCULPT_DEBUG_BUFFERS
 
 typedef struct DRWSculptCallbackData {
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index a1532243381..ef50e9d5910 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -1289,7 +1289,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
           break;
         case DRW_CALL_INSTANCES:
           draw_geometry_execute_ex(
-              shgroup, call->instances.geometry, 0, *call->instances.count, true);
+              shgroup, call->instances.geometry, 0, call->instances.count, true);
           break;
         case DRW_CALL_PROCEDURAL:
           GPU_draw_primitive(call->procedural.prim_type, call->procedural.vert_count);
diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c
index f1aa4d20a7e..e06974a338a 100644
--- a/source/blender/draw/modes/edit_curve_mode.c
+++ b/source/blender/draw/modes/edit_curve_mode.c
@@ -279,9 +279,8 @@ static void EDIT_CURVE_cache_populate(void *vedata, Object *ob)
       DRW_shgroup_call_add(wire_shgrp, geom, ob->obmat);
 
       if ((cu->flag & CU_3D) && (v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_CU_NORMALS) != 0) {
-        static uint instance_len = 2;
         geom = DRW_cache_curve_edge_normal_get(ob);
-        DRW_shgroup_call_instances_add(wire_normals_shgrp, geom, ob->obmat, &instance_len);
+        DRW_shgroup_call_instances_add(wire_normals_shgrp, geom, ob->obmat, 2);
       }
 
       geom = DRW_cache_curve_edge_overlay_get(ob);



More information about the Bf-blender-cvs mailing list