58 if (used >=
ubos.size()) {
73 const float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f};
74 const float one[4] = {1.0f, 1.0f, 1.0f, 1.0f};
91 if (
g_data.dummy_one ==
nullptr) {
95 switch (default_value) {
112 if (
g_data.dummy_one ==
nullptr) {
130 volume_infos.color_mul =
float4(1.0f);
131 volume_infos.temperature_mul = 1.0f;
132 volume_infos.temperature_bias = 0.0f;
135 int grid_id = 0, grids_len = 0;
142 grids_len +=
int(volume_grid !=
nullptr);
148 const GPUTexture *grid_tex = (drw_grid) ? drw_grid->
texture :
149 (volume_grid) ?
g_data.dummy_zero :
158 if (grids_len == 0) {
179 volume_infos.density_scale = 1.0f;
180 volume_infos.color_mul =
float4(1.0f);
181 volume_infos.temperature_mul = 1.0f;
182 volume_infos.temperature_bias = 0.0f;
205 if (
STREQ(attr->name,
"density")) {
209 else if (
STREQ(attr->name,
"color")) {
213 else if (
STR_ELEM(attr->name,
"flame",
"temperature")) {
226 if (use_constant_color) {
283template<
typename PassType>
286 PassType *sub = &ps.sub(
"World Volume");
294template<
typename PassType>
311 volume_infos.color_mul =
float4(1.0f);
312 volume_infos.temperature_mul = 1.0f;
313 volume_infos.temperature_bias = 0.0f;
315 PassType *sub = &ps.sub(
"Volume Object SubPass");
328 const GPUTexture *grid_tex = (drw_grid) ? drw_grid->
texture :
329 (volume_grid) ?
g_data.dummy_zero :
332 sub->bind_texture(attr->input_name, (GPUTexture *)grid_tex);
340 sub->bind_ubo(
"drw_volume", volume_infos);
345template<
typename PassType>
356 volume_infos.density_scale = 1.0f;
357 volume_infos.color_mul =
float4(1.0f);
358 volume_infos.temperature_mul = 1.0f;
359 volume_infos.temperature_bias = 0.0f;
371 sub = &ps.sub(
"Volume Mesh SubPass");
378 else if (fds->
fluid) {
382 sub = &ps.sub(
"Volume Modifier SubPass");
394 if (
STREQ(attr->name,
"density")) {
395 sub->bind_texture(attr->input_name,
398 else if (
STREQ(attr->name,
"color")) {
401 else if (
STR_ELEM(attr->name,
"flame",
"temperature")) {
407 volume_infos.grids_xform[grid_id++] = orco_mat;
412 if (use_constant_color) {
423 sub->bind_ubo(
"drw_volume", volume_infos);
429template<
typename PassType>
void BKE_mesh_texspace_get(Mesh *mesh, float r_texspace_location[3], float r_texspace_size[3])
bool BKE_modifier_is_enabled(const Scene *scene, ModifierData *md, int required_mode)
ModifierData * BKE_modifiers_findby_type(const Object *ob, ModifierType type)
int BKE_volume_num_grids(const Volume *volume)
bool BKE_volume_load(const Volume *volume, const Main *bmain)
const blender::bke::VolumeGridData * BKE_volume_grid_find(const Volume *volume, const char *name)
Volume data-block rendering and viewport drawing utilities.
float BKE_volume_density_scale(const Volume *volume, const float matrix[4][4])
#define LISTBASE_FOREACH(type, var, list)
@ FLUID_DOMAIN_ACTIVE_COLORS
@ FLUID_DOMAIN_ACTIVE_COLOR_SET
#define DRW_shgroup_uniform_block(shgroup, name, ubo)
ListBase GPU_material_attributes(const GPUMaterial *material)
void GPU_texture_extend_mode(GPUTexture *texture, GPUSamplerExtendMode extend_mode)
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_SAMPLER_EXTEND_MODE_REPEAT
GPUTexture * GPU_texture_create_3d(const char *name, int width, int height, int depth, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const void *data)
#define GPU_TEXTURE_FREE_SAFE(texture)
void DRW_smoke_ensure(FluidModifierData *fmd, int highres)
void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
DRWShadingGroup * DRW_shgroup_create_sub(DRWShadingGroup *shgroup)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_volume_ubos_pool_free(void *pool)
static DRWShadingGroup * drw_volume_object_grids_init(Object *ob, ListBase *attrs, DRWShadingGroup *grp)
static GPUTexture * grid_default_texture(eGPUDefaultValue default_value)
DRWShadingGroup * DRW_shgroup_volume_create_sub(Scene *scene, Object *ob, DRWShadingGroup *shgrp, GPUMaterial *gpu_material)
static struct @301 g_data
void DRW_volume_init(DRWData *drw_data)
static DRWShadingGroup * drw_volume_object_mesh_init(Scene *scene, Object *ob, ListBase *attrs, DRWShadingGroup *grp)
static void drw_volume_globals_init()
static DRWShadingGroup * drw_volume_world_grids_init(ListBase *attrs, DRWShadingGroup *grp)
blender::draw::UniformBuffer< VolumeInfos > VolumeInfosBuf
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
RAYTRACE_GROUP_SIZE additional_info("eevee_shared", "eevee_gbuffer_data", "eevee_global_ubo", "eevee_sampling_data", "eevee_utility_texture", "eevee_hiz_data", "draw_view") .specialization_constant(Type RAYTRACE_GROUP_SIZE in_sh_0_tx in_sh_2_tx screen_normal_tx GPU_RGBA8
PassType * volume_object_grids_init(PassType &ps, Object *ob, ListBaseWrapper< GPUMaterialAttribute > &attrs)
PassType * volume_world_grids_init(PassType &ps, ListBaseWrapper< GPUMaterialAttribute > &attrs)
PassType * volume_sub_pass_implementation(PassType &ps, Scene *scene, Object *ob, GPUMaterial *gpu_material)
PassType * drw_volume_object_mesh_init(PassType &ps, Scene *scene, Object *ob, ListBaseWrapper< GPUMaterialAttribute > &attrs)
PassMain::Sub * volume_sub_pass(PassMain::Sub &ps, Scene *scene, Object *ob, GPUMaterial *gpu_material)
DRWVolumeGrid * DRW_volume_batch_cache_get_grid(Volume *volume, const bke::VolumeGridData *volume_grid)
MatBase< T, NumCol, NumRow > scale(const MatBase< T, NumCol, NumRow > &mat, const VectorT &scale)
MatT from_scale(const VecBase< typename MatT::base_type, ScaleDim > &scale)
MatBase< float, 4, 4 > float4x4
VecBase< float, 4 > float4
blender::float4x4 object_to_texture
struct GPUTexture * tex_density
struct GPUTexture * tex_color
struct GPUTexture * tex_flame
struct FluidDomainSettings * domain
static MatBase identity()