Index: content/browser/compositor/gpu_process_transport_factory.cc |
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc |
index a6d18220786b8454cdf8339c2d339b8b2b3c7a5f..3443c43476ef8bc070c135a12071b013d80c1e86 100644 |
--- a/content/browser/compositor/gpu_process_transport_factory.cc |
+++ b/content/browser/compositor/gpu_process_transport_factory.cc |
@@ -64,6 +64,7 @@ |
#include "content/browser/compositor/software_output_device_x11.h" |
#elif defined(OS_MACOSX) |
#include "content/browser/compositor/software_output_device_mac.h" |
+#include "ui/base/cocoa/remote_layer_api.h" |
#endif |
using cc::ContextProvider; |
@@ -277,15 +278,23 @@ void GpuProcessTransportFactory::EstablishedGpuChannel( |
context_provider, compositor->vsync_manager(), |
scoped_ptr<BrowserCompositorOverlayCandidateValidator>())); |
} else if (capabilities.gpu.surfaceless) { |
+ GLenum target = GL_TEXTURE_2D; |
+ GLenum format = GL_RGB; |
+#if defined(OS_MACOSX) |
+ target = GL_TEXTURE_RECTANGLE_ARB; |
+ format = GL_BGRA_EXT; |
+#endif |
surface = |
make_scoped_ptr(new GpuSurfacelessBrowserCompositorOutputSurface( |
context_provider, data->surface_id, compositor->vsync_manager(), |
- CreateOverlayCandidateValidator(compositor->widget()), |
- GL_TEXTURE_2D, GL_RGB, BrowserGpuMemoryBufferManager::current())); |
+ CreateOverlayCandidateValidator(compositor->widget()), target, |
+ format, BrowserGpuMemoryBufferManager::current())); |
} else { |
- surface = make_scoped_ptr(new GpuBrowserCompositorOutputSurface( |
- context_provider, compositor->vsync_manager(), |
- CreateOverlayCandidateValidator(compositor->widget()))); |
+ if (!surface) { |
+ surface = make_scoped_ptr(new GpuBrowserCompositorOutputSurface( |
+ context_provider, compositor->vsync_manager(), |
+ CreateOverlayCandidateValidator(compositor->widget()))); |
+ } |
} |
} |