Index: ui/gfx/gl/gl_surface_egl.cc |
diff --git a/ui/gfx/gl/gl_surface_egl.cc b/ui/gfx/gl/gl_surface_egl.cc |
deleted file mode 100644 |
index 99a689b2da5122f0d77befd9da5017f8666fc899..0000000000000000000000000000000000000000 |
--- a/ui/gfx/gl/gl_surface_egl.cc |
+++ /dev/null |
@@ -1,398 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ui/gfx/gl/gl_surface_egl.h" |
- |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/message_loop.h" |
-#include "build/build_config.h" |
-#if !defined(OS_ANDROID) |
-#include "third_party/angle/include/EGL/egl.h" |
-#include "third_party/angle/include/EGL/eglext.h" |
-#endif |
-#include "ui/gfx/gl/egl_util.h" |
-#include "ui/gfx/gl/gl_context.h" |
- |
-#if defined(OS_ANDROID) |
-#include <EGL/egl.h> |
-#endif |
- |
-// This header must come after the above third-party include, as |
-// it brings in #defines that cause conflicts. |
-#include "ui/gfx/gl/gl_bindings.h" |
- |
-#if defined(USE_X11) |
-extern "C" { |
-#include <X11/Xlib.h> |
-} |
-#endif |
- |
-namespace gfx { |
- |
-namespace { |
-EGLConfig g_config; |
-EGLDisplay g_display; |
-EGLNativeDisplayType g_native_display; |
-EGLConfig g_software_config; |
-EGLDisplay g_software_display; |
-EGLNativeDisplayType g_software_native_display; |
-} |
- |
-GLSurfaceEGL::GLSurfaceEGL() : software_(false) { |
-} |
- |
-GLSurfaceEGL::~GLSurfaceEGL() { |
-} |
- |
-bool GLSurfaceEGL::InitializeOneOff() { |
- static bool initialized = false; |
- if (initialized) |
- return true; |
- |
-#if defined(USE_X11) |
- g_native_display = base::MessagePumpForUI::GetDefaultXDisplay(); |
-#else |
- g_native_display = EGL_DEFAULT_DISPLAY; |
-#endif |
- g_display = eglGetDisplay(g_native_display); |
- if (!g_display) { |
- LOG(ERROR) << "eglGetDisplay failed with error " << GetLastEGLErrorString(); |
- return false; |
- } |
- |
- if (!eglInitialize(g_display, NULL, NULL)) { |
- LOG(ERROR) << "eglInitialize failed with error " << GetLastEGLErrorString(); |
- return false; |
- } |
- |
- // Choose an EGL configuration. |
- static const EGLint kConfigAttribs[] = { |
- EGL_BUFFER_SIZE, 32, |
- EGL_ALPHA_SIZE, 8, |
- EGL_BLUE_SIZE, 8, |
- EGL_GREEN_SIZE, 8, |
- EGL_RED_SIZE, 8, |
- EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, |
- EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PBUFFER_BIT, |
- EGL_NONE |
- }; |
- |
- EGLint num_configs; |
- if (!eglChooseConfig(g_display, |
- kConfigAttribs, |
- NULL, |
- 0, |
- &num_configs)) { |
- LOG(ERROR) << "eglChooseConfig failed failed with error " |
- << GetLastEGLErrorString(); |
- return false; |
- } |
- |
- if (num_configs == 0) { |
- LOG(ERROR) << "No suitable EGL configs found."; |
- return false; |
- } |
- |
- if (!eglChooseConfig(g_display, |
- kConfigAttribs, |
- &g_config, |
- 1, |
- &num_configs)) { |
- LOG(ERROR) << "eglChooseConfig failed with error " |
- << GetLastEGLErrorString(); |
- return false; |
- } |
- |
- initialized = true; |
- |
-#if defined(USE_X11) || defined(OS_ANDROID) |
- return true; |
-#else |
- g_software_native_display = EGL_SOFTWARE_DISPLAY_ANGLE; |
-#endif |
- g_software_display = eglGetDisplay(g_software_native_display); |
- if (!g_software_display) { |
- return true; |
- } |
- |
- if (!eglInitialize(g_software_display, NULL, NULL)) { |
- return true; |
- } |
- |
- if (!eglChooseConfig(g_software_display, |
- kConfigAttribs, |
- NULL, |
- 0, |
- &num_configs)) { |
- g_software_display = NULL; |
- return true; |
- } |
- |
- if (num_configs == 0) { |
- g_software_display = NULL; |
- return true; |
- } |
- |
- if (!eglChooseConfig(g_software_display, |
- kConfigAttribs, |
- &g_software_config, |
- 1, |
- &num_configs)) { |
- g_software_display = NULL; |
- return false; |
- } |
- |
- return true; |
-} |
- |
-EGLDisplay GLSurfaceEGL::GetDisplay() { |
- return software_ ? g_software_display : g_display; |
-} |
- |
-EGLConfig GLSurfaceEGL::GetConfig() { |
- return software_ ? g_software_config : g_config; |
-} |
- |
-EGLDisplay GLSurfaceEGL::GetHardwareDisplay() { |
- return g_display; |
-} |
- |
-EGLDisplay GLSurfaceEGL::GetSoftwareDisplay() { |
- return g_software_display; |
-} |
- |
-EGLNativeDisplayType GLSurfaceEGL::GetNativeDisplay() { |
- return g_native_display; |
-} |
- |
-NativeViewGLSurfaceEGL::NativeViewGLSurfaceEGL(bool software, |
- gfx::AcceleratedWidget window) |
- : window_(window), |
- surface_(NULL), |
- supports_post_sub_buffer_(false) |
-{ |
- software_ = software; |
-} |
- |
-NativeViewGLSurfaceEGL::~NativeViewGLSurfaceEGL() { |
- Destroy(); |
-} |
- |
-bool NativeViewGLSurfaceEGL::Initialize() { |
-#if defined(OS_ANDROID) |
- NOTREACHED(); |
- return false; |
-#else |
- DCHECK(!surface_); |
- |
- if (!GetDisplay()) { |
- LOG(ERROR) << "Trying to create surface with invalid display."; |
- return false; |
- } |
- |
- static const EGLint egl_window_attributes_sub_buffer[] = { |
- EGL_POST_SUB_BUFFER_SUPPORTED_NV, EGL_TRUE, |
- EGL_NONE |
- }; |
- |
- // Create a surface for the native window. |
- surface_ = eglCreateWindowSurface(GetDisplay(), |
- GetConfig(), |
- window_, |
- gfx::g_EGL_NV_post_sub_buffer ? |
- egl_window_attributes_sub_buffer : |
- NULL); |
- |
- if (!surface_) { |
- LOG(ERROR) << "eglCreateWindowSurface failed with error " |
- << GetLastEGLErrorString(); |
- Destroy(); |
- return false; |
- } |
- |
- EGLint surfaceVal; |
- EGLBoolean retVal = eglQuerySurface(GetDisplay(), |
- surface_, |
- EGL_POST_SUB_BUFFER_SUPPORTED_NV, |
- &surfaceVal); |
- supports_post_sub_buffer_ = (surfaceVal && retVal) == EGL_TRUE; |
- |
- return true; |
-#endif |
-} |
- |
-void NativeViewGLSurfaceEGL::Destroy() { |
- if (surface_) { |
- if (!eglDestroySurface(GetDisplay(), surface_)) { |
- LOG(ERROR) << "eglDestroySurface failed with error " |
- << GetLastEGLErrorString(); |
- } |
- surface_ = NULL; |
- } |
-} |
- |
-bool NativeViewGLSurfaceEGL::IsOffscreen() { |
- return false; |
-} |
- |
-bool NativeViewGLSurfaceEGL::SwapBuffers() { |
- if (!eglSwapBuffers(GetDisplay(), surface_)) { |
- DVLOG(1) << "eglSwapBuffers failed with error " |
- << GetLastEGLErrorString(); |
- return false; |
- } |
- |
- return true; |
-} |
- |
-gfx::Size NativeViewGLSurfaceEGL::GetSize() { |
- EGLint width; |
- EGLint height; |
- if (!eglQuerySurface(GetDisplay(), surface_, EGL_WIDTH, &width) || |
- !eglQuerySurface(GetDisplay(), surface_, EGL_HEIGHT, &height)) { |
- NOTREACHED() << "eglQuerySurface failed with error " |
- << GetLastEGLErrorString(); |
- return gfx::Size(); |
- } |
- |
- return gfx::Size(width, height); |
-} |
- |
-EGLSurface NativeViewGLSurfaceEGL::GetHandle() { |
- return surface_; |
-} |
- |
-std::string NativeViewGLSurfaceEGL::GetExtensions() { |
- std::string extensions = GLSurface::GetExtensions(); |
- if (supports_post_sub_buffer_) { |
- extensions += extensions.empty() ? "" : " "; |
- extensions += "GL_CHROMIUM_post_sub_buffer"; |
- } |
- return extensions; |
-} |
- |
-bool NativeViewGLSurfaceEGL::PostSubBuffer( |
- int x, int y, int width, int height) { |
- DCHECK(supports_post_sub_buffer_); |
- if (!eglPostSubBufferNV(GetDisplay(), surface_, x, y, width, height)) { |
- DVLOG(1) << "eglPostSubBufferNV failed with error " |
- << GetLastEGLErrorString(); |
- return false; |
- } |
- return true; |
-} |
- |
-void NativeViewGLSurfaceEGL::SetHandle(EGLSurface surface) { |
- surface_ = surface; |
-} |
- |
-PbufferGLSurfaceEGL::PbufferGLSurfaceEGL(bool software, const gfx::Size& size) |
- : size_(size), |
- surface_(NULL) { |
- software_ = software; |
-} |
- |
-PbufferGLSurfaceEGL::~PbufferGLSurfaceEGL() { |
- Destroy(); |
-} |
- |
-bool PbufferGLSurfaceEGL::Initialize() { |
- DCHECK(!surface_); |
- |
- if (!GetDisplay()) { |
- LOG(ERROR) << "Trying to create surface with invalid display."; |
- return false; |
- } |
- |
- const EGLint pbuffer_attribs[] = { |
- EGL_WIDTH, size_.width(), |
- EGL_HEIGHT, size_.height(), |
- EGL_NONE |
- }; |
- |
- surface_ = eglCreatePbufferSurface(GetDisplay(), |
- GetConfig(), |
- pbuffer_attribs); |
- if (!surface_) { |
- LOG(ERROR) << "eglCreatePbufferSurface failed with error " |
- << GetLastEGLErrorString(); |
- Destroy(); |
- return false; |
- } |
- |
- return true; |
-} |
- |
-void PbufferGLSurfaceEGL::Destroy() { |
- if (surface_) { |
- if (!eglDestroySurface(GetDisplay(), surface_)) { |
- LOG(ERROR) << "eglDestroySurface failed with error " |
- << GetLastEGLErrorString(); |
- } |
- surface_ = NULL; |
- } |
-} |
- |
-bool PbufferGLSurfaceEGL::IsOffscreen() { |
- return true; |
-} |
- |
-bool PbufferGLSurfaceEGL::SwapBuffers() { |
- NOTREACHED() << "Attempted to call SwapBuffers on a PbufferGLSurfaceEGL."; |
- return false; |
-} |
- |
-gfx::Size PbufferGLSurfaceEGL::GetSize() { |
- return size_; |
-} |
- |
-bool PbufferGLSurfaceEGL::Resize(const gfx::Size& size) { |
- if (size == size_) |
- return true; |
- |
- GLContext* current_context = GLContext::GetCurrent(); |
- bool was_current = current_context && current_context->IsCurrent(this); |
- if (was_current) |
- current_context->ReleaseCurrent(this); |
- |
- Destroy(); |
- |
- size_ = size; |
- |
- if (!Initialize()) |
- return false; |
- |
- if (was_current) |
- return current_context->MakeCurrent(this); |
- |
- return true; |
-} |
- |
-EGLSurface PbufferGLSurfaceEGL::GetHandle() { |
- return surface_; |
-} |
- |
-void* PbufferGLSurfaceEGL::GetShareHandle() { |
-#if defined(OS_ANDROID) |
- NOTREACHED(); |
- return NULL; |
-#else |
- const char* extensions = eglQueryString(g_display, EGL_EXTENSIONS); |
- if (!strstr(extensions, "EGL_ANGLE_query_surface_pointer")) |
- return NULL; |
- |
- void* handle; |
- if (!eglQuerySurfacePointerANGLE(g_display, |
- GetHandle(), |
- EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, |
- &handle)) { |
- return NULL; |
- } |
- |
- return handle; |
-#endif |
-} |
- |
-} // namespace gfx |