diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-06-07 19:32:34 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-06-07 19:32:34 +0300 |
commit | 627d42cd566d0800e1cd00cb8b81aec45667a0d5 (patch) | |
tree | d6ee1052b1f28ad57994e7ff1532b23c96f17977 /source/blender/draw | |
parent | ec493d79fa7d8f6885d31cae8f3d0cac47604a3c (diff) | |
parent | b568f445a52f22dcef57fed8b613d3a2dc2c7c22 (diff) |
Merge branch 'blender-v3.2-release'
# Conflicts:
# source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl | 10 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_common.h | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_volume.cc | 12 |
3 files changed, 21 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl index 186f438b03b..b3b9c7af19c 100644 --- a/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl +++ b/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl @@ -77,3 +77,13 @@ vec3 coordinate_incoming(vec3 P) { return vec3(0.0); } + +float attr_load_temperature_post(float attr) +{ + return attr; +} + +vec4 attr_load_color_post(vec4 attr) +{ + return attr; +} diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h index b6b0c94f4bf..d31c98e0dee 100644 --- a/source/blender/draw/intern/draw_common.h +++ b/source/blender/draw/intern/draw_common.h @@ -93,7 +93,7 @@ void DRW_curves_free(void); /** * Add attributes bindings of volume grids to an existing shading group. * No draw call is added so the caller can decide how to use the data. - * \return nullptr if there is something to draw. + * \return nullptr if there is nothing to draw. */ struct DRWShadingGroup *DRW_shgroup_volume_create_sub(struct Scene *scene, struct Object *ob, diff --git a/source/blender/draw/intern/draw_volume.cc b/source/blender/draw/intern/draw_volume.cc index 8d9a6f486e2..c4e58ab24cb 100644 --- a/source/blender/draw/intern/draw_volume.cc +++ b/source/blender/draw/intern/draw_volume.cc @@ -129,12 +129,14 @@ static DRWShadingGroup *drw_volume_object_grids_init(Object *ob, volume_infos.temperature_bias = 0.0f; /* Bind volume grid textures. */ - int grid_id = 0; + int grid_id = 0, grids_len = 0; LISTBASE_FOREACH (GPUMaterialAttribute *, attr, attrs) { const VolumeGrid *volume_grid = BKE_volume_grid_find_for_read(volume, attr->name); const DRWVolumeGrid *drw_grid = (volume_grid) ? DRW_volume_batch_cache_get_grid(volume, volume_grid) : nullptr; + /* Count number of valid attributes. */ + grids_len += int(volume_grid != nullptr); /* Handle 3 cases here: * - Grid exists and texture was loaded -> use texture. @@ -145,7 +147,13 @@ static DRWShadingGroup *drw_volume_object_grids_init(Object *ob, grid_default_texture(attr->default_value); DRW_shgroup_uniform_texture(grp, attr->input_name, grid_tex); - copy_m4_m4(volume_infos.grids_xform[grid_id++].ptr(), drw_grid->object_to_texture); + copy_m4_m4(volume_infos.grids_xform[grid_id++].ptr(), + (drw_grid) ? drw_grid->object_to_texture : g_data.dummy_grid_mat); + } + /* Render nothing if there is no attribute for the shader to render. + * This also avoids an assert caused by the bounding box being zero in size. */ + if (grids_len == 0) { + return nullptr; } volume_infos.push_update(); |