Index: ui/accelerated_widget_mac/io_surface_texture.mm |
diff --git a/ui/accelerated_widget_mac/io_surface_texture.mm b/ui/accelerated_widget_mac/io_surface_texture.mm |
index 291fbdd2da4d6f88a634c5aa583e1d39314c585d..379737888efdd7059e03a1525c763d3d38d2d84f 100644 |
--- a/ui/accelerated_widget_mac/io_surface_texture.mm |
+++ b/ui/accelerated_widget_mac/io_surface_texture.mm |
@@ -63,7 +63,16 @@ IOSurfaceTexture::~IOSurfaceTexture() { |
} |
bool IOSurfaceTexture::DrawIOSurface() { |
- TRACE_EVENT0("browser", "IOSurfaceTexture::DrawIOSurface"); |
+ return DrawIOSurfaceInternal(gfx::Rect(pixel_size_), true); |
+} |
+ |
+bool IOSurfaceTexture::DrawIOSurfaceWithDamageRect(gfx::Rect damage_rect) { |
+ return DrawIOSurfaceInternal(damage_rect, false); |
+} |
+ |
+bool IOSurfaceTexture::DrawIOSurfaceInternal( |
+ gfx::Rect damage_rect, bool draw_boundary) { |
+ TRACE_EVENT0("browser", "IOSurfaceTexture::DrawIOSurfaceInternal"); |
DCHECK(CGLGetCurrentContext()); |
// If we have release the IOSurface, clear the screen to light grey and |
@@ -94,14 +103,14 @@ bool IOSurfaceTexture::DrawIOSurface() { |
glEnable(GL_TEXTURE_RECTANGLE_ARB); |
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture_); |
glBegin(GL_QUADS); |
- glTexCoord2f(0, 0); |
- glVertex2f(0, 0); |
- glTexCoord2f(pixel_size_.width(), 0); |
- glVertex2f(pixel_size_.width(), 0); |
- glTexCoord2f(pixel_size_.width(), pixel_size_.height()); |
- glVertex2f(pixel_size_.width(), pixel_size_.height()); |
- glTexCoord2f(0, pixel_size_.height()); |
- glVertex2f(0, pixel_size_.height()); |
+ glTexCoord2f(damage_rect.x(), damage_rect.y()); |
+ glVertex2f(damage_rect.x(), damage_rect.y()); |
+ glTexCoord2f(damage_rect.right(), damage_rect.y()); |
+ glVertex2f(damage_rect.right(), damage_rect.y()); |
+ glTexCoord2f(damage_rect.right(), damage_rect.bottom()); |
+ glVertex2f(damage_rect.right(), damage_rect.bottom()); |
+ glTexCoord2f(damage_rect.x(), damage_rect.bottom()); |
+ glVertex2f(damage_rect.x(), damage_rect.bottom()); |
glEnd(); |
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); |
glDisable(GL_TEXTURE_RECTANGLE_ARB); |
@@ -112,6 +121,29 @@ bool IOSurfaceTexture::DrawIOSurface() { |
glBegin(GL_TRIANGLES); |
glEnd(); |
+ // If the viewport is larger than the texture, clear out the overflow to |
+ // white. |
+ if (draw_boundary) { |
+ if (pixel_size_.width() < viewport_rect.width()) { |
+ glBegin(GL_QUADS); |
+ glVertex2f(pixel_size_.width(), 0); |
+ glVertex2f(pixel_size_.width(), viewport_rect.height()); |
+ glVertex2f(viewport_rect.width(), viewport_rect.height()); |
+ glVertex2f(viewport_rect.width(), 0); |
+ glEnd(); |
+ } |
+ if (pixel_size_.height() < viewport_rect.height()) { |
+ glBegin(GL_QUADS); |
+ glVertex2f(0, 0); |
+ glVertex2f(pixel_size_.width(), viewport_rect.height() - |
+ pixel_size_.height()); |
Ken Russell (switch to Gerrit)
2015/06/05 21:43:27
This looks wrong -- should this be (0, ...)?
ccameron
2015/06/05 22:46:22
Yes, this is wrong. Fixed.
|
+ glVertex2f(viewport_rect.width(), viewport_rect.height() - |
+ pixel_size_.height()); |
+ glVertex2f(viewport_rect.width(), 0); |
+ glEnd(); |
+ } |
+ } |
+ |
if (needs_gl_finish_workaround_) { |
TRACE_EVENT0("gpu", "glFinish"); |
glFinish(); |