From b758658405c6d25f6be3c020083c18da4b5cb1db Mon Sep 17 00:00:00 2001 From: clayjohn Date: Wed, 12 Jun 2024 16:00:01 -0700 Subject: [PATCH] Ensure sky reflection is updated when ambient mode is set to background --- drivers/gles3/rasterizer_scene_gles3.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 6a51ce6b7037..93a9d653355e 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -2397,6 +2397,7 @@ void RasterizerSceneGLES3::render_scene(const Ref &p_render_ float bg_energy_multiplier = environment_get_bg_energy_multiplier(render_data.environment); bg_energy_multiplier *= environment_get_bg_intensity(render_data.environment); RS::EnvironmentReflectionSource reflection_source = environment_get_reflection_source(render_data.environment); + RS::EnvironmentAmbientSource ambient_source = environment_get_ambient_source(render_data.environment); if (render_data.camera_attributes.is_valid()) { bg_energy_multiplier *= RSG::camera_attributes->camera_attributes_get_exposure_normalization_factor(render_data.camera_attributes); @@ -2437,8 +2438,13 @@ void RasterizerSceneGLES3::render_scene(const Ref &p_render_ } } + bool sky_reflections = reflection_source == RS::ENV_REFLECTION_SOURCE_SKY; + sky_reflections |= reflection_source == RS::ENV_REFLECTION_SOURCE_BG && bg_mode == RS::ENV_BG_SKY; + bool sky_ambient = ambient_source == RS::ENV_AMBIENT_SOURCE_SKY; + sky_ambient |= ambient_source == RS::ENV_AMBIENT_SOURCE_BG && bg_mode == RS::ENV_BG_SKY; + // setup sky if used for ambient, reflections, or background - if (draw_sky || draw_sky_fog_only || (reflection_source == RS::ENV_REFLECTION_SOURCE_BG && bg_mode == RS::ENV_BG_SKY) || reflection_source == RS::ENV_REFLECTION_SOURCE_SKY || environment_get_ambient_source(render_data.environment) == RS::ENV_AMBIENT_SOURCE_SKY) { + if (draw_sky || draw_sky_fog_only || sky_reflections || sky_ambient) { RENDER_TIMESTAMP("Setup Sky"); Projection projection = render_data.cam_projection; if (is_reflection_probe) { @@ -2452,7 +2458,7 @@ void RasterizerSceneGLES3::render_scene(const Ref &p_render_ _setup_sky(&render_data, *render_data.lights, projection, render_data.cam_transform, screen_size); if (environment_get_sky(render_data.environment).is_valid()) { - if (environment_get_reflection_source(render_data.environment) == RS::ENV_REFLECTION_SOURCE_SKY || environment_get_ambient_source(render_data.environment) == RS::ENV_AMBIENT_SOURCE_SKY || (environment_get_reflection_source(render_data.environment) == RS::ENV_REFLECTION_SOURCE_BG && environment_get_background(render_data.environment) == RS::ENV_BG_SKY)) { + if (sky_reflections || sky_ambient) { _update_sky_radiance(render_data.environment, projection, render_data.cam_transform, sky_energy_multiplier); } } else {