| Index: ui/gl/gl_surface_egl.cc
|
| diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
|
| index ae22a28419c53ef447145b2dc161cb699de5010c..d8741f701b09eb51a7c0bac4b6921620868e3e99 100644
|
| --- a/ui/gl/gl_surface_egl.cc
|
| +++ b/ui/gl/gl_surface_egl.cc
|
| @@ -14,6 +14,8 @@
|
| #include "build/build_config.h"
|
| #include "ui/gl/egl_util.h"
|
| #include "ui/gl/gl_context.h"
|
| +#include "ui/gl/gl_implementation.h"
|
| +#include "ui/gl/gl_surface_stub.h"
|
|
|
| #if defined(USE_X11)
|
| extern "C" {
|
| @@ -21,6 +23,10 @@ extern "C" {
|
| }
|
| #endif
|
|
|
| +#if defined (USE_OZONE)
|
| +#include "ui/base/ozone/surface_factory_ozone.h"
|
| +#endif
|
| +
|
| using ui::GetLastEGLErrorString;
|
|
|
| namespace gfx {
|
| @@ -83,6 +89,10 @@ bool GLSurfaceEGL::InitializeOneOff() {
|
| if (initialized)
|
| return true;
|
|
|
| +#if defined (USE_OZONE)
|
| + ui::SurfaceFactoryOzone::GetInstance()->InitializeHardware();
|
| +#endif
|
| +
|
| #if defined(USE_X11)
|
| g_native_display = base::MessagePumpForUI::GetDefaultXDisplay();
|
| #else
|
| @@ -146,7 +156,8 @@ bool GLSurfaceEGL::InitializeOneOff() {
|
|
|
| initialized = true;
|
|
|
| -#if defined(USE_X11) || defined(OS_ANDROID)
|
| +#if defined(USE_X11) || defined(OS_ANDROID) \
|
| + || defined(USE_OZONE)
|
| return true;
|
| #else
|
| g_software_native_display = EGL_SOFTWARE_DISPLAY_ANGLE;
|
| @@ -230,6 +241,10 @@ NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(bool software,
|
| }
|
|
|
| bool NativeViewGLSurfaceEGL::Initialize() {
|
| + return Initialize(NULL);
|
| +}
|
| +
|
| +bool NativeViewGLSurfaceEGL::Initialize(VSyncProvider* sync_provider) {
|
| DCHECK(!surface_);
|
|
|
| if (window_ == kNullAcceleratedWidget) {
|
| @@ -270,9 +285,10 @@ bool NativeViewGLSurfaceEGL::Initialize() {
|
| &surfaceVal);
|
| supports_post_sub_buffer_ = (surfaceVal && retVal) == EGL_TRUE;
|
|
|
| - if (g_egl_sync_control_supported)
|
| + if (sync_provider)
|
| + vsync_provider_.reset(sync_provider);
|
| + else if (g_egl_sync_control_supported)
|
| vsync_provider_.reset(new EGLSyncControlVSyncProvider(surface_));
|
| -
|
| return true;
|
| }
|
|
|
| @@ -585,4 +601,66 @@ PbufferGLSurfaceEGL::~PbufferGLSurfaceEGL() {
|
| Destroy();
|
| }
|
|
|
| +#if defined(ANDROID) || defined(USE_OZONE)
|
| +
|
| +// static
|
| +bool GLSurface::InitializeOneOffInternal() {
|
| + DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2);
|
| +
|
| + if (!GLSurfaceEGL::InitializeOneOff()) {
|
| + LOG(ERROR) << "GLSurfaceEGL::InitializeOneOff failed.";
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +scoped_refptr<GLSurface>
|
| +GLSurface::CreateViewGLSurface(bool software, gfx::AcceleratedWidget window) {
|
| + if (software)
|
| + return NULL;
|
| +
|
| + DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2);
|
| + if (window) {
|
| + scoped_refptr<NativeViewGLSurfaceEGL> surface;
|
| + VSyncProvider* sync_provider = NULL;
|
| +#if defined(USE_OZONE)
|
| + window = ui::SurfaceFactoryOzone::GetInstance()->RealizeAcceleratedWidget(
|
| + window));
|
| + sync_provider =
|
| + ui::SurfaceFactoryOzone::GetInstance()->GetVSyncProvider(window);
|
| +#endif
|
| + surface = new NativeViewGLSurfaceEGL(false, window);
|
| + if(surface->Initialize(sync_provider))
|
| + return surface;
|
| + } else {
|
| + scoped_refptr<GLSurface> surface = new GLSurfaceStub();
|
| + if (surface->Initialize())
|
| + return surface;
|
| + }
|
| + return NULL;
|
| +}
|
| +
|
| +// static
|
| +scoped_refptr<GLSurface>
|
| +GLSurface::CreateOffscreenGLSurface(bool software, const gfx::Size& size) {
|
| + if (software)
|
| + return NULL;
|
| +
|
| + switch (GetGLImplementation()) {
|
| + case kGLImplementationEGLGLES2: {
|
| + scoped_refptr<PbufferGLSurfaceEGL> surface(
|
| + new PbufferGLSurfaceEGL(false, size));
|
| + if (!surface->Initialize())
|
| + return NULL;
|
| + return surface;
|
| + }
|
| + default:
|
| + NOTREACHED();
|
| + return NULL;
|
| + }
|
| +}
|
| +
|
| +#endif
|
| +
|
| } // namespace gfx
|
|
|