Browse Source

Some fixes to improve precision and speed on Android. Fixes precision issues on Mali and PowerVR.

Juan Linietsky 7 years ago
parent
commit
2c226e4edf
2 changed files with 12 additions and 2 deletions
  1. 10 0
      drivers/gles3/rasterizer_gles3.cpp
  2. 2 2
      drivers/gles3/shaders/canvas.glsl

+ 10 - 0
drivers/gles3/rasterizer_gles3.cpp

@@ -338,6 +338,15 @@ void RasterizerGLES3::blit_render_target_to_screen(RID p_render_target, const Re
 	RasterizerStorageGLES3::RenderTarget *rt = storage->render_target_owner.getornull(p_render_target);
 	ERR_FAIL_COND(!rt);
 
+#if 1
+
+	Size2 win_size = OS::get_singleton()->get_window_size();
+	glBindFramebuffer(GL_READ_FRAMEBUFFER, rt->fbo);
+	glReadBuffer(GL_COLOR_ATTACHMENT0);
+	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, RasterizerStorageGLES3::system_fbo);
+	glBlitFramebuffer(0, 0, rt->width, rt->height, p_screen_rect.position.x, win_size.height - p_screen_rect.position.y - p_screen_rect.size.height, p_screen_rect.position.x + p_screen_rect.size.width, win_size.height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
+
+#else
 	canvas->canvas_begin();
 	glDisable(GL_BLEND);
 	glBindFramebuffer(GL_FRAMEBUFFER, RasterizerStorageGLES3::system_fbo);
@@ -350,6 +359,7 @@ void RasterizerGLES3::blit_render_target_to_screen(RID p_render_target, const Re
 	canvas->draw_generic_textured_rect(p_screen_rect, Rect2(0, 0, 1, -1));
 	glBindTexture(GL_TEXTURE_2D, 0);
 	canvas->canvas_end();
+#endif
 }
 
 void RasterizerGLES3::end_frame(bool p_swap_buffers) {

+ 2 - 2
drivers/gles3/shaders/canvas.glsl

@@ -42,7 +42,7 @@ uniform highp mat4 modelview_matrix;
 uniform highp mat4 extra_matrix;
 
 
-out mediump vec2 uv_interp;
+out highp vec2 uv_interp;
 out mediump vec4 color_interp;
 
 #ifdef USE_NINEPATCH
@@ -207,7 +207,7 @@ uniform mediump sampler2D color_texture; // texunit:0
 uniform highp vec2 color_texpixel_size;
 uniform mediump sampler2D normal_texture; // texunit:1
 
-in mediump vec2 uv_interp;
+in highp vec2 uv_interp;
 in mediump vec4 color_interp;