You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Extracting render buffers and changing it to a more generic solution
This commit is contained in:
@@ -473,7 +473,7 @@ Fog::FogShaderData::~FogShaderData() {
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Volumetric Fog
|
||||
|
||||
Fog::VolumetricFog::VolumetricFog(const Vector3i &fog_size, RID p_sky_shader) {
|
||||
void Fog::VolumetricFog::init(const Vector3i &fog_size, RID p_sky_shader) {
|
||||
width = fog_size.x;
|
||||
height = fog_size.y;
|
||||
depth = fog_size.z;
|
||||
@@ -591,6 +591,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RENDER_TIMESTAMP("> Volumetric Fog");
|
||||
RD::get_singleton()->draw_command_begin_label("Volumetric Fog");
|
||||
|
||||
Ref<VolumetricFog> fog = p_settings.vfog;
|
||||
|
||||
if (p_fog_volumes.size() > 0) {
|
||||
RD::get_singleton()->draw_command_begin_label("Render Volumetric Fog Volumes");
|
||||
|
||||
@@ -623,9 +625,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
params.z_far = z_far;
|
||||
params.time = p_settings.time;
|
||||
|
||||
params.fog_volume_size[0] = p_settings.vfog->width;
|
||||
params.fog_volume_size[1] = p_settings.vfog->height;
|
||||
params.fog_volume_size[2] = p_settings.vfog->depth;
|
||||
params.fog_volume_size[0] = fog->width;
|
||||
params.fog_volume_size[1] = fog->height;
|
||||
params.fog_volume_size[2] = fog->depth;
|
||||
|
||||
params.use_temporal_reprojection = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_temporal_reprojection(p_settings.env);
|
||||
params.temporal_frame = RSG::rasterizer->get_frame_number() % VolumetricFog::MAX_TEMPORAL_FRAMES;
|
||||
@@ -638,7 +640,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
|
||||
RD::get_singleton()->buffer_update(volumetric_fog.volume_ubo, 0, sizeof(VolumetricFogShader::VolumeUBO), ¶ms, RD::BARRIER_MASK_COMPUTE);
|
||||
|
||||
if (p_settings.vfog->fog_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(p_settings.vfog->fog_uniform_set)) {
|
||||
if (fog->fog_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(fog->fog_uniform_set)) {
|
||||
Vector<RD::Uniform> uniforms;
|
||||
|
||||
{
|
||||
@@ -649,7 +651,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
#endif
|
||||
u.binding = 1;
|
||||
u.append_id(p_settings.vfog->emissive_map);
|
||||
u.append_id(fog->emissive_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
@@ -669,7 +671,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
#endif
|
||||
u.binding = 3;
|
||||
u.append_id(p_settings.vfog->density_map);
|
||||
u.append_id(fog->density_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
@@ -681,11 +683,11 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
#endif
|
||||
u.binding = 4;
|
||||
u.append_id(p_settings.vfog->light_map);
|
||||
u.append_id(fog->light_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
p_settings.vfog->fog_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.default_shader_rd, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS);
|
||||
fog->fog_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.default_shader_rd, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS);
|
||||
}
|
||||
|
||||
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
|
||||
@@ -731,7 +733,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
if (volume_type != RS::FOG_VOLUME_SHAPE_WORLD) {
|
||||
// Local fog volume.
|
||||
Vector3i points[8];
|
||||
Vector3 fog_size = Vector3(p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth);
|
||||
Vector3 fog_size = Vector3(fog->width, fog->height, fog->depth);
|
||||
float volumetric_fog_detail_spread = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_detail_spread(p_settings.env);
|
||||
points[0] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(extents.x, extents.y, extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform);
|
||||
points[1] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(-extents.x, extents.y, extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform);
|
||||
@@ -742,7 +744,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
points[6] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(extents.x, -extents.y, -extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform);
|
||||
points[7] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(-extents.x, -extents.y, -extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform);
|
||||
|
||||
min = Vector3i(int32_t(p_settings.vfog->width) - 1, int32_t(p_settings.vfog->height) - 1, int32_t(p_settings.vfog->depth) - 1);
|
||||
min = Vector3i(int32_t(fog->width) - 1, int32_t(fog->height) - 1, int32_t(fog->depth) - 1);
|
||||
max = Vector3i(1, 1, 1);
|
||||
|
||||
for (int j = 0; j < 8; j++) {
|
||||
@@ -753,9 +755,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
kernel_size = max - min;
|
||||
} else {
|
||||
// Volume type global runs on all cells
|
||||
extents = Vector3(p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth);
|
||||
extents = Vector3(fog->width, fog->height, fog->depth);
|
||||
min = Vector3i(0, 0, 0);
|
||||
kernel_size = Vector3i(int32_t(p_settings.vfog->width), int32_t(p_settings.vfog->height), int32_t(p_settings.vfog->depth));
|
||||
kernel_size = Vector3i(int32_t(fog->width), int32_t(fog->height), int32_t(fog->depth));
|
||||
}
|
||||
|
||||
if (kernel_size.x == 0 || kernel_size.y == 0 || kernel_size.z == 0) {
|
||||
@@ -777,7 +779,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
|
||||
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, shader_data->pipeline);
|
||||
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->fog_uniform_set, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->fog_uniform_set, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS);
|
||||
RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(VolumetricFogShader::FogPushConstant));
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, volumetric_fog.base_uniform_set, VolumetricFogShader::FogSet::FOG_SET_BASE);
|
||||
if (material->uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(material->uniform_set)) { // Material may not have a uniform set.
|
||||
@@ -795,7 +797,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RD::get_singleton()->compute_list_end();
|
||||
}
|
||||
|
||||
if (p_settings.vfog->process_uniform_set_density.is_null() || !RD::get_singleton()->uniform_set_is_valid(p_settings.vfog->process_uniform_set_density)) {
|
||||
if (fog->process_uniform_set_density.is_null() || !RD::get_singleton()->uniform_set_is_valid(fog->process_uniform_set_density)) {
|
||||
//re create uniform set if needed
|
||||
Vector<RD::Uniform> uniforms;
|
||||
Vector<RD::Uniform> copy_uniforms;
|
||||
@@ -875,7 +877,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RD::Uniform u;
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
u.binding = 8;
|
||||
u.append_id(p_settings.vfog->light_density_map);
|
||||
u.append_id(fog->light_density_map);
|
||||
uniforms.push_back(u);
|
||||
copy_uniforms.push_back(u);
|
||||
}
|
||||
@@ -884,7 +886,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RD::Uniform u;
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
u.binding = 9;
|
||||
u.append_id(p_settings.vfog->fog_map);
|
||||
u.append_id(fog->fog_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
@@ -892,7 +894,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RD::Uniform u;
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
u.binding = 9;
|
||||
u.append_id(p_settings.vfog->prev_light_density_map);
|
||||
u.append_id(fog->prev_light_density_map);
|
||||
copy_uniforms.push_back(u);
|
||||
}
|
||||
|
||||
@@ -909,7 +911,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RD::Uniform u;
|
||||
u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
|
||||
u.binding = 11;
|
||||
u.append_id(p_settings.voxel_gl_buffer);
|
||||
u.append_id(p_settings.voxel_gi_buffer);
|
||||
uniforms.push_back(u);
|
||||
copy_uniforms.push_back(u);
|
||||
}
|
||||
@@ -944,7 +946,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RD::Uniform u;
|
||||
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
|
||||
u.binding = 15;
|
||||
u.append_id(p_settings.vfog->prev_light_density_map);
|
||||
u.append_id(fog->prev_light_density_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
{
|
||||
@@ -955,7 +957,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
#endif
|
||||
u.binding = 16;
|
||||
u.append_id(p_settings.vfog->density_map);
|
||||
u.append_id(fog->density_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
{
|
||||
@@ -966,7 +968,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
#endif
|
||||
u.binding = 17;
|
||||
u.append_id(p_settings.vfog->light_map);
|
||||
u.append_id(fog->light_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
@@ -978,7 +980,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
|
||||
#endif
|
||||
u.binding = 18;
|
||||
u.append_id(p_settings.vfog->emissive_map);
|
||||
u.append_id(fog->emissive_map);
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
@@ -992,9 +994,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
p_settings.vfog->copy_uniform_set = RD::get_singleton()->uniform_set_create(copy_uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_COPY), 0);
|
||||
fog->copy_uniform_set = RD::get_singleton()->uniform_set_create(copy_uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_COPY), 0);
|
||||
|
||||
p_settings.vfog->process_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);
|
||||
fog->process_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);
|
||||
|
||||
RID aux7 = uniforms.write[7].get_id(0);
|
||||
RID aux8 = uniforms.write[8].get_id(0);
|
||||
@@ -1002,17 +1004,17 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
uniforms.write[7].set_id(0, aux8);
|
||||
uniforms.write[8].set_id(0, aux7);
|
||||
|
||||
p_settings.vfog->process_uniform_set2 = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);
|
||||
fog->process_uniform_set2 = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);
|
||||
|
||||
uniforms.remove_at(8);
|
||||
uniforms.write[7].set_id(0, aux7);
|
||||
p_settings.vfog->process_uniform_set_density = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY), 0);
|
||||
fog->process_uniform_set_density = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY), 0);
|
||||
}
|
||||
|
||||
bool using_sdfgi = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_gi_inject(p_settings.env) > 0.0001 && RendererSceneRenderRD::get_singleton()->environment_get_sdfgi_enabled(p_settings.env) && (p_settings.sdfgi != nullptr);
|
||||
bool using_sdfgi = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_gi_inject(p_settings.env) > 0.0001 && RendererSceneRenderRD::get_singleton()->environment_get_sdfgi_enabled(p_settings.env) && (p_settings.sdfgi.is_valid());
|
||||
|
||||
if (using_sdfgi) {
|
||||
if (p_settings.vfog->sdfgi_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(p_settings.vfog->sdfgi_uniform_set)) {
|
||||
if (fog->sdfgi_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(fog->sdfgi_uniform_set)) {
|
||||
Vector<RD::Uniform> uniforms;
|
||||
|
||||
{
|
||||
@@ -1039,12 +1041,12 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
uniforms.push_back(u);
|
||||
}
|
||||
|
||||
p_settings.vfog->sdfgi_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY_WITH_SDFGI), 1);
|
||||
fog->sdfgi_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY_WITH_SDFGI), 1);
|
||||
}
|
||||
}
|
||||
|
||||
p_settings.vfog->length = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_length(p_settings.env);
|
||||
p_settings.vfog->spread = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_detail_spread(p_settings.env);
|
||||
fog->length = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_length(p_settings.env);
|
||||
fog->spread = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_detail_spread(p_settings.env);
|
||||
|
||||
VolumetricFogShader::ParamsUBO params;
|
||||
|
||||
@@ -1079,9 +1081,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
params.ambient_color[2] = ambient_color.b;
|
||||
params.sky_contribution = RendererSceneRenderRD::get_singleton()->environment_get_ambient_sky_contribution(p_settings.env);
|
||||
|
||||
params.fog_volume_size[0] = p_settings.vfog->width;
|
||||
params.fog_volume_size[1] = p_settings.vfog->height;
|
||||
params.fog_volume_size[2] = p_settings.vfog->depth;
|
||||
params.fog_volume_size[0] = fog->width;
|
||||
params.fog_volume_size[1] = fog->height;
|
||||
params.fog_volume_size[2] = fog->depth;
|
||||
|
||||
params.directional_light_count = p_directional_light_count;
|
||||
|
||||
@@ -1149,19 +1151,19 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
|
||||
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[using_sdfgi ? VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY_WITH_SDFGI : VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY]);
|
||||
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set_density, 0);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set_density, 0);
|
||||
|
||||
if (using_sdfgi) {
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->sdfgi_uniform_set, 1);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->sdfgi_uniform_set, 1);
|
||||
}
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);
|
||||
RD::get_singleton()->compute_list_add_barrier(compute_list);
|
||||
|
||||
// Copy fog to history buffer
|
||||
if (RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_temporal_reprojection(p_settings.env)) {
|
||||
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_COPY]);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->copy_uniform_set, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->copy_uniform_set, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);
|
||||
RD::get_singleton()->compute_list_add_barrier(compute_list);
|
||||
}
|
||||
RD::get_singleton()->draw_command_end_label();
|
||||
@@ -1172,8 +1174,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RENDER_TIMESTAMP("Filter Fog");
|
||||
|
||||
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FILTER]);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);
|
||||
|
||||
RD::get_singleton()->compute_list_end();
|
||||
//need restart for buffer update
|
||||
@@ -1183,8 +1185,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
|
||||
compute_list = RD::get_singleton()->compute_list_begin();
|
||||
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FILTER]);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set2, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set2, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);
|
||||
|
||||
RD::get_singleton()->compute_list_add_barrier(compute_list);
|
||||
RD::get_singleton()->draw_command_end_label();
|
||||
@@ -1194,8 +1196,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
||||
RD::get_singleton()->draw_command_begin_label("Integrate Fog");
|
||||
|
||||
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG]);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, 1);
|
||||
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set, 0);
|
||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, 1);
|
||||
|
||||
RD::get_singleton()->compute_list_end(RD::BARRIER_MASK_RASTER);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user