[Bf-blender-cvs] [ad0e95688d2] master: Cleanup: DRW: Remove pointers to materials

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


Commit: ad0e95688d254abee315622ebdc3aeb0d2ba979d
Author: Clément Foucault
Date:   Sat May 11 14:42:26 2019 +0200
Branches: master
https://developer.blender.org/rBad0e95688d254abee315622ebdc3aeb0d2ba979d

Cleanup: DRW: Remove pointers to materials

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

M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_forward.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

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

diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 35e1ff8a9c1..541511d2439 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1180,21 +1180,21 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
   }
 }
 
-#define ADD_SHGROUP_CALL(shgrp, ob, ma, geom, oedata) \
+#define ADD_SHGROUP_CALL(shgrp, ob, geom, oedata) \
   do { \
     if (oedata) { \
       DRW_shgroup_call_object_add_with_callback( \
-          shgrp, geom, ob, ma, EEVEE_lightprobes_obj_visibility_cb, oedata); \
+          shgrp, geom, ob, EEVEE_lightprobes_obj_visibility_cb, oedata); \
     } \
     else { \
-      DRW_shgroup_call_object_add_ex(shgrp, geom, ob, ma, false); \
+      DRW_shgroup_call_object_add_ex(shgrp, geom, ob, false); \
     } \
   } while (0)
 
-#define ADD_SHGROUP_CALL_SAFE(shgrp, ob, ma, geom, oedata) \
+#define ADD_SHGROUP_CALL_SAFE(shgrp, ob, geom, oedata) \
   do { \
     if (shgrp) { \
-      ADD_SHGROUP_CALL(shgrp, ob, ma, geom, oedata); \
+      ADD_SHGROUP_CALL(shgrp, ob, geom, oedata); \
     } \
   } while (0)
 
@@ -1691,9 +1691,9 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
       if (is_sculpt_mode) {
         /* Vcol is not supported in the modes that require PBVH drawing. */
         bool use_vcol = false;
-        DRW_shgroup_call_sculpt_with_materials_add(shgrp_array, ma_array, ob, use_vcol);
-        DRW_shgroup_call_sculpt_with_materials_add(shgrp_depth_array, ma_array, ob, use_vcol);
-        DRW_shgroup_call_sculpt_with_materials_add(shgrp_depth_clip_array, ma_array, ob, use_vcol);
+        DRW_shgroup_call_sculpt_with_materials_add(shgrp_array, ob, use_vcol);
+        DRW_shgroup_call_sculpt_with_materials_add(shgrp_depth_array, ob, use_vcol);
+        DRW_shgroup_call_sculpt_with_materials_add(shgrp_depth_clip_array, ob, use_vcol);
         /* TODO(fclem): Support shadows in sculpt mode. */
       }
       else if (mat_geom) {
@@ -1718,9 +1718,9 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
             oedata->test_data = &sldata->probes->vis_data;
           }
 
