| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 extern "C" { | 5 extern "C" { |
| 6 #include <X11/Xlib.h> | 6 #include <X11/Xlib.h> |
| 7 } | 7 } |
| 8 | 8 |
| 9 #include "ui/gl/gl_context_glx.h" | 9 #include "ui/gl/gl_context_glx.h" |
| 10 | 10 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 class ScopedPtrXFree { | 27 class ScopedPtrXFree { |
| 28 public: | 28 public: |
| 29 void operator()(void* x) const { | 29 void operator()(void* x) const { |
| 30 ::XFree(x); | 30 ::XFree(x); |
| 31 } | 31 } |
| 32 }; | 32 }; |
| 33 | 33 |
| 34 } // namespace | 34 } // namespace |
| 35 | 35 |
| 36 GLContextGLX::GLContextGLX(GLShareGroup* share_group) | 36 GLContextGLX::GLContextGLX(GLShareGroup* share_group) |
| 37 : GLContext(share_group), | 37 : GLContextReal(share_group), |
| 38 context_(NULL), | 38 context_(NULL), |
| 39 display_(NULL) { | 39 display_(NULL) { |
| 40 } | 40 } |
| 41 | 41 |
| 42 Display* GLContextGLX::display() { | 42 Display* GLContextGLX::display() { |
| 43 return display_; | 43 return display_; |
| 44 } | 44 } |
| 45 | 45 |
| 46 bool GLContextGLX::Initialize( | 46 bool GLContextGLX::Initialize( |
| 47 GLSurface* compatible_surface, GpuPreference gpu_preference) { | 47 GLSurface* compatible_surface, GpuPreference gpu_preference) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 if (!glXMakeContextCurrent( | 116 if (!glXMakeContextCurrent( |
| 117 display_, | 117 display_, |
| 118 reinterpret_cast<GLXDrawable>(surface->GetHandle()), | 118 reinterpret_cast<GLXDrawable>(surface->GetHandle()), |
| 119 reinterpret_cast<GLXDrawable>(surface->GetHandle()), | 119 reinterpret_cast<GLXDrawable>(surface->GetHandle()), |
| 120 static_cast<GLXContext>(context_))) { | 120 static_cast<GLXContext>(context_))) { |
| 121 LOG(ERROR) << "Couldn't make context current with X drawable."; | 121 LOG(ERROR) << "Couldn't make context current with X drawable."; |
| 122 Destroy(); | 122 Destroy(); |
| 123 return false; | 123 return false; |
| 124 } | 124 } |
| 125 | 125 |
| 126 SetCurrent(this, surface); | 126 SetCurrent(surface); |
| 127 if (!InitializeExtensionBindings()) { | 127 if (!InitializeExtensionBindings()) { |
| 128 ReleaseCurrent(surface); | 128 ReleaseCurrent(surface); |
| 129 Destroy(); | 129 Destroy(); |
| 130 return false; | 130 return false; |
| 131 } | 131 } |
| 132 | 132 |
| 133 if (!surface->OnMakeCurrent(this)) { | 133 if (!surface->OnMakeCurrent(this)) { |
| 134 LOG(ERROR) << "Could not make current."; | 134 LOG(ERROR) << "Could not make current."; |
| 135 ReleaseCurrent(surface); | 135 ReleaseCurrent(surface); |
| 136 Destroy(); | 136 Destroy(); |
| 137 return false; | 137 return false; |
| 138 } | 138 } |
| 139 | 139 |
| 140 SetRealGLApi(); | 140 SetRealGLApi(); |
| 141 return true; | 141 return true; |
| 142 } | 142 } |
| 143 | 143 |
| 144 void GLContextGLX::ReleaseCurrent(GLSurface* surface) { | 144 void GLContextGLX::ReleaseCurrent(GLSurface* surface) { |
| 145 if (!IsCurrent(surface)) | 145 if (!IsCurrent(surface)) |
| 146 return; | 146 return; |
| 147 | 147 |
| 148 SetCurrent(NULL, NULL); | 148 SetCurrent(NULL); |
| 149 if (!glXMakeContextCurrent(display_, 0, 0, 0)) | 149 if (!glXMakeContextCurrent(display_, 0, 0, 0)) |
| 150 LOG(ERROR) << "glXMakeCurrent failed in ReleaseCurrent"; | 150 LOG(ERROR) << "glXMakeCurrent failed in ReleaseCurrent"; |
| 151 } | 151 } |
| 152 | 152 |
| 153 bool GLContextGLX::IsCurrent(GLSurface* surface) { | 153 bool GLContextGLX::IsCurrent(GLSurface* surface) { |
| 154 bool native_context_is_current = | 154 bool native_context_is_current = |
| 155 glXGetCurrentContext() == static_cast<GLXContext>(context_); | 155 glXGetCurrentContext() == static_cast<GLXContext>(context_); |
| 156 | 156 |
| 157 // If our context is current then our notion of which GLContext is | 157 // If our context is current then our notion of which GLContext is |
| 158 // current must be correct. On the other hand, third-party code | 158 // current must be correct. On the other hand, third-party code |
| 159 // using OpenGL might change the current context. | 159 // using OpenGL might change the current context. |
| 160 DCHECK(!native_context_is_current || (GetCurrent() == this)); | 160 DCHECK(!native_context_is_current || (GetRealCurrent() == this)); |
| 161 | 161 |
| 162 if (!native_context_is_current) | 162 if (!native_context_is_current) |
| 163 return false; | 163 return false; |
| 164 | 164 |
| 165 if (surface) { | 165 if (surface) { |
| 166 if (glXGetCurrentDrawable() != | 166 if (glXGetCurrentDrawable() != |
| 167 reinterpret_cast<GLXDrawable>(surface->GetHandle())) { | 167 reinterpret_cast<GLXDrawable>(surface->GetHandle())) { |
| 168 return false; | 168 return false; |
| 169 } | 169 } |
| 170 } | 170 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 | 219 |
| 220 bool GLContextGLX::WasAllocatedUsingRobustnessExtension() { | 220 bool GLContextGLX::WasAllocatedUsingRobustnessExtension() { |
| 221 return GLSurfaceGLX::IsCreateContextRobustnessSupported(); | 221 return GLSurfaceGLX::IsCreateContextRobustnessSupported(); |
| 222 } | 222 } |
| 223 | 223 |
| 224 GLContextGLX::~GLContextGLX() { | 224 GLContextGLX::~GLContextGLX() { |
| 225 Destroy(); | 225 Destroy(); |
| 226 } | 226 } |
| 227 | 227 |
| 228 } // namespace gfx | 228 } // namespace gfx |
| OLD | NEW |