Index: chrome/browser/renderer_host/accelerated_surface_container_mac.cc |
diff --git a/chrome/browser/renderer_host/accelerated_surface_container_mac.cc b/chrome/browser/renderer_host/accelerated_surface_container_mac.cc |
index 66e8b4c0fb5d2a6a3bfeee6b119bd358e29c40ee..d0d6d5972e14d95ee5404e79d9d615f24ad82fd4 100644 |
--- a/chrome/browser/renderer_host/accelerated_surface_container_mac.cc |
+++ b/chrome/browser/renderer_host/accelerated_surface_container_mac.cc |
@@ -15,7 +15,8 @@ AcceleratedSurfaceContainerMac::AcceleratedSurfaceContainerMac() |
surface_(NULL), |
width_(0), |
height_(0), |
- texture_(0) { |
+ texture_(0), |
+ texture_needs_upload_(true) { |
} |
AcceleratedSurfaceContainerMac::~AcceleratedSurfaceContainerMac() { |
@@ -77,22 +78,7 @@ void AcceleratedSurfaceContainerMac::Draw(CGLContextObj context) { |
glBindTexture(target, texture_); |
glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
- // When using an IOSurface, the texture does not need to be repeatedly |
- // uploaded, so bind the IOSurface once during texture gen in this case. |
- if (io_surface_support) { |
- DCHECK(surface_); |
- // Don't think we need to identify a plane. |
- GLuint plane = 0; |
- io_surface_support->CGLTexImageIOSurface2D(context, |
- target, |
- GL_RGBA, |
- width_, |
- height_, |
- GL_BGRA, |
- GL_UNSIGNED_INT_8_8_8_8_REV, |
- surface_, |
- plane); |
- } else { |
+ if (!io_surface_support) { |
// Reserve space on the card for the actual texture upload, done with the |
// glTexSubImage2D() call, below. |
glTexImage2D(target, |
@@ -107,6 +93,24 @@ void AcceleratedSurfaceContainerMac::Draw(CGLContextObj context) { |
} |
} |
+ // When using an IOSurface, the texture does not need to be repeatedly |
+ // uploaded, just when we've been told we have to. |
+ if (io_surface_support && texture_needs_upload_) { |
+ DCHECK(surface_); |
+ glBindTexture(target, texture_); |
+ // Don't think we need to identify a plane. |
+ GLuint plane = 0; |
+ io_surface_support->CGLTexImageIOSurface2D(context, |
+ target, |
+ GL_RGBA, |
+ width_, |
+ height_, |
+ GL_BGRA, |
+ GL_UNSIGNED_INT_8_8_8_8_REV, |
+ surface_, |
+ plane); |
+ texture_needs_upload_ = false; |
+ } |
// If using TransportDIBs, the texture needs to be uploaded every frame. |
if (transport_dib_.get() != NULL) { |
void* pixel_memory = transport_dib_->memory(); |