-          ADD_SHGROUP_CALL(shgrp_array[i], ob, ma_array[i], mat_geom[i], oedata);
-          ADD_SHGROUP_CALL_SAFE(shgrp_depth_array[i], ob, ma_array[i], mat_geom[i], oedata);
-          ADD_SHGROUP_CALL_SAFE(shgrp_depth_clip_array[i], ob, ma_array[i], mat_geom[i], oedata);
+          ADD_SHGROUP_CALL(shgrp_array[i], ob, mat_geom[i], oedata);
+          ADD_SHGROUP_CALL_SAFE(shgrp_depth_array[i], ob, mat_geom[i], oedata);
+          ADD_SHGROUP_CALL_SAFE(shgrp_depth_clip_array[i], ob, mat_geom[i], oedata);
 
           char *name = auto_layer_names;
           for (int j = 0; j < auto_layer_count; ++j) {
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index bcce507da24..b19db4566dd 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -1036,24 +1036,23 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
       /* Draw material color */
       if (is_sculpt_mode) {
         struct DRWShadingGroup **shgrps = BLI_array_alloca(shgrps, materials_len);
-        struct Material **mats = BLI_array_alloca(mats, materials_len);
 
         for (int i = 0; i < materials_len; ++i) {
-          mats[i] = give_current_material(ob, i + 1);
-          if (mats[i] != NULL && mats[i]->a < 1.0f) {
+          struct Material *mat = give_current_material(ob, i + 1);
+          if (mat != NULL && mat->a < 1.0f) {
             /* Hack */
-            wpd->shading.xray_alpha = mats[i]->a;
+            wpd->shading.xray_alpha = mat->a;
             material = workbench_forward_get_or_create_material_data(
-                vedata, ob, mats[i], NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0, is_sculpt_mode);
+                vedata, ob, mat, NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0, is_sculpt_mode);
             has_transp_mat = true;
           }
           else {
             material = get_or_create_material_data(
-                vedata, ob, mats[i], NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0);
+                vedata, ob, mat, NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0);
           }
           shgrps[i] = material->shgrp;
         }
-        DRW_shgroup_call_sculpt_with_materials_add(shgrps, mats, ob, false);
+        DRW_shgroup_call_sculpt_with_materials_add(shgrps, ob, false);
       }
       else {
         struct GPUBatch **geoms;
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index 13bd6fe9e4d..2011afb723a 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -623,18 +623,17 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob)
       /* Draw material color */
       if (is_sculpt_mode) {
         struct DRWShadingGroup **shgrps = BLI_array_alloca(shgrps, materials_len);
-        struct Material **mats = BLI_array_alloca(mats, materials_len);
 
         for (int i = 0; i < materials_len; ++i) {
-          mats[i] = give_current_material(ob, i + 1);
+          struct Material *mat = give_current_material(ob, i + 1);
           material = workbench_forward_get_or_create_material_data(
-              vedata, ob, mats[i], NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0, is_sculpt_mode);
+              vedata, ob, mat, NULL, NULL, V3D_SHADING_MATERIAL_COLOR, 0, is_sculpt_mode);
           shgrps[i] = material->shgrp;
         }
         /* TODO(fclem) make this call optional */
         DRW_shgroup_call_sculpt_add(material->shgrp_object_outline, ob, false, false, false);
         if (!is_wire) {
-          DRW_shgroup_call_sculpt_with_materials_add(shgrps, mats, ob, false);
+          DRW_shgroup_call_sculpt_with_materials_add(shgrps, ob, false);
         }
       }
       else {
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 38458dd48f0..6f9f15a7aba 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -421,16 +421,14 @@ void DRW_shgroup_call_procedural_triangles_add(DRWShadingGroup *shgroup,
 void DRW_shgroup_call_object_add_ex(DRWShadingGroup *shgroup,
                                     struct GPUBatch *geom,
                                     struct Object *ob,
-                                    struct Material *ma,
                                     bool bypass_culling);
 #define DRW_shgroup_call_object_add(shgroup, geom, ob) \
-  DRW_shgroup_call_object_add_ex(shgroup, geom, ob, NULL, false)
+  DRW_shgroup_call_object_add_ex(shgroup, geom, ob, false)
 #define DRW_shgroup_call_object_add_no_cull(shgroup, geom, ob) \
-  DRW_shgroup_call_object_add_ex(shgroup, geom, ob, NULL, true)
+  DRW_shgroup_call_object_add_ex(shgroup, geom, ob, true)
 void DRW_shgroup_call_object_add_with_callback(DRWShadingGroup *shgroup,
                                                struct GPUBatch *geom,
                                                struct Object *ob,
-                                               struct Material *ma,
                                                DRWCallVisibilityFn *callback,
                                                void *user_data);
 
@@ -440,7 +438,6 @@ void DRW_shgroup_call_sculpt_add(DRWShadingGroup *shading_group,
                                  bool use_mask,
                                  bool use_vert_color);
 void DRW_shgroup_call_sculpt_with_materials_add(DRWShadingGroup **shgroups,
-                                                Material **materials,
                                                 Object *ob,
                                                 bool use_vcol);
 
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index 20dfe8bc057..d4a5c4b996b 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -100,9 +100,9 @@ enum {
 /* Used by DRWCallState.matflag */
 enum {
   DRW_CALL_MODELINVERSE = (1 << 0),
-  DRW_CALL_MODELVIEWPROJECTION = (1 << 3),
-  DRW_CALL_ORCOTEXFAC = (1 << 7),
-  DRW_CALL_OBJECTINFO = (1 << 8),
+  DRW_CALL_MODELVIEWPROJECTION = (1 << 1),
+  DRW_CALL_ORCOTEXFAC = (1 << 2),
+  DRW_CALL_OBJECTINFO = (1 << 3),
 };
 
 typedef struct DRWCallState {
@@ -110,8 +110,9 @@ typedef struct DRWCallState {
   void *user_data;
 
   uchar flag;
-  uchar cache_id;   /* Compared with DST.state_cache_id to see if matrices are still valid. */
-  uint16_t matflag; /* Which matrices to compute. */
+  uchar cache_id; /* Compared with DST.state_cache_id to see if matrices are still valid. */
+  uchar matflag;  /* Which matrices to compute. */
+  short ob_index;
   /* Culling: Using Bounding Sphere for now for faster culling.
    * Not ideal for planes. */
   BoundSphere bsphere;
@@ -120,7 +121,7 @@ typedef struct DRWCallState {
   float modelinverse[4][4];
   float modelviewprojection[4][4];
   float orcotexfac[2][3]; /* Not view dependent */
-  float objectinfo[2];
+  float ob_random;
 } DRWCallState;
 
 typedef enum {
@@ -141,7 +142,6 @@ typedef struct DRWCall {
   union {
     struct { /* type == DRW_CALL_SINGLE */
       GPUBatch *geometry;
-      short ma_index;
     } single;
     struct { /* type == DRW_CALL_RANGE */
       GPUBatch *geometry;
@@ -250,7 +250,7 @@ struct DRWShadingGroup {
   int orcotexfac;
   int callid;
   int objectinfo;
-  uint16_t matflag; /* Matrices needed, same as DRWCall.flag */
+  uchar matflag; /* Matrices needed, same as DRWCall.flag */
 
   DRWPass *pass_parent; /* backlink to pass we're in */
 #ifndef NDEBUG
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 5d5e81ebbe2..0eac9512d0f 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -386,7 +386,7 @@ static void drw_call_state_update_matflag(DRWCallStat

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list