Merge pull request #113861 from allenwp/fix-compat-canvas-tonemapping
Apply tonemapping in post of Compatibility when using canvas BG
This commit is contained in:
commit
13881f251f
3 changed files with 20 additions and 28 deletions
|
|
@ -802,7 +802,7 @@ void RasterizerSceneGLES3::_setup_sky(const RenderDataGLES3 *p_render_data, cons
|
|||
}
|
||||
}
|
||||
|
||||
void RasterizerSceneGLES3::_draw_sky(RID p_env, const Projection &p_projection, const Transform3D &p_transform, float p_sky_energy_multiplier, float p_luminance_multiplier, bool p_use_multiview, bool p_flip_y, bool p_apply_color_adjustments_in_post) {
|
||||
void RasterizerSceneGLES3::_draw_sky(RID p_env, const Projection &p_projection, const Transform3D &p_transform, float p_sky_energy_multiplier, float p_luminance_multiplier, bool p_use_multiview, bool p_flip_y, bool p_apply_environment_effects_in_post) {
|
||||
GLES3::MaterialStorage *material_storage = GLES3::MaterialStorage::get_singleton();
|
||||
ERR_FAIL_COND(p_env.is_null());
|
||||
|
||||
|
|
@ -815,7 +815,7 @@ void RasterizerSceneGLES3::_draw_sky(RID p_env, const Projection &p_projection,
|
|||
if (p_flip_y) {
|
||||
spec_constants |= SkyShaderGLES3::USE_INVERTED_Y;
|
||||
}
|
||||
if (!p_apply_color_adjustments_in_post) {
|
||||
if (!p_apply_environment_effects_in_post) {
|
||||
spec_constants |= SkyShaderGLES3::APPLY_TONEMAPPING;
|
||||
}
|
||||
|
||||
|
|
@ -2271,7 +2271,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
|||
GLES3::Config *config = GLES3::Config::get_singleton();
|
||||
RENDER_TIMESTAMP("Setup 3D Scene");
|
||||
|
||||
bool apply_color_adjustments_in_post = false;
|
||||
bool apply_environment_effects_in_post = false;
|
||||
bool is_reflection_probe = p_reflection_probe.is_valid();
|
||||
|
||||
Ref<RenderSceneBuffersGLES3> rb = p_render_buffers;
|
||||
|
|
@ -2279,7 +2279,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
|||
|
||||
if (rb->get_scaling_3d_mode() != RSE::VIEWPORT_SCALING_3D_MODE_OFF) {
|
||||
// If we're scaling, we apply tonemapping etc. in post, so disable it during rendering
|
||||
apply_color_adjustments_in_post = true;
|
||||
apply_environment_effects_in_post = true;
|
||||
}
|
||||
|
||||
GLES3::RenderTarget *rt = nullptr; // No render target for reflection probe
|
||||
|
|
@ -2289,20 +2289,17 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
|||
}
|
||||
|
||||
bool glow_enabled = false;
|
||||
if (p_environment.is_valid()) {
|
||||
glow_enabled = environment_get_glow_enabled(p_environment);
|
||||
if (glow_enabled) {
|
||||
// If glow is enabled, we apply tonemapping etc. in post, so disable it during rendering
|
||||
apply_color_adjustments_in_post = true;
|
||||
}
|
||||
}
|
||||
|
||||
bool ssao_enabled = false;
|
||||
bool use_bcs = false;
|
||||
if (p_environment.is_valid()) {
|
||||
// We apply tonemapping, etc. in post when any of these are true. In this
|
||||
// case, set apply_environment_effects_in_post to true to skip tonemapping during rendering.
|
||||
glow_enabled = environment_get_glow_enabled(p_environment);
|
||||
ssao_enabled = environment_get_ssao_enabled(p_environment);
|
||||
if (ssao_enabled) {
|
||||
// If SSAO is enabled, we apply tonemapping etc. in post, so disable it during rendering
|
||||
apply_color_adjustments_in_post = true;
|
||||
use_bcs = environment_get_adjustments_enabled(p_environment);
|
||||
bool canvas_tonemapping = environment_get_background(p_environment) == RSE::ENV_BG_CANVAS && environment_get_tone_mapper(p_environment) != RSE::ENV_TONE_MAPPER_LINEAR;
|
||||
if (glow_enabled || ssao_enabled || use_bcs || canvas_tonemapping) {
|
||||
apply_environment_effects_in_post = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2394,11 +2391,6 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
|||
|
||||
SceneState::TonemapUBO tonemap_ubo;
|
||||
if (render_data.environment.is_valid()) {
|
||||
bool use_bcs = environment_get_adjustments_enabled(render_data.environment);
|
||||
if (use_bcs) {
|
||||
apply_color_adjustments_in_post = true;
|
||||
}
|
||||
|
||||
tonemap_ubo.exposure = environment_get_exposure(render_data.environment);
|
||||
tonemap_ubo.tonemapper = int32_t(environment_get_tone_mapper(render_data.environment));
|
||||
RendererEnvironmentStorage::TonemapParameters params = environment_get_tonemap_parameters(render_data.environment, false, 1.0f);
|
||||
|
|
@ -2580,7 +2572,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
|||
if (is_reflection_probe && GLES3::LightStorage::get_singleton()->reflection_probe_has_atlas_index(render_data.reflection_probe)) {
|
||||
fbo = GLES3::LightStorage::get_singleton()->reflection_probe_instance_get_framebuffer(render_data.reflection_probe, render_data.reflection_probe_pass);
|
||||
} else {
|
||||
rb->set_apply_color_adjustments_in_post(apply_color_adjustments_in_post);
|
||||
rb->set_apply_environment_effects_in_post(apply_environment_effects_in_post);
|
||||
fbo = rb->get_render_fbo();
|
||||
}
|
||||
|
||||
|
|
@ -2711,7 +2703,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
|||
spec_constant_base_flags |= SceneShaderGLES3::USE_DEPTH_FOG;
|
||||
}
|
||||
|
||||
if (!apply_color_adjustments_in_post) {
|
||||
if (!apply_environment_effects_in_post) {
|
||||
spec_constant_base_flags |= SceneShaderGLES3::APPLY_TONEMAPPING;
|
||||
}
|
||||
}
|
||||
|
|
@ -2757,7 +2749,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
|||
Transform3D transform = render_data.cam_transform;
|
||||
Projection projection = render_data.cam_projection;
|
||||
|
||||
_draw_sky(render_data.environment, projection, transform, sky_energy_multiplier, render_data.luminance_multiplier, p_camera_data->view_count > 1, flip_y, apply_color_adjustments_in_post);
|
||||
_draw_sky(render_data.environment, projection, transform, sky_energy_multiplier, render_data.luminance_multiplier, p_camera_data->view_count > 1, flip_y, apply_environment_effects_in_post);
|
||||
}
|
||||
|
||||
if (scene_state.used_screen_texture || scene_state.used_depth_texture) {
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ void RenderSceneBuffersGLES3::_check_render_buffers() {
|
|||
|
||||
ERR_FAIL_COND(view_count == 0);
|
||||
|
||||
bool use_internal_buffer = scaling_3d_mode != RSE::VIEWPORT_SCALING_3D_MODE_OFF || apply_color_adjustments_in_post;
|
||||
bool use_internal_buffer = scaling_3d_mode != RSE::VIEWPORT_SCALING_3D_MODE_OFF || apply_environment_effects_in_post;
|
||||
GLenum depth_format = GL_DEPTH24_STENCIL8;
|
||||
uint32_t depth_format_size = 4;
|
||||
bool use_multiview = view_count > 1;
|
||||
|
|
@ -559,8 +559,8 @@ void RenderSceneBuffersGLES3::_clear_back_buffers() {
|
|||
}
|
||||
}
|
||||
|
||||
void RenderSceneBuffersGLES3::set_apply_color_adjustments_in_post(bool p_apply_in_post) {
|
||||
apply_color_adjustments_in_post = p_apply_in_post;
|
||||
void RenderSceneBuffersGLES3::set_apply_environment_effects_in_post(bool p_apply_in_post) {
|
||||
apply_environment_effects_in_post = p_apply_in_post;
|
||||
}
|
||||
|
||||
void RenderSceneBuffersGLES3::check_glow_buffers() {
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public:
|
|||
//bool use_taa = false;
|
||||
//bool use_debanding = false;
|
||||
uint32_t view_count = 1;
|
||||
bool apply_color_adjustments_in_post = false;
|
||||
bool apply_environment_effects_in_post = false;
|
||||
|
||||
RID render_target;
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ public:
|
|||
virtual void set_fsr_sharpness(float p_fsr_sharpness) override {}
|
||||
virtual void set_texture_mipmap_bias(float p_texture_mipmap_bias) override {}
|
||||
virtual void set_use_debanding(bool p_use_debanding) override {}
|
||||
void set_apply_color_adjustments_in_post(bool p_apply_in_post);
|
||||
void set_apply_environment_effects_in_post(bool p_apply_environment_effects_in_post);
|
||||
|
||||
void free_render_buffer_data();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue