Merge pull request #100388 from Namey5/gles3-canvas-clear-fix

Fix canvas background mode not clearing correctly in Compatibility renderer
This commit is contained in:
Rémi Verschelde
2025-01-03 00:48:38 +01:00

View File

@@ -2384,6 +2384,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
bool draw_sky = false;
bool draw_sky_fog_only = false;
bool keep_color = false;
bool draw_canvas = false;
bool draw_feed = false;
float sky_energy_multiplier = 1.0;
int camera_feed_id = -1;
@@ -2425,7 +2426,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
draw_sky = !render_data.transparent_bg;
} break;
case RS::ENV_BG_CANVAS: {
keep_color = true;
draw_canvas = true;
} break;
case RS::ENV_BG_KEEP: {
keep_color = true;
@@ -2433,6 +2434,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
case RS::ENV_BG_CAMERA_FEED: {
camera_feed_id = environment_get_camera_feed_id(render_data.environment);
draw_feed = true;
keep_color = true;
} break;
default: {
}
@@ -2544,10 +2546,14 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
glClear(GL_DEPTH_BUFFER_BIT);
}
if (!keep_color && !draw_feed) {
// Need to clear framebuffer unless:
// a) We explicitly request not to (i.e. ENV_BG_KEEP).
// b) We are rendering to a non-intermediate framebuffer with ENV_BG_CANVAS (shared between 2D and 3D).
if (!keep_color && (!draw_canvas || fbo != rt->fbo)) {
clear_color.a = render_data.transparent_bg ? 0.0f : 1.0f;
glClearBufferfv(GL_COLOR, 0, clear_color.components);
} else if (fbo != rt->fbo) {
}
if ((keep_color || draw_canvas) && fbo != rt->fbo) {
// Need to copy our current contents to our intermediate/MSAA buffer
GLES3::CopyEffects *copy_effects = GLES3::CopyEffects::get_singleton();