[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