Fix error spam in the renderer when using GPUParticles3D
The flag INSTANCE_DATA_FLAG_MULTIMESH is used for both multimesh and particles instances, this commit adds a new INSTANCE_DATA_FLAG_PARTICLES flag to discriminate between them. This flag will also be used in the future to properly support TAA in particles.
This commit is contained in:
parent
4ba934bf3d
commit
b668268772
4 changed files with 27 additions and 23 deletions
|
@ -304,12 +304,13 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
INSTANCE_DATA_FLAGS_NON_UNIFORM_SCALE = 1 << 5,
|
INSTANCE_DATA_FLAGS_NON_UNIFORM_SCALE = 1 << 4,
|
||||||
INSTANCE_DATA_FLAG_USE_GI_BUFFERS = 1 << 6,
|
INSTANCE_DATA_FLAG_USE_GI_BUFFERS = 1 << 5,
|
||||||
INSTANCE_DATA_FLAG_USE_LIGHTMAP_CAPTURE = 1 << 8,
|
INSTANCE_DATA_FLAG_USE_LIGHTMAP_CAPTURE = 1 << 7,
|
||||||
INSTANCE_DATA_FLAG_USE_LIGHTMAP = 1 << 9,
|
INSTANCE_DATA_FLAG_USE_LIGHTMAP = 1 << 8,
|
||||||
INSTANCE_DATA_FLAG_USE_SH_LIGHTMAP = 1 << 10,
|
INSTANCE_DATA_FLAG_USE_SH_LIGHTMAP = 1 << 9,
|
||||||
INSTANCE_DATA_FLAG_USE_VOXEL_GI = 1 << 11,
|
INSTANCE_DATA_FLAG_USE_VOXEL_GI = 1 << 10,
|
||||||
|
INSTANCE_DATA_FLAG_PARTICLES = 1 << 11,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH = 1 << 12,
|
INSTANCE_DATA_FLAG_MULTIMESH = 1 << 12,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH_FORMAT_2D = 1 << 13,
|
INSTANCE_DATA_FLAG_MULTIMESH_FORMAT_2D = 1 << 13,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR = 1 << 14,
|
INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR = 1 << 14,
|
||||||
|
|
|
@ -477,7 +477,7 @@ void RenderForwardClustered::_render_list_template(RenderingDevice::DrawListID p
|
||||||
prev_material_uniform_set = material_uniform_set;
|
prev_material_uniform_set = material_uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (surf->owner->base_flags & INSTANCE_DATA_FLAG_MULTIMESH) {
|
if ((surf->owner->base_flags & (INSTANCE_DATA_FLAG_MULTIMESH | INSTANCE_DATA_FLAG_PARTICLES)) == INSTANCE_DATA_FLAG_MULTIMESH) {
|
||||||
mesh_storage->_multimesh_get_motion_vectors_offsets(surf->owner->data->base, push_constant.multimesh_motion_vectors_current_offset, push_constant.multimesh_motion_vectors_previous_offset);
|
mesh_storage->_multimesh_get_motion_vectors_offsets(surf->owner->data->base, push_constant.multimesh_motion_vectors_current_offset, push_constant.multimesh_motion_vectors_previous_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1153,8 +1153,8 @@ void RenderForwardClustered::_fill_render_list(RenderListType p_render_list, con
|
||||||
scene_state.used_depth_texture = true;
|
scene_state.used_depth_texture = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_color_pass_flags & COLOR_PASS_FLAG_MOTION_VECTORS && flags & INSTANCE_DATA_FLAG_MULTIMESH) {
|
if (p_color_pass_flags & COLOR_PASS_FLAG_MOTION_VECTORS) {
|
||||||
if (RendererRD::MeshStorage::get_singleton()->_multimesh_enable_motion_vectors(inst->data->base)) {
|
if ((flags & (INSTANCE_DATA_FLAG_MULTIMESH | INSTANCE_DATA_FLAG_PARTICLES)) == INSTANCE_DATA_FLAG_MULTIMESH && RendererRD::MeshStorage::get_singleton()->_multimesh_enable_motion_vectors(inst->data->base)) {
|
||||||
inst->transforms_uniform_set = mesh_storage->multimesh_get_3d_uniform_set(inst->data->base, scene_shader.default_shader_rd, TRANSFORMS_UNIFORM_SET);
|
inst->transforms_uniform_set = mesh_storage->multimesh_get_3d_uniform_set(inst->data->base, scene_shader.default_shader_rd, TRANSFORMS_UNIFORM_SET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2935,6 +2935,7 @@ void RenderForwardClustered::_geometry_instance_update(RenderGeometryInstance *p
|
||||||
ginstance->transforms_uniform_set = mesh_storage->multimesh_get_3d_uniform_set(ginstance->data->base, scene_shader.default_shader_rd, TRANSFORMS_UNIFORM_SET);
|
ginstance->transforms_uniform_set = mesh_storage->multimesh_get_3d_uniform_set(ginstance->data->base, scene_shader.default_shader_rd, TRANSFORMS_UNIFORM_SET);
|
||||||
|
|
||||||
} else if (ginstance->data->base_type == RS::INSTANCE_PARTICLES) {
|
} else if (ginstance->data->base_type == RS::INSTANCE_PARTICLES) {
|
||||||
|
ginstance->base_flags |= INSTANCE_DATA_FLAG_PARTICLES;
|
||||||
ginstance->base_flags |= INSTANCE_DATA_FLAG_MULTIMESH;
|
ginstance->base_flags |= INSTANCE_DATA_FLAG_MULTIMESH;
|
||||||
|
|
||||||
ginstance->base_flags |= INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR;
|
ginstance->base_flags |= INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR;
|
||||||
|
|
|
@ -231,13 +231,14 @@ class RenderForwardClustered : public RendererSceneRenderRD {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
INSTANCE_DATA_FLAGS_NON_UNIFORM_SCALE = 1 << 5,
|
INSTANCE_DATA_FLAGS_NON_UNIFORM_SCALE = 1 << 4,
|
||||||
INSTANCE_DATA_FLAG_USE_GI_BUFFERS = 1 << 6,
|
INSTANCE_DATA_FLAG_USE_GI_BUFFERS = 1 << 5,
|
||||||
INSTANCE_DATA_FLAG_USE_SDFGI = 1 << 7,
|
INSTANCE_DATA_FLAG_USE_SDFGI = 1 << 6,
|
||||||
INSTANCE_DATA_FLAG_USE_LIGHTMAP_CAPTURE = 1 << 8,
|
INSTANCE_DATA_FLAG_USE_LIGHTMAP_CAPTURE = 1 << 7,
|
||||||
INSTANCE_DATA_FLAG_USE_LIGHTMAP = 1 << 9,
|
INSTANCE_DATA_FLAG_USE_LIGHTMAP = 1 << 8,
|
||||||
INSTANCE_DATA_FLAG_USE_SH_LIGHTMAP = 1 << 10,
|
INSTANCE_DATA_FLAG_USE_SH_LIGHTMAP = 1 << 9,
|
||||||
INSTANCE_DATA_FLAG_USE_VOXEL_GI = 1 << 11,
|
INSTANCE_DATA_FLAG_USE_VOXEL_GI = 1 << 10,
|
||||||
|
INSTANCE_DATA_FLAG_PARTICLES = 1 << 11,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH = 1 << 12,
|
INSTANCE_DATA_FLAG_MULTIMESH = 1 << 12,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH_FORMAT_2D = 1 << 13,
|
INSTANCE_DATA_FLAG_MULTIMESH_FORMAT_2D = 1 << 13,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR = 1 << 14,
|
INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR = 1 << 14,
|
||||||
|
|
|
@ -442,13 +442,14 @@ protected:
|
||||||
|
|
||||||
// check which ones of these apply, probably all except GI and SDFGI
|
// check which ones of these apply, probably all except GI and SDFGI
|
||||||
enum {
|
enum {
|
||||||
INSTANCE_DATA_FLAGS_NON_UNIFORM_SCALE = 1 << 5,
|
INSTANCE_DATA_FLAGS_NON_UNIFORM_SCALE = 1 << 4,
|
||||||
INSTANCE_DATA_FLAG_USE_GI_BUFFERS = 1 << 6,
|
INSTANCE_DATA_FLAG_USE_GI_BUFFERS = 1 << 5,
|
||||||
INSTANCE_DATA_FLAG_USE_SDFGI = 1 << 7,
|
INSTANCE_DATA_FLAG_USE_SDFGI = 1 << 6,
|
||||||
INSTANCE_DATA_FLAG_USE_LIGHTMAP_CAPTURE = 1 << 8,
|
INSTANCE_DATA_FLAG_USE_LIGHTMAP_CAPTURE = 1 << 7,
|
||||||
INSTANCE_DATA_FLAG_USE_LIGHTMAP = 1 << 9,
|
INSTANCE_DATA_FLAG_USE_LIGHTMAP = 1 << 8,
|
||||||
INSTANCE_DATA_FLAG_USE_SH_LIGHTMAP = 1 << 10,
|
INSTANCE_DATA_FLAG_USE_SH_LIGHTMAP = 1 << 9,
|
||||||
INSTANCE_DATA_FLAG_USE_VOXEL_GI = 1 << 11,
|
INSTANCE_DATA_FLAG_USE_VOXEL_GI = 1 << 10,
|
||||||
|
INSTANCE_DATA_FLAG_PARTICLES = 1 << 11,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH = 1 << 12,
|
INSTANCE_DATA_FLAG_MULTIMESH = 1 << 12,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH_FORMAT_2D = 1 << 13,
|
INSTANCE_DATA_FLAG_MULTIMESH_FORMAT_2D = 1 << 13,
|
||||||
INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR = 1 << 14,
|
INSTANCE_DATA_FLAG_MULTIMESH_HAS_COLOR = 1 << 14,
|
||||||
|
|
Loading…
Reference in a new issue