| Index: ui/gfx/gl/gl_context_glx.cc
|
| ===================================================================
|
| --- ui/gfx/gl/gl_context_glx.cc (revision 106500)
|
| +++ ui/gfx/gl/gl_context_glx.cc (working copy)
|
| @@ -46,7 +46,8 @@
|
|
|
| GLContextGLX::GLContextGLX(GLShareGroup* share_group)
|
| : GLContext(share_group),
|
| - context_(NULL) {
|
| + context_(NULL),
|
| + display_(NULL) {
|
| }
|
|
|
| GLContextGLX::~GLContextGLX() {
|
| @@ -55,7 +56,7 @@
|
|
|
| bool GLContextGLX::Initialize(
|
| GLSurface* compatible_surface, GpuPreference gpu_preference) {
|
| - GLSurfaceGLX* surface_glx = static_cast<GLSurfaceGLX*>(compatible_surface);
|
| + display_ = static_cast<Display*>(compatible_surface->GetDisplay());
|
|
|
| GLXContext share_handle = static_cast<GLXContext>(
|
| share_group() ? share_group()->GetHandle() : NULL);
|
| @@ -68,14 +69,15 @@
|
| attribs.push_back(GLX_LOSE_CONTEXT_ON_RESET_ARB);
|
| attribs.push_back(0);
|
| context_ = glXCreateContextAttribsARB(
|
| - GLSurfaceGLX::GetDisplay(),
|
| - static_cast<GLXFBConfig>(surface_glx->GetConfig()),
|
| + display_,
|
| + static_cast<GLXFBConfig>(compatible_surface->GetConfig()),
|
| share_handle,
|
| True,
|
| &attribs.front());
|
| if (context_) {
|
| DLOG(INFO) << " Successfully allocated "
|
| - << (surface_glx->IsOffscreen() ? "offscreen" : "onscreen")
|
| + << (compatible_surface->IsOffscreen() ?
|
| + "offscreen" : "onscreen")
|
| << " GL context with LOSE_CONTEXT_ON_RESET_ARB";
|
| } else {
|
| // TODO(kbr): it is not expected that things will work properly
|
| @@ -93,24 +95,23 @@
|
| // The means by which the context is created depends on whether
|
| // the drawable type works reliably with GLX 1.3. If it does not
|
| // then fall back to GLX 1.2.
|
| - if (surface_glx->IsOffscreen()) {
|
| + if (compatible_surface->IsOffscreen()) {
|
| context_ = glXCreateNewContext(
|
| - GLSurfaceGLX::GetDisplay(),
|
| - static_cast<GLXFBConfig>(surface_glx->GetConfig()),
|
| + display_,
|
| + static_cast<GLXFBConfig>(compatible_surface->GetConfig()),
|
| GLX_RGBA_TYPE,
|
| share_handle,
|
| True);
|
| } else {
|
| - Display* display = GLSurfaceGLX::GetDisplay();
|
| -
|
| // Get the visuals for the X drawable.
|
| XWindowAttributes attributes;
|
| if (!XGetWindowAttributes(
|
| - display,
|
| - reinterpret_cast<GLXDrawable>(surface_glx->GetHandle()),
|
| + display_,
|
| + reinterpret_cast<GLXDrawable>(compatible_surface->GetHandle()),
|
| &attributes)) {
|
| LOG(ERROR) << "XGetWindowAttributes failed for window " <<
|
| - reinterpret_cast<GLXDrawable>(surface_glx->GetHandle()) << ".";
|
| + reinterpret_cast<GLXDrawable>(
|
| + compatible_surface->GetHandle()) << ".";
|
| return false;
|
| }
|
|
|
| @@ -119,7 +120,7 @@
|
|
|
| int visual_info_count = 0;
|
| scoped_ptr_malloc<XVisualInfo, ScopedPtrXFree> visual_info_list(
|
| - XGetVisualInfo(display, VisualIDMask,
|
| + XGetVisualInfo(display_, VisualIDMask,
|
| &visual_info_template,
|
| &visual_info_count));
|
|
|
| @@ -131,7 +132,7 @@
|
|
|
| // Attempt to create a context with each visual in turn until one works.
|
| context_ = glXCreateContext(
|
| - display,
|
| + display_,
|
| visual_info_list.get(),
|
| share_handle,
|
| True);
|
| @@ -144,9 +145,9 @@
|
| return false;
|
| }
|
|
|
| - DLOG(INFO) << (surface_glx->IsOffscreen() ? "Offscreen" : "Onscreen")
|
| + DLOG(INFO) << (compatible_surface->IsOffscreen() ? "Offscreen" : "Onscreen")
|
| << " context was "
|
| - << (glXIsDirect(GLSurfaceGLX::GetDisplay(),
|
| + << (glXIsDirect(display_,
|
| static_cast<GLXContext>(context_))
|
| ? "direct" : "indirect")
|
| << ".";
|
| @@ -156,7 +157,7 @@
|
|
|
| void GLContextGLX::Destroy() {
|
| if (context_) {
|
| - glXDestroyContext(GLSurfaceGLX::GetDisplay(),
|
| + glXDestroyContext(display_,
|
| static_cast<GLXContext>(context_));
|
| context_ = NULL;
|
| }
|
| @@ -168,7 +169,7 @@
|
| return true;
|
|
|
| if (!glXMakeCurrent(
|
| - GLSurfaceGLX::GetDisplay(),
|
| + display_,
|
| reinterpret_cast<GLXDrawable>(surface->GetHandle()),
|
| static_cast<GLXContext>(context_))) {
|
| LOG(ERROR) << "Couldn't make context current with X drawable.";
|
| @@ -190,7 +191,7 @@
|
| return;
|
|
|
| SetCurrent(NULL, NULL);
|
| - glXMakeContextCurrent(GLSurfaceGLX::GetDisplay(), 0, 0, NULL);
|
| + glXMakeContextCurrent(display_, 0, 0, NULL);
|
| }
|
|
|
| bool GLContextGLX::IsCurrent(GLSurface* surface) {
|
| @@ -227,13 +228,13 @@
|
| // respect this setting anyway (tearing still occurs) and it
|
| // dramatically increases latency.
|
| if (interval == 1 &&
|
| - IsCompositingWindowManagerActive(GLSurfaceGLX::GetDisplay())) {
|
| + IsCompositingWindowManagerActive(display_)) {
|
| LOG(INFO) <<
|
| "Forcing vsync off because compositing window manager was detected.";
|
| interval = 0;
|
| }
|
| glXSwapIntervalEXT(
|
| - GLSurfaceGLX::GetDisplay(),
|
| + display_,
|
| glXGetCurrentDrawable(),
|
| interval);
|
| } else {
|
|
|