56 if (used >= ubos.
size()) {
71 const float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f};
72 const float one[4] = {1.0f, 1.0f, 1.0f, 1.0f};
80 memset(
g_data.dummy_grid_mat, 0,
sizeof(
g_data.dummy_grid_mat));
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);
149 (volume_grid) ?
g_data.dummy_zero :
153 copy_m4_m4(volume_infos.grids_xform[grid_id++].ptr(),
158 if (grids_len == 0) {
162 volume_infos.push_update();
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;
204 if (
STREQ(attr->name,
"density")) {
208 else if (
STREQ(attr->name,
"color")) {
212 else if (
STR_ELEM(attr->name,
"flame",
"temperature")) {
220 copy_m4_m4(volume_infos.grids_xform[grid_id++].ptr(),
g_data.dummy_grid_mat);
225 if (use_constant_color) {
240 copy_m4_m4(volume_infos.grids_xform[grid_id++].ptr(),
g_data.dummy_grid_mat);
244 volume_infos.push_update();
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
struct ModifierData * BKE_modifiers_findby_type(const struct Object *ob, ModifierType type)
const VolumeGrid * BKE_volume_grid_find_for_read(const struct Volume *volume, const char *name)
bool BKE_volume_load(const struct Volume *volume, const struct Main *bmain)
Volume data-block rendering and viewport drawing utilities.
float BKE_volume_density_scale(const struct Volume *volume, const float matrix[4][4])
#define LISTBASE_FOREACH(type, var, list)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
@ FLUID_DOMAIN_ACTIVE_COLORS
@ FLUID_DOMAIN_ACTIVE_COLOR_SET
#define DRW_shgroup_uniform_block(shgroup, name, ubo)
ListBase GPU_material_attributes(GPUMaterial *material)
void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat, bool use_clamp)
struct GPUTexture GPUTexture
#define GPU_TEXTURE_FREE_SAFE(texture)
GPUTexture * GPU_texture_create_3d(const char *name, int w, int h, int d, int mip_len, eGPUTextureFormat texture_format, eGPUDataFormat data_format, const void *data)
void append(const T &value)
DRWVolumeGrid * DRW_volume_batch_cache_get_grid(struct Volume *volume, const struct VolumeGrid *grid)
void DRW_smoke_ensure(struct 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_free(void)
void DRW_volume_ubos_pool_free(void *pool)
void DRW_volume_init(DRWData *drw_data)
static DRWShadingGroup * drw_volume_world_grids_init(ListBase *attrs, DRWShadingGroup *grp)
static DRWShadingGroup * drw_volume_object_mesh_init(Scene *scene, Object *ob, ListBase *attrs, DRWShadingGroup *grp)
static DRWShadingGroup * drw_volume_object_grids_init(Object *ob, ListBase *attrs, DRWShadingGroup *grp)
static struct @318 g_data
static void drw_volume_globals_init()
static GPUTexture * grid_default_texture(eGPUDefaultValue default_value)
DRWShadingGroup * DRW_shgroup_volume_create_sub(Scene *scene, Object *ob, DRWShadingGroup *shgrp, GPUMaterial *gpu_material)
float dummy_grid_mat[4][4]
blender::draw::UniformBuffer< VolumeInfos > VolumeInfosBuf
vec_base< float, 4 > float4
struct GPUTexture * texture
float object_to_texture[4][4]
struct GPUTexture * tex_density
struct GPUTexture * tex_color
struct GPUTexture * tex_flame
struct FluidDomainSettings * domain