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

Unified Diff: ui/gl/gl_context_glx.cc

Issue 11467008: Always use glXCreateContextAttribsARB to create GLX contexts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporate review feedback" Created 8 years 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 | « no previous file | ui/gl/gl_surface_glx.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gl/gl_context_glx.cc
diff --git a/ui/gl/gl_context_glx.cc b/ui/gl/gl_context_glx.cc
index c6752634a19a640c253bf7dd1e81eb720b8753fa..db5f0acbbe1931d434c0cc2224a6dfc25f6a1d83 100644
--- a/ui/gl/gl_context_glx.cc
+++ b/ui/gl/gl_context_glx.cc
@@ -49,85 +49,25 @@ bool GLContextGLX::Initialize(
GLXContext share_handle = static_cast<GLXContext>(
share_group() ? share_group()->GetHandle() : NULL);
+ std::vector<int> attribs;
if (GLSurfaceGLX::IsCreateContextRobustnessSupported()) {
DVLOG(1) << "GLX_ARB_create_context_robustness supported.";
-
- std::vector<int> attribs;
attribs.push_back(GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB);
attribs.push_back(GLX_LOSE_CONTEXT_ON_RESET_ARB);
- attribs.push_back(0);
- context_ = glXCreateContextAttribsARB(
- display_,
- static_cast<GLXFBConfig>(compatible_surface->GetConfig()),
- share_handle,
- True,
- &attribs.front());
- if (context_) {
- DVLOG(1) << " Successfully allocated "
- << (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
- // in this case, since we will likely allocate our offscreen
- // contexts with this bit set and the onscreen contexts without,
- // and won't be able to put them in the same share group.
- // Consider what to do here; force loss of all contexts and
- // reallocation without ARB_robustness?
- LOG(ERROR) <<
- " FAILED to allocate GL context with LOSE_CONTEXT_ON_RESET_ARB";
- }
- }
-
- if (!context_) {
- // 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 (compatible_surface->IsOffscreen()) {
- context_ = glXCreateNewContext(
- display_,
- static_cast<GLXFBConfig>(compatible_surface->GetConfig()),
- GLX_RGBA_TYPE,
- share_handle,
- True);
- } else {
- // Get the visuals for the X drawable.
- XWindowAttributes attributes;
- if (!XGetWindowAttributes(
- display_,
- reinterpret_cast<GLXDrawable>(compatible_surface->GetHandle()),
- &attributes)) {
- LOG(ERROR) << "XGetWindowAttributes failed for window " <<
- reinterpret_cast<GLXDrawable>(
- compatible_surface->GetHandle()) << ".";
- return false;
- }
-
- XVisualInfo visual_info_template;
- visual_info_template.visualid = XVisualIDFromVisual(attributes.visual);
-
- int visual_info_count = 0;
- scoped_ptr_malloc<XVisualInfo, ScopedPtrXFree> visual_info_list(
- XGetVisualInfo(display_, VisualIDMask,
- &visual_info_template,
- &visual_info_count));
-
- DCHECK(visual_info_list.get());
- if (visual_info_count == 0) {
- LOG(ERROR) << "No visual info for visual ID.";
- return false;
- }
-
- // Attempt to create a context with each visual in turn until one works.
- context_ = glXCreateContext(
- display_,
- visual_info_list.get(),
- share_handle,
- True);
- }
}
-
- if (!context_) {
+ attribs.push_back(0);
+ context_ = glXCreateContextAttribsARB(
+ display_,
+ static_cast<GLXFBConfig>(compatible_surface->GetConfig()),
+ share_handle,
+ True,
+ &attribs.front());
+ if (context_) {
+ DVLOG(1) << " Successfully allocated "
+ << (compatible_surface->IsOffscreen() ?
+ "offscreen" : "onscreen")
+ << " GL context with LOSE_CONTEXT_ON_RESET_ARB";
+ } else {
LOG(ERROR) << "Couldn't create GL context.";
return false;
}
@@ -156,9 +96,10 @@ bool GLContextGLX::MakeCurrent(GLSurface* surface) {
return true;
TRACE_EVENT0("gpu", "GLContextGLX::MakeCurrent");
- if (!glXMakeCurrent(
+ if (!glXMakeContextCurrent(
display_,
reinterpret_cast<GLXDrawable>(surface->GetHandle()),
+ reinterpret_cast<GLXDrawable>(surface->GetHandle()),
static_cast<GLXContext>(context_))) {
LOG(ERROR) << "Couldn't make context current with X drawable.";
Destroy();
@@ -188,7 +129,7 @@ void GLContextGLX::ReleaseCurrent(GLSurface* surface) {
return;
SetCurrent(NULL, NULL);
- if (!glXMakeCurrent(display_, 0, 0))
+ if (!glXMakeContextCurrent(display_, 0, 0, 0))
LOG(ERROR) << "glXMakeCurrent failed in ReleaseCurrent";
}
« no previous file with comments | « no previous file | ui/gl/gl_surface_glx.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698