From 53e6d30771758eb852bdc2bc64f82ee9274e17bc Mon Sep 17 00:00:00 2001 From: Chaosus Date: Sat, 1 Feb 2025 14:35:57 +0300 Subject: [PATCH] Fix crash when assigning wrong shader to particle process material --- .../renderer_rd/storage_rd/particles_storage.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp index 6bb7eff83cf..5a20b3ac64e 100644 --- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp @@ -1325,10 +1325,11 @@ void ParticlesStorage::particles_set_view_axis(RID p_particles, const Vector3 &p void ParticlesStorage::_particles_update_buffers(Particles *particles) { uint32_t userdata_count = 0; - MaterialStorage::ShaderData *shader_data = MaterialStorage::get_singleton()->material_get_shader_data(particles->process_material); - if (shader_data) { - const ParticlesShaderData *particle_shader_data = static_cast(shader_data); - userdata_count = particle_shader_data->userdata_count; + if (particles->process_material.is_valid()) { + ParticleProcessMaterialData *material_data = static_cast(MaterialStorage::get_singleton()->material_get_data(particles->process_material, MaterialStorage::SHADER_TYPE_PARTICLES)); + if (material_data && material_data->shader_data->version.is_valid() && material_data->shader_data->valid) { + userdata_count = material_data->shader_data->userdata_count; + } } bool uses_motion_vectors = RSG::viewport->get_num_viewports_with_motion_vectors() > 0 || (RendererCompositorStorage::get_singleton()->get_num_compositor_effects_with_motion_vectors() > 0);