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};
74 dummy_zero.ensure_3d(blender::gpu::TextureFormat::SFLOAT_32_32_32_32,
int3(1), usage, zero);
75 dummy_one.ensure_3d(blender::gpu::TextureFormat::SFLOAT_32_32_32_32,
int3(1), usage, one);
82 switch (default_value) {
94 if (drw_data ==
nullptr) {
98 drw_data->
volume_module = MEM_new<VolumeModule>(
"VolumeModule");
112template<
typename PassType>
117 PassType *sub = &ps.sub(
"World Volume");
119 sub->bind_texture(attr->input_name,
module.grid_default_texture(attr->default_value));
125template<
typename PassType>
146 PassType *sub = &ps.sub(
"Volume Object SubPass");
162 module.grid_default_texture(attr->default_value);
164 sub->bind_texture(attr->input_name, (
gpu::Texture *)grid_tex);
172 sub->bind_ubo(
"drw_volume", volume_infos);
177template<
typename PassType>
203 sub = &ps.sub(
"Volume Mesh SubPass");
206 sub->bind_texture(attr->input_name,
module.grid_default_texture(attr->default_value));
210 else if (fds->
fluid) {
214 sub = &ps.sub(
"Volume Modifier SubPass");
226 if (
STREQ(attr->name,
"density")) {
227 sub->bind_texture(attr->input_name,
230 else if (
STREQ(attr->name,
"color")) {
233 else if (
STR_ELEM(attr->name,
"flame",
"temperature")) {
237 sub->bind_texture(attr->input_name,
module.grid_default_texture(attr->default_value));
244 if (use_constant_color) {
255 sub->bind_ubo(
"drw_volume", volume_infos);
261template<
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, blender::StringRef name)
Volume data-block rendering and viewport drawing utilities.
float BKE_volume_density_scale(const Volume *volume, const float matrix[4][4])
@ FLUID_DOMAIN_ACTIVE_COLORS
@ FLUID_DOMAIN_ACTIVE_COLOR_SET
T & DRW_object_get_data_for_drawing(const Object &object)
ListBase GPU_material_attributes(const GPUMaterial *material)
void GPU_texture_extend_mode(blender::gpu::Texture *texture, GPUSamplerExtendMode extend_mode)
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_SAMPLER_EXTEND_MODE_REPEAT
detail::PassBase< command::DrawMultiBuf > Sub
void DRW_smoke_ensure(FluidModifierData *fmd, int highres)
PassMain::Sub * volume_sub_pass(PassMain::Sub &ps, Scene *scene, Object *ob, GPUMaterial *gpu_material)
PassType * volume_object_grids_init(PassType &ps, Object *ob, ListBaseWrapper< GPUMaterialAttribute > &attrs)
blender::draw::UniformBuffer< VolumeInfos > VolumeInfosBuf
PassType * volume_world_grids_init(PassType &ps, ListBaseWrapper< GPUMaterialAttribute > &attrs)
PassType * volume_sub_pass_implementation(PassType &ps, Scene *scene, Object *ob, GPUMaterial *gpu_material)
void DRW_volume_init(DRWData *drw_data=nullptr)
PassType * drw_volume_object_mesh_init(PassType &ps, Scene *scene, Object *ob, ListBaseWrapper< GPUMaterialAttribute > &attrs)
DRWVolumeGrid * DRW_volume_batch_cache_get_grid(Volume *volume, const bke::VolumeGridData *volume_grid)
void DRW_volume_module_free(draw::VolumeModule *module)
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
VecBase< int32_t, 3 > int3
ListBaseWrapperTemplate< ListBase, T > ListBaseWrapper
VecBase< float, 3 > float3
static struct PyModuleDef module
blender::draw::VolumeModule * volume_module
struct FluidDomainSettings * domain
float4x4 grids_xform[DRW_GRID_PER_VOLUME_MAX]
static MatBase identity()
float4x4 object_to_texture
gpu::Texture * grid_default_texture(GPUDefaultValue default_value)
VolumeUniformBufPool ubo_pool