Fix transparent background rendering, closes #8703
Properly implemented UPDATE_WHEN_VISIBLE mode for viewports
This commit is contained in:
parent
569a2b5bd7
commit
9757fc354c
6 changed files with 23 additions and 8 deletions
|
|
@ -484,7 +484,8 @@ public:
|
|||
virtual void render_target_set_size(RID p_render_target, int p_width, int p_height) = 0;
|
||||
virtual RID render_target_get_texture(RID p_render_target) const = 0;
|
||||
virtual void render_target_set_flag(RID p_render_target, RenderTargetFlags p_flag, bool p_value) = 0;
|
||||
virtual bool render_target_renedered_in_frame(RID p_render_target) = 0;
|
||||
virtual bool render_target_was_used(RID p_render_target) = 0;
|
||||
virtual void render_target_clear_used(RID p_render_target) = 0;
|
||||
virtual void render_target_set_msaa(RID p_render_target, VS::ViewportMSAA p_msaa) = 0;
|
||||
|
||||
/* CANVAS SHADOW */
|
||||
|
|
|
|||
|
|
@ -266,11 +266,13 @@ void VisualServerViewport::draw_viewports() {
|
|||
|
||||
ERR_CONTINUE(!vp->render_target.is_valid());
|
||||
|
||||
bool visible = vp->viewport_to_screen_rect != Rect2() || vp->update_mode == VS::VIEWPORT_UPDATE_ALWAYS || vp->update_mode == VS::VIEWPORT_UPDATE_ONCE;
|
||||
bool visible = vp->viewport_to_screen_rect != Rect2() || vp->update_mode == VS::VIEWPORT_UPDATE_ALWAYS || vp->update_mode == VS::VIEWPORT_UPDATE_ONCE || (vp->update_mode == VS::VIEWPORT_UPDATE_WHEN_VISIBLE && VSG::storage->render_target_was_used(vp->render_target));
|
||||
|
||||
if (!visible)
|
||||
continue;
|
||||
|
||||
VSG::storage->render_target_clear_used(vp->render_target);
|
||||
|
||||
VSG::rasterizer->set_current_render_target(vp->render_target);
|
||||
|
||||
VSG::scene_render->set_debug_draw_mode(vp->debug_draw);
|
||||
|
|
|
|||
|
|
@ -69,8 +69,6 @@ public:
|
|||
|
||||
VS::ViewportClearMode clear_mode;
|
||||
|
||||
bool rendered_in_prev_frame;
|
||||
|
||||
struct CanvasKey {
|
||||
|
||||
int layer;
|
||||
|
|
@ -100,7 +98,6 @@ public:
|
|||
Viewport() {
|
||||
update_mode = VS::VIEWPORT_UPDATE_WHEN_VISIBLE;
|
||||
clear_mode = VS::VIEWPORT_CLEAR_ALWAYS;
|
||||
rendered_in_prev_frame = false;
|
||||
disable_environment = false;
|
||||
viewport_to_screen = 0;
|
||||
shadow_atlas_size = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue