Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1692)

Unified Diff: ui/accelerated_widget_mac/io_surface_texture.mm

Issue 1161853006: Mac: Add partial swap support to NSOpenGLContext path (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporate review feedback Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/accelerated_widget_mac/io_surface_texture.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..d3898a4adc98eff88fd572b5f9eceb8e72f58592 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,28 @@ 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()) {
+ int non_surface_height = viewport_rect.height() - pixel_size_.height();
+ glBegin(GL_QUADS);
+ glVertex2f(0, 0);
+ glVertex2f(0, non_surface_height);
+ glVertex2f(pixel_size_.width(), non_surface_height);
+ glVertex2f(pixel_size_.width(), 0);
+ glEnd();
+ }
+ }
+
if (needs_gl_finish_workaround_) {
TRACE_EVENT0("gpu", "glFinish");
glFinish();
« no previous file with comments | « ui/accelerated_widget_mac/io_surface_texture.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698