diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-11-28 15:10:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-28 15:10:28 +0100 |
commit | c7dd58a4d5d9e6ba6a6e24167f4527ef94a3e35e (patch) | |
tree | 585055606b956f246887bf78ba755a69876152e8 | |
parent | 06db076fc6c49fb585e753bd327ce1a80b0bf7d5 (diff) | |
parent | 797bcfd44d793babe5017ab30ee5c7f82199095d (diff) |
Merge pull request #23981 from khairul169/fix_gles2_clearcolor
GLES2: Set clear color based on env background mode when rendering scene and fix viewport transparent bg flag
-rw-r--r-- | drivers/gles2/rasterizer_scene_gles2.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/drivers/gles2/rasterizer_scene_gles2.cpp b/drivers/gles2/rasterizer_scene_gles2.cpp index b2826d0ca8..7addbaa9fe 100644 --- a/drivers/gles2/rasterizer_scene_gles2.cpp +++ b/drivers/gles2/rasterizer_scene_gles2.cpp @@ -2587,9 +2587,30 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + // clear color + + Color clear_color(0, 0, 0, 0); - storage->frame.clear_request = false; + if (storage->frame.current_rt && storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_TRANSPARENT]) { + clear_color = Color(0, 0, 0, 0); + storage->frame.clear_request = false; + } else if (!env || env->bg_mode == VS::ENV_BG_CLEAR_COLOR || env->bg_mode == VS::ENV_BG_SKY) { + if (storage->frame.clear_request) { + clear_color = storage->frame.clear_request_color.to_linear(); + storage->frame.clear_request = false; + } + } else if (env->bg_mode == VS::ENV_BG_CANVAS || env->bg_mode == VS::ENV_BG_COLOR || env->bg_mode == VS::ENV_BG_COLOR_SKY) { + clear_color = env->bg_color.to_linear(); + storage->frame.clear_request = false; + } else { + storage->frame.clear_request = false; + } + + if (!env || env->bg_mode != VS::ENV_BG_KEEP) { + glClearColor(clear_color.r, clear_color.g, clear_color.b, clear_color.a); + } + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1); |