Fix issue with clearing screen after part has been drawn
This commit is contained in:
parent
9f68d06ec2
commit
67cb660532
2 changed files with 10 additions and 8 deletions
|
@ -281,7 +281,7 @@ void RasterizerGLES3::prepare_for_blitting_render_targets() {
|
||||||
utils->capture_timestamps_end();
|
utils->capture_timestamps_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, DisplayServer::WindowID p_screen, const Rect2 &p_screen_rect, uint32_t p_layer) {
|
void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, DisplayServer::WindowID p_screen, const Rect2 &p_screen_rect, uint32_t p_layer, bool p_first) {
|
||||||
GLES3::RenderTarget *rt = GLES3::TextureStorage::get_singleton()->get_render_target(p_render_target);
|
GLES3::RenderTarget *rt = GLES3::TextureStorage::get_singleton()->get_render_target(p_render_target);
|
||||||
|
|
||||||
ERR_FAIL_COND(!rt);
|
ERR_FAIL_COND(!rt);
|
||||||
|
@ -307,12 +307,14 @@ void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, Display
|
||||||
glReadBuffer(GL_COLOR_ATTACHMENT0);
|
glReadBuffer(GL_COLOR_ATTACHMENT0);
|
||||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
|
||||||
|
|
||||||
if (p_screen_rect.position != Vector2()) {
|
if (p_first) {
|
||||||
// Viewport doesn't cover entire window so clear window to black before blitting.
|
|
||||||
Size2i win_size = DisplayServer::get_singleton()->window_get_size();
|
Size2i win_size = DisplayServer::get_singleton()->window_get_size();
|
||||||
glViewport(0, 0, win_size.width, win_size.height);
|
if (p_screen_rect.position != Vector2() || p_screen_rect.size != rt->size) {
|
||||||
glClearColor(0.0, 0.0, 0.0, 1.0);
|
// Viewport doesn't cover entire window so clear window to black before blitting.
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glViewport(0, 0, win_size.width, win_size.height);
|
||||||
|
glClearColor(0.0, 0.0, 0.0, 1.0);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2i screen_rect_end = p_screen_rect.get_end();
|
Vector2i screen_rect_end = p_screen_rect.get_end();
|
||||||
|
@ -334,7 +336,7 @@ void RasterizerGLES3::blit_render_targets_to_screen(DisplayServer::WindowID p_sc
|
||||||
RID rid_rt = blit.render_target;
|
RID rid_rt = blit.render_target;
|
||||||
|
|
||||||
Rect2 dst_rect = blit.dst_rect;
|
Rect2 dst_rect = blit.dst_rect;
|
||||||
_blit_render_target_to_screen(rid_rt, p_screen, dst_rect, blit.multi_view.use_layer ? blit.multi_view.layer : 0);
|
_blit_render_target_to_screen(rid_rt, p_screen, dst_rect, blit.multi_view.use_layer ? blit.multi_view.layer : 0, i == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ protected:
|
||||||
RasterizerCanvasGLES3 *canvas = nullptr;
|
RasterizerCanvasGLES3 *canvas = nullptr;
|
||||||
RasterizerSceneGLES3 *scene = nullptr;
|
RasterizerSceneGLES3 *scene = nullptr;
|
||||||
|
|
||||||
void _blit_render_target_to_screen(RID p_render_target, DisplayServer::WindowID p_screen, const Rect2 &p_screen_rect, uint32_t p_layer);
|
void _blit_render_target_to_screen(RID p_render_target, DisplayServer::WindowID p_screen, const Rect2 &p_screen_rect, uint32_t p_layer, bool p_first = true);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RendererUtilities *get_utilities() { return utilities; }
|
RendererUtilities *get_utilities() { return utilities; }
|
||||||
|
|
Loading…
Add table
Reference in a new issue