mirror of
https://github.com/godotengine/godot.git
synced 2025-01-22 18:43:29 -05:00
Fix gl_compatibility lightmap uniforms not being set
Fixes #99592 The following variables were set too early, and later code never ran.. prev_shader, prev_variant, prev_spec_constants variables These variables were shared in two different branch conditions but were updated inside the first one, so the second could never be true.. The condition to update lighting also should check prev_spec_constants since it updates that uniform.
This commit is contained in:
parent
0c45ace151
commit
45a7bcc477
1 changed files with 5 additions and 6 deletions
|
@ -3314,10 +3314,6 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
|
|||
}
|
||||
|
||||
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::OPAQUE_PREPASS_THRESHOLD, opaque_prepass_threshold, shader->version, instance_variant, spec_constants);
|
||||
|
||||
prev_shader = shader;
|
||||
prev_variant = instance_variant;
|
||||
prev_spec_constants = spec_constants;
|
||||
}
|
||||
|
||||
// Pass in lighting uniforms.
|
||||
|
@ -3355,7 +3351,7 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
|
|||
}
|
||||
|
||||
// Pass light count and array of light indices for base pass.
|
||||
if ((prev_inst != inst || prev_shader != shader || prev_variant != instance_variant) && pass == 0) {
|
||||
if ((prev_inst != inst || prev_shader != shader || prev_variant != instance_variant || prev_spec_constants != spec_constants) && pass == 0) {
|
||||
// Rebind the light indices.
|
||||
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::OMNI_LIGHT_COUNT, inst->omni_light_gl_cache.size(), shader->version, instance_variant, spec_constants);
|
||||
material_storage->shaders.scene_shader.version_set_uniform(SceneShaderGLES3::SPOT_LIGHT_COUNT, inst->spot_light_gl_cache.size(), shader->version, instance_variant, spec_constants);
|
||||
|
@ -3412,11 +3408,14 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
|
|||
} else if (inst->lightmap_sh) {
|
||||
glUniform4fv(material_storage->shaders.scene_shader.version_get_uniform(SceneShaderGLES3::LIGHTMAP_CAPTURES, shader->version, instance_variant, spec_constants), 9, reinterpret_cast<const GLfloat *>(inst->lightmap_sh->sh));
|
||||
}
|
||||
|
||||
prev_inst = inst;
|
||||
}
|
||||
}
|
||||
|
||||
prev_shader = shader;
|
||||
prev_variant = instance_variant;
|
||||
prev_spec_constants = spec_constants;
|
||||
|
||||
// Pass in reflection probe data
|
||||
if constexpr (p_pass_mode == PASS_MODE_COLOR || p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) {
|
||||
if (pass == 0 && inst->reflection_probe_rid_cache.size() > 0) {
|
||||
|
|
Loading…
Reference in a new issue