Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(643)

Unified Diff: ui/gfx/gl/gl_surface_glx.cc

Issue 10392068: ui: Move gl/ directory out of gfx/, up to ui/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix mac_rel Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/gl/gl_surface_glx.h ('k') | ui/gfx/gl/gl_surface_linux.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/gl/gl_surface_glx.cc
diff --git a/ui/gfx/gl/gl_surface_glx.cc b/ui/gfx/gl/gl_surface_glx.cc
deleted file mode 100644
index 1440e5c9b73a7797e501dbd2f76dd2a5a5b992e7..0000000000000000000000000000000000000000
--- a/ui/gfx/gl/gl_surface_glx.cc
+++ /dev/null
@@ -1,326 +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.
-
-extern "C" {
-#include <X11/Xlib.h>
-}
-
-#include "ui/gfx/gl/gl_surface_glx.h"
-
-#include "base/basictypes.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
-#include "base/process_util.h"
-#include "third_party/mesa/MesaLib/include/GL/osmesa.h"
-#include "ui/base/x/x11_util.h"
-#include "ui/gfx/gl/gl_bindings.h"
-#include "ui/gfx/gl/gl_implementation.h"
-
-namespace gfx {
-
-namespace {
-
-// scoped_ptr functor for XFree(). Use as follows:
-// scoped_ptr_malloc<XVisualInfo, ScopedPtrXFree> foo(...);
-// where "XVisualInfo" is any X type that is freed with XFree.
-class ScopedPtrXFree {
- public:
- void operator()(void* x) const {
- ::XFree(x);
- }
-};
-
-Display* g_display;
-const char* g_glx_extensions = NULL;
-bool g_glx_create_context_robustness_supported = false;
-
-} // namespace anonymous
-
-GLSurfaceGLX::GLSurfaceGLX() {
-}
-
-GLSurfaceGLX::~GLSurfaceGLX() {
-}
-
-bool GLSurfaceGLX::InitializeOneOff() {
- static bool initialized = false;
- if (initialized)
- return true;
-
- g_display = base::MessagePumpForUI::GetDefaultXDisplay();
- if (!g_display) {
- LOG(ERROR) << "XOpenDisplay failed.";
- return false;
- }
-
- int major, minor;
- if (!glXQueryVersion(g_display, &major, &minor)) {
- LOG(ERROR) << "glxQueryVersion failed";
- return false;
- }
-
- if (major == 1 && minor < 3) {
- LOG(ERROR) << "GLX 1.3 or later is required.";
- return false;
- }
-
- g_glx_extensions = glXQueryExtensionsString(g_display, 0);
- g_glx_create_context_robustness_supported =
- HasGLXExtension("GLX_ARB_create_context_robustness");
-
- initialized = true;
- return true;
-}
-
-// static
-const char* GLSurfaceGLX::GetGLXExtensions() {
- return g_glx_extensions;
-}
-
-// static
-bool GLSurfaceGLX::HasGLXExtension(const char* name) {
- DCHECK(name);
- const char* c_extensions = GetGLXExtensions();
- if (!c_extensions)
- return false;
- std::string extensions(c_extensions);
- extensions += " ";
-
- std::string delimited_name(name);
- delimited_name += " ";
-
- return extensions.find(delimited_name) != std::string::npos;
-}
-
-// static
-bool GLSurfaceGLX::IsCreateContextRobustnessSupported() {
- return g_glx_create_context_robustness_supported;
-}
-
-void* GLSurfaceGLX::GetDisplay() {
- return g_display;
-}
-
-NativeViewGLSurfaceGLX::NativeViewGLSurfaceGLX(gfx::AcceleratedWidget window)
- : window_(window),
- config_(NULL) {
-}
-
-NativeViewGLSurfaceGLX::NativeViewGLSurfaceGLX()
- : window_(0),
- config_(NULL) {
-}
-
-NativeViewGLSurfaceGLX::~NativeViewGLSurfaceGLX() {
- Destroy();
-}
-
-bool NativeViewGLSurfaceGLX::Initialize() {
- XWindowAttributes attributes;
- if (!XGetWindowAttributes(g_display, window_, &attributes)) {
- LOG(ERROR) << "XGetWindowAttributes failed for window " << window_ << ".";
- return false;
- }
- size_ = gfx::Size(attributes.width, attributes.height);
- return true;
-}
-
-void NativeViewGLSurfaceGLX::Destroy() {
-}
-
-bool NativeViewGLSurfaceGLX::Resize(const gfx::Size& size) {
- // On Intel drivers, the frame buffer won't be resize until the next swap. If
- // we only do PostSubBuffer, then we're stuck in the old size. Force a swap
- // now.
- if (gfx::g_GLX_MESA_copy_sub_buffer && size_ != size)
- SwapBuffers();
- size_ = size;
- return true;
-}
-
-bool NativeViewGLSurfaceGLX::IsOffscreen() {
- return false;
-}
-
-bool NativeViewGLSurfaceGLX::SwapBuffers() {
- glXSwapBuffers(g_display, window_);
- return true;
-}
-
-gfx::Size NativeViewGLSurfaceGLX::GetSize() {
- return size_;
-}
-
-void* NativeViewGLSurfaceGLX::GetHandle() {
- return reinterpret_cast<void*>(window_);
-}
-
-std::string NativeViewGLSurfaceGLX::GetExtensions() {
- std::string extensions = GLSurface::GetExtensions();
- if (g_GLX_MESA_copy_sub_buffer) {
- extensions += extensions.empty() ? "" : " ";
- extensions += "GL_CHROMIUM_post_sub_buffer";
- }
- return extensions;
-}
-
-void* NativeViewGLSurfaceGLX::GetConfig() {
- if (!config_) {
- // This code path is expensive, but we only take it when
- // attempting to use GLX_ARB_create_context_robustness, in which
- // case we need a GLXFBConfig for the window in order to create a
- // context for it.
- //
- // TODO(kbr): this is not a reliable code path. On platforms which
- // support it, we should use glXChooseFBConfig in the browser
- // process to choose the FBConfig and from there the X Visual to
- // use when creating the window in the first place. Then we can
- // pass that FBConfig down rather than attempting to reconstitute
- // it.
-
- XWindowAttributes attributes;
- if (!XGetWindowAttributes(
- g_display,
- reinterpret_cast<GLXDrawable>(GetHandle()),
- &attributes)) {
- LOG(ERROR) << "XGetWindowAttributes failed for window " <<
- reinterpret_cast<GLXDrawable>(GetHandle()) << ".";
- return NULL;
- }
-
- int visual_id = XVisualIDFromVisual(attributes.visual);
-
- int num_elements = 0;
- scoped_ptr_malloc<GLXFBConfig, ScopedPtrXFree> configs(
- glXGetFBConfigs(g_display,
- DefaultScreen(g_display),
- &num_elements));
- if (!configs.get()) {
- LOG(ERROR) << "glXGetFBConfigs failed.";
- return NULL;
- }
- if (!num_elements) {
- LOG(ERROR) << "glXGetFBConfigs returned 0 elements.";
- return NULL;
- }
- bool found = false;
- int i;
- for (i = 0; i < num_elements; ++i) {
- int value;
- if (glXGetFBConfigAttrib(
- g_display, configs.get()[i], GLX_VISUAL_ID, &value)) {
- LOG(ERROR) << "glXGetFBConfigAttrib failed.";
- return NULL;
- }
- if (value == visual_id) {
- found = true;
- break;
- }
- }
- if (found) {
- config_ = configs.get()[i];
- }
- }
-
- return config_;
-}
-
-bool NativeViewGLSurfaceGLX::PostSubBuffer(
- int x, int y, int width, int height) {
- DCHECK(g_GLX_MESA_copy_sub_buffer);
- glXCopySubBufferMESA(g_display, window_, x, y, width, height);
- return true;
-}
-
-PbufferGLSurfaceGLX::PbufferGLSurfaceGLX(const gfx::Size& size)
- : size_(size),
- config_(NULL),
- pbuffer_(0) {
-}
-
-PbufferGLSurfaceGLX::~PbufferGLSurfaceGLX() {
- Destroy();
-}
-
-bool PbufferGLSurfaceGLX::Initialize() {
- DCHECK(!pbuffer_);
-
- static const int config_attributes[] = {
- GLX_BUFFER_SIZE, 32,
- GLX_ALPHA_SIZE, 8,
- GLX_BLUE_SIZE, 8,
- GLX_GREEN_SIZE, 8,
- GLX_RED_SIZE, 8,
- GLX_RENDER_TYPE, GLX_RGBA_BIT,
- GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
- GLX_DOUBLEBUFFER, False,
- 0
- };
-
- int num_elements = 0;
- scoped_ptr_malloc<GLXFBConfig, ScopedPtrXFree> configs(
- glXChooseFBConfig(g_display,
- DefaultScreen(g_display),
- config_attributes,
- &num_elements));
- if (!configs.get()) {
- LOG(ERROR) << "glXChooseFBConfig failed.";
- return false;
- }
- if (!num_elements) {
- LOG(ERROR) << "glXChooseFBConfig returned 0 elements.";
- return false;
- }
-
- config_ = configs.get()[0];
-
- const int pbuffer_attributes[] = {
- GLX_PBUFFER_WIDTH, size_.width(),
- GLX_PBUFFER_HEIGHT, size_.height(),
- 0
- };
- pbuffer_ = glXCreatePbuffer(g_display,
- static_cast<GLXFBConfig>(config_),
- pbuffer_attributes);
- if (!pbuffer_) {
- Destroy();
- LOG(ERROR) << "glXCreatePbuffer failed.";
- return false;
- }
-
- return true;
-}
-
-void PbufferGLSurfaceGLX::Destroy() {
- if (pbuffer_) {
- glXDestroyPbuffer(g_display, pbuffer_);
- pbuffer_ = 0;
- }
-
- config_ = NULL;
-}
-
-bool PbufferGLSurfaceGLX::IsOffscreen() {
- return true;
-}
-
-bool PbufferGLSurfaceGLX::SwapBuffers() {
- NOTREACHED() << "Attempted to call SwapBuffers on a pbuffer.";
- return false;
-}
-
-gfx::Size PbufferGLSurfaceGLX::GetSize() {
- return size_;
-}
-
-void* PbufferGLSurfaceGLX::GetHandle() {
- return reinterpret_cast<void*>(pbuffer_);
-}
-
-void* PbufferGLSurfaceGLX::GetConfig() {
- return config_;
-}
-
-} // namespace gfx
« no previous file with comments | « ui/gfx/gl/gl_surface_glx.h ('k') | ui/gfx/gl/gl_surface_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698