Index: android_webview/browser/gpu_memory_buffer_factory_impl.cc |
diff --git a/android_webview/browser/gpu_memory_buffer_factory_impl.cc b/android_webview/browser/gpu_memory_buffer_factory_impl.cc |
index 8be58c5cdc08aee26eb043dc785d8eda35bafb55..14d1ae47fc25bc0b77fb5d412d20f0d50e6e2b84 100644 |
--- a/android_webview/browser/gpu_memory_buffer_factory_impl.cc |
+++ b/android_webview/browser/gpu_memory_buffer_factory_impl.cc |
@@ -9,6 +9,7 @@ |
#include "ui/gfx/gpu_memory_buffer.h" |
#include "ui/gfx/size.h" |
#include "ui/gl/gl_bindings.h" |
+#include "ui/gl/gl_image_android_native_buffer.h" |
namespace android_webview { |
@@ -19,10 +20,8 @@ AwDrawGLFunctionTable* g_gl_draw_functions = NULL; |
class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { |
public: |
- GpuMemoryBufferImpl(long buffer_id, gfx::Size size) |
- : buffer_id_(buffer_id), |
- size_(size), |
- mapped_(false) { |
+ GpuMemoryBufferImpl(long buffer_id, const gfx::Size& size) |
+ : buffer_id_(buffer_id), size_(size), mapped_(false) { |
DCHECK(buffer_id_); |
} |
@@ -50,7 +49,7 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { |
virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE { |
gfx::GpuMemoryBufferHandle handle; |
handle.type = gfx::ANDROID_NATIVE_BUFFER; |
- handle.native_buffer = g_gl_draw_functions->get_native_buffer(buffer_id_); |
+ handle.buffer_id = buffer_id_; |
return handle; |
} |
@@ -70,20 +69,41 @@ GpuMemoryBufferFactoryImpl::GpuMemoryBufferFactoryImpl() { |
GpuMemoryBufferFactoryImpl::~GpuMemoryBufferFactoryImpl() { |
} |
-gfx::GpuMemoryBuffer* GpuMemoryBufferFactoryImpl::CreateGpuMemoryBuffer( |
- size_t width, |
- size_t height, |
- unsigned internalformat, |
- unsigned usage) { |
+scoped_ptr<gfx::GpuMemoryBuffer> |
+GpuMemoryBufferFactoryImpl::AllocateGpuMemoryBuffer(size_t width, |
+ size_t height, |
+ unsigned internalformat, |
+ unsigned usage) { |
// For Android WebView we assume the |internalformat| will always be |
// GL_RGBA8_OES. |
CHECK_EQ(static_cast<GLenum>(GL_RGBA8_OES), internalformat); |
CHECK(g_gl_draw_functions); |
long buffer_id = g_gl_draw_functions->create_graphic_buffer(width, height); |
if (!buffer_id) |
- return NULL; |
+ return scoped_ptr<gfx::GpuMemoryBuffer>(); |
- return new GpuMemoryBufferImpl(buffer_id, gfx::Size(width, height)); |
+ return make_scoped_ptr( |
+ new GpuMemoryBufferImpl(buffer_id, gfx::Size(width, height))) |
+ .PassAs<gfx::GpuMemoryBuffer>(); |
+} |
+ |
+scoped_refptr<gfx::GLImage> |
+GpuMemoryBufferFactoryImpl::CreateImageForGpuMemoryBuffer( |
+ const gfx::GpuMemoryBufferHandle& handle, |
+ const gfx::Size& size, |
+ unsigned internalformat) { |
+ DCHECK_EQ(gfx::ANDROID_NATIVE_BUFFER, handle.type); |
+ |
+ EGLClientBuffer native_buffer = |
+ g_gl_draw_functions->get_native_buffer(handle.buffer_id); |
+ DCHECK(native_buffer); |
+ |
+ scoped_refptr<gfx::GLImageAndroidNativeBuffer> image( |
+ new gfx::GLImageAndroidNativeBuffer(size)); |
+ if (!image->Initialize(native_buffer)) |
+ return scoped_refptr<gfx::GLImage>(); |
+ |
+ return image; |
} |
// static |