[Bf-blender-cvs] [84bf5e44220] new-object-types: Volumes: cleaning / refactoring from code review

Brecht Van Lommel noreply at git.blender.org
Tue Mar 17 14:45:40 CET 2020


Commit: 84bf5e44220358901f056b774e0c99196b6d4083
Author: Brecht Van Lommel
Date:   Tue Mar 17 09:46:06 2020 +0100
Branches: new-object-types
https://developer.blender.org/rB84bf5e44220358901f056b774e0c99196b6d4083

Volumes: cleaning / refactoring from code review

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

M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/eevee_render.c
M	source/blender/draw/engines/eevee/eevee_volumes.c
M	source/blender/draw/engines/overlay/overlay_wireframe.c
M	source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_volume_vert.glsl
M	source/blender/draw/engines/workbench/workbench_engine.c
M	source/blender/draw/engines/workbench/workbench_volume.c
M	source/blender/draw/intern/draw_cache.h
M	source/blender/draw/intern/draw_cache_impl_volume.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 5feea16fd94..70933e21719 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -124,17 +124,15 @@ void EEVEE_cache_populate(void *vedata, Object *ob)
   }
 
   if (DRW_object_is_renderable(ob) && (ob_visibility & OB_VISIBLE_SELF)) {
-    if (ELEM(ob->type,
-             OB_MESH,
-             OB_CURVE,
-             OB_SURF,
-             OB_FONT,
-             OB_MBALL,
-             OB_HAIR,
-             OB_POINTCLOUD,
-             OB_VOLUME)) {
+    if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
       EEVEE_materials_cache_populate(vedata, sldata, ob, &cast_shadow);
     }
+    else if (ob->type == OB_HAIR) {
+      EEVEE_object_hair_cache_populate(vedata, sldata, ob, &cast_shadow);
+    }
+    else if (ob->type == OB_VOLUME) {
+      EEVEE_volumes_cache_object_add(sldata, vedata, draw_ctx->scene, ob);
+    }
     else if (!USE_SCENE_LIGHT(draw_ctx->v3d)) {
       /* do not add any scene light sources to the cache */
     }
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 7c705c64376..bb64fe32bc3 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1880,15 +1880,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
                          !DRW_state_is_image_render();
 
   /* First get materials for this mesh. */
-  if (ELEM(ob->type,
-           OB_MESH,
-           OB_CURVE,
-           OB_SURF,
-           OB_FONT,
-           OB_MBALL,
-           OB_HAIR,
-           OB_POINTCLOUD,
-           OB_VOLUME)) {
+  if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
     const int materials_len = DRW_cache_object_material_count_get(ob);
 
     struct EeveeMaterialShadingGroups *shgrps_array = BLI_array_alloca(shgrps_array,
@@ -1945,15 +1937,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
     bool use_volume_material = (gpumat_array[0] &&
                                 GPU_material_has_volume_output(gpumat_array[0]));
 
-    if (ob->type == OB_HAIR) {
-      /* Hair object. */
-      eevee_hair_cache_populate(vedata, sldata, ob, NULL, NULL, HAIR_MATERIAL_NR, cast_shadow);
-      use_volume_material = false;
-    }
-    else if (ob->type == OB_VOLUME) {
-      /* Volume object. */
-    }
-    else if ((ob->dt >= OB_SOLID) || DRW_state_is_image_render()) {
+    if ((ob->dt >= OB_SOLID) || DRW_state_is_image_render()) {
       /* Get per-material split surface */
       struct GPUBatch **mat_geom = NULL;
 
@@ -2086,6 +2070,14 @@ void EEVEE_particle_hair_cache_populate(EEVEE_Data *vedata,
   }
 }
 
+void EEVEE_object_hair_cache_populate(EEVEE_Data *vedata,
+                                      EEVEE_ViewLayerData *sldata,
+                                      Object *ob,
+                                      bool *cast_shadow)
+{
+  eevee_hair_cache_populate(vedata, sldata, ob, NULL, NULL, HAIR_MATERIAL_NR, cast_shadow);
+}
+
 void EEVEE_materials_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 {
   EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 52fb8b3cced..e2470b4fa76 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -902,6 +902,10 @@ void EEVEE_particle_hair_cache_populate(EEVEE_Data *vedata,
                                         EEVEE_ViewLayerData *sldata,
                                         Object *ob,
                                         bool *cast_shadow);
+void EEVEE_object_hair_cache_populate(EEVEE_Data *vedata,
+                                      EEVEE_ViewLayerData *sldata,
+                                      Object *ob,
+                                      bool *cast_shadow);
 void EEVEE_materials_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
 struct GPUMaterial *EEVEE_material_world_lightprobe_get(struct Scene *scene, struct World *wo);
 struct GPUMaterial *EEVEE_material_world_background_get(struct Scene *scene, struct World *wo);
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index 460fe1e3522..c8357b56b18 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -177,7 +177,7 @@ bool EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *
 void EEVEE_render_cache(void *vedata,
                         struct Object *ob,
                         struct RenderEngine *engine,
-                        struct Depsgraph *UNUSED(depsgraph))
+                        struct Depsgraph *depsgraph)
 {
   EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
   EEVEE_LightProbesInfo *pinfo = sldata->probes;
@@ -208,17 +208,16 @@ void EEVEE_render_cache(void *vedata,
   }
 
   if (ob_visibility & OB_VISIBLE_SELF) {
-    if (ELEM(ob->type,
-             OB_MESH,
-             OB_CURVE,
-             OB_SURF,
-             OB_FONT,
-             OB_MBALL,
-             OB_HAIR,
-             OB_POINTCLOUD,
-             OB_VOLUME)) {
+    if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
       EEVEE_materials_cache_populate(vedata, sldata, ob, &cast_shadow);
     }
+    else if (ob->type == OB_HAIR) {
+      EEVEE_object_hair_cache_populate(vedata, sldata, ob, &cast_shadow);
+    }
+    else if (ob->type == OB_VOLUME) {
+      Scene *scene = DEG_get_evaluated_scene(depsgraph);
+      EEVEE_volumes_cache_object_add(sldata, vedata, scene, ob);
+    }
     else if (ob->type == OB_LIGHTPROBE) {
       EEVEE_lightprobes_cache_add(sldata, vedata, ob);
     }
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c
index 6a0bca72d05..e0008558135 100644
--- a/source/blender/draw/engines/eevee/eevee_volumes.c
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -373,8 +373,7 @@ void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
       /* Fix principle volumetric not working with world materials. */
       ListBase gpu_grids = GPU_material_volume_grids(mat);
-      for (GPUMaterialVolumeGrid *gpu_grid = gpu_grids.first; gpu_grid;
-           gpu_grid = gpu_grid->next) {
+      LISTBASE_FOREACH (GPUMaterialVolumeGrid *, gpu_grid, &gpu_grids) {
         DRW_shgroup_uniform_texture(grp, gpu_grid->sampler_name, e_data.dummy_density);
       }
 
@@ -395,7 +394,7 @@ void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
   }
 }
 
-static bool eevee_volume_object_cache_init(Object *ob, ListBase *gpu_grids, DRWShadingGroup *grp)
+static bool eevee_volume_object_grids_init(Object *ob, ListBase *gpu_grids, DRWShadingGroup *grp)
 {
   Volume *volume = ob->data;
   BKE_volume_load(volume, G.main);
@@ -404,7 +403,7 @@ static bool eevee_volume_object_cache_init(Object *ob, ListBase *gpu_grids, DRWS
   DRWVolumeGrid *first_drw_grid = NULL;
   bool multiple_transforms = true;
 
-  for (GPUMaterialVolumeGrid *gpu_grid = gpu_grids->first; gpu_grid; gpu_grid = gpu_grid->next) {
+  LISTBASE_FOREACH (GPUMaterialVolumeGrid *, gpu_grid, gpu_grids) {
     VolumeGrid *volume_grid = BKE_volume_grid_find(volume, gpu_grid->name);
     DRWVolumeGrid *drw_grid = (volume_grid) ?
                                   DRW_volume_batch_cache_get_grid(volume, volume_grid) :
@@ -449,30 +448,24 @@ static bool eevee_volume_object_cache_init(Object *ob, ListBase *gpu_grids, DRWS
   }
 
   /* Don't use orco transform here, only matrix. */
-  static const float texco_loc[3] = {0.5f, 0.5f, 0.5f};
-  static const float texco_size[3] = {0.5f, 0.5f, 0.5f};
-  DRW_shgroup_uniform_vec3(grp, "volumeOrcoLoc", texco_loc, 1);
-  DRW_shgroup_uniform_vec3(grp, "volumeOrcoSize", texco_size, 1);
+  DRW_shgroup_uniform_vec3_copy(grp, "volumeOrcoLoc", (float[3]){0.5f, 0.5f, 0.5f});
+  DRW_shgroup_uniform_vec3_copy(grp, "volumeOrcoSize", (float[3]){0.5f, 0.5f, 0.5f});
 
   /* Set density scale. */
   const float density_scale = BKE_volume_density_scale(volume, ob->obmat);
   DRW_shgroup_uniform_float_copy(grp, "volumeDensityScale", density_scale);
 
   /* Bind volume grid textures. */
-  for (GPUMaterialVolumeGrid *gpu_grid = gpu_grids->first; gpu_grid; gpu_grid = gpu_grid->next) {
+  LISTBASE_FOREACH (GPUMaterialVolumeGrid *, gpu_grid, gpu_grids) {
     VolumeGrid *volume_grid = BKE_volume_grid_find(volume, gpu_grid->name);
     DRWVolumeGrid *drw_grid = (volume_grid) ?
                                   DRW_volume_batch_cache_get_grid(volume, volume_grid) :
                                   NULL;
 
-    if (drw_grid == NULL) {
-      DRW_shgroup_uniform_texture(grp, gpu_grid->sampler_name, e_data.dummy_density);
-      continue;
-    }
-
-    DRW_shgroup_uniform_texture(grp, gpu_grid->sampler_name, drw_grid->texture);
+    DRW_shgroup_uniform_texture(
+        grp, gpu_grid->sampler_name, (drw_grid) ? drw_grid->texture : e_data.dummy_density);
 
-    if (multiple_transforms) {
+    if (drw_grid && multiple_transforms) {
       /* Specify per-volume tranform matrix that is applied after the
        * transform from object to bounds. */
       mul_m4_m4m4(drw_grid->bounds_to_texture, drw_grid->object_to_texture, bounds_to_object);
@@ -483,74 +476,25 @@ static bool eevee_volume_object_cache_init(Object *ob, ListBase *gpu_grids, DRWS
   return true;
 }
 
-void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData *sldata,
-                                    EEVEE_Data *vedata,
-                                    Scene *scene,
-                                    Object *ob)
+static bool eevee_volume_object_mesh_init(Scene *scene,
+                                          Object *ob,
+                                          ListBase *gpu_grids,
+                                          DRWShadingGroup *grp)
 {
-  struct ModifierData *md = NULL;
-  Material *ma = BKE_object_material

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list