diff options
| -rw-r--r-- | drivers/gles2/rasterizer_canvas_gles2.cpp | 13 | ||||
| -rw-r--r-- | drivers/gles3/rasterizer_canvas_gles3.cpp | 19 | 
2 files changed, 23 insertions, 9 deletions
| diff --git a/drivers/gles2/rasterizer_canvas_gles2.cpp b/drivers/gles2/rasterizer_canvas_gles2.cpp index cc8e3277b9..d5232a6511 100644 --- a/drivers/gles2/rasterizer_canvas_gles2.cpp +++ b/drivers/gles2/rasterizer_canvas_gles2.cpp @@ -733,6 +733,9 @@ void RasterizerCanvasGLES2::_canvas_item_render_commands(Item *p_item, Item *cur  							int w = current_clip->final_clip_rect.size.x;  							int h = current_clip->final_clip_rect.size.y; +							if (storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_VFLIP]) +								y = current_clip->final_clip_rect.position.y; +  							glScissor(x, y, w, h);  							reclip = false; @@ -821,7 +824,10 @@ void RasterizerCanvasGLES2::canvas_render_items(Item *p_item_list, int p_z, cons  			if (current_clip) {  				glEnable(GL_SCISSOR_TEST); -				glScissor(current_clip->final_clip_rect.position.x, (rt_size.height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.height)), current_clip->final_clip_rect.size.width, current_clip->final_clip_rect.size.height); +				int y = storage->frame.current_rt->height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.y); +				if (storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_VFLIP]) +					y = current_clip->final_clip_rect.position.y; +				glScissor(current_clip->final_clip_rect.position.x, y, current_clip->final_clip_rect.size.width, current_clip->final_clip_rect.size.height);  			} else {  				glDisable(GL_SCISSOR_TEST);  			} @@ -969,7 +975,10 @@ void RasterizerCanvasGLES2::canvas_render_items(Item *p_item_list, int p_z, cons  		if (reclip) {  			glEnable(GL_SCISSOR_TEST); -			glScissor(current_clip->final_clip_rect.position.x, (rt_size.height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.height)), current_clip->final_clip_rect.size.width, current_clip->final_clip_rect.size.height); +			int y = storage->frame.current_rt->height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.y); +			if (storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_VFLIP]) +				y = current_clip->final_clip_rect.position.y; +			glScissor(current_clip->final_clip_rect.position.x, y, current_clip->final_clip_rect.size.width, current_clip->final_clip_rect.size.height);  		}  		p_item_list = p_item_list->next; diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index bb4c8ab4d7..925c9b8610 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -997,13 +997,11 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur  							glEnable(GL_SCISSOR_TEST);  							//glScissor(viewport.x+current_clip->final_clip_rect.pos.x,viewport.y+ (viewport.height-(current_clip->final_clip_rect.pos.y+current_clip->final_clip_rect.size.height)),  							//current_clip->final_clip_rect.size.width,current_clip->final_clip_rect.size.height); - -							int x = current_clip->final_clip_rect.position.x;  							int y = storage->frame.current_rt->height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.y); -							int w = current_clip->final_clip_rect.size.x; -							int h = current_clip->final_clip_rect.size.y; +							if (storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_VFLIP]) +								y = current_clip->final_clip_rect.position.y; -							glScissor(x, y, w, h); +							glScissor(current_clip->final_clip_rect.position.x, y, current_clip->final_clip_rect.size.x, current_clip->final_clip_rect.size.y);  							reclip = false;  						} @@ -1138,7 +1136,11 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons  			if (current_clip) {  				glEnable(GL_SCISSOR_TEST); -				glScissor(current_clip->final_clip_rect.position.x, (rt_size.height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.height)), current_clip->final_clip_rect.size.width, current_clip->final_clip_rect.size.height); +				int y = storage->frame.current_rt->height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.y); +				if (storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_VFLIP]) +					y = current_clip->final_clip_rect.position.y; + +				glScissor(current_clip->final_clip_rect.position.x, y, current_clip->final_clip_rect.size.x, current_clip->final_clip_rect.size.y);  			} else { @@ -1515,7 +1517,10 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons  		if (reclip) {  			glEnable(GL_SCISSOR_TEST); -			glScissor(current_clip->final_clip_rect.position.x, (rt_size.height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.height)), current_clip->final_clip_rect.size.width, current_clip->final_clip_rect.size.height); +			int y = storage->frame.current_rt->height - (current_clip->final_clip_rect.position.y + current_clip->final_clip_rect.size.y); +			if (storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_VFLIP]) +				y = current_clip->final_clip_rect.position.y; +			glScissor(current_clip->final_clip_rect.position.x, y, current_clip->final_clip_rect.size.width, current_clip->final_clip_rect.size.height);  		}  		p_item_list = p_item_list->next; |