diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index c3a3a4d2..336bf360 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -348,58 +348,74 @@ namespace bgfx if (0 == m_display) { Display* display = XOpenDisplay(0); - XLockDisplay(display); BGFX_FATAL(display, Fatal::UnableToInitialize, "Failed to open X display (0)."); - int glxMajor, glxMinor; - if (!glXQueryVersion(display, &glxMajor, &glxMinor) ) - { - BGFX_FATAL(false, Fatal::UnableToInitialize, "Failed to query GLX version"); - } - BGFX_FATAL((glxMajor == 1 && glxMinor >= 3) || glxMajor > 1, Fatal::UnableToInitialize, "GLX version is not >=1.3 (%d.%d).", glxMajor, glxMinor); + XLockDisplay(display); - const int glxAttribs[] = + int major, minor; + bool version = glXQueryVersion(display, &major, &minor); + BGFX_FATAL(version, Fatal::UnableToInitialize, "Failed to query GLX version"); + BGFX_FATAL( (major == 1 && minor >= 3) || major > 1 + , Fatal::UnableToInitialize + , "GLX version is not >=1.3 (%d.%d)." + , major + , minor + ); + + const int attrsGlx[] = { - GLX_X_RENDERABLE, True, - GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, GLX_RENDER_TYPE, GLX_RGBA_BIT, - GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR, + GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, + GLX_DOUBLEBUFFER, true, GLX_RED_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8, - GLX_DOUBLEBUFFER, True, None, }; // Find suitable config - GLXFBConfig bestConfig = NULL; + GLXFBConfig bestConfig = NULL; - int nconfigs; - GLXFBConfig* configs = glXChooseFBConfig(display, DefaultScreen(display), glxAttribs, &nconfigs); + int numConfigs; + GLXFBConfig* configs = glXChooseFBConfig(display, DefaultScreen(display), attrsGlx, &numConfigs); + + BX_TRACE("glX num configs %d", numConfigs); XVisualInfo* visualInfo = 0; - for (int ii = 0; ii < nconfigs; ++ii) + for (int ii = 0; ii < numConfigs; ++ii) { visualInfo = glXGetVisualFromFBConfig(display, configs[ii]); - if (visualInfo) + if (NULL != visualInfo) { - // Check if meets min spec - bool validconfig = true; - for (uint32_t attridx = 0; attridx < countof(glxAttribs)-1 && glxAttribs[attridx] != None; attridx += 2) + BX_TRACE("---"); + bool valid = true; + for (uint32_t attr = 6; attr < countof(attrsGlx)-1 && attrsGlx[attr] != None; attr += 2) { int value; - glXGetFBConfigAttrib(display, configs[ii], glxAttribs[attridx], &value); - if (value < glxAttribs[attridx + 1]) + glXGetFBConfigAttrib(display, configs[ii], attrsGlx[attr], &value); + BX_TRACE("glX %d/%d %2d: %4x, %8x (%8x%s)" + , ii + , numConfigs + , attr/2 + , attrsGlx[attr] + , value + , attrsGlx[attr + 1] + , value < attrsGlx[attr + 1] ? " *" : "" + ); + + if (value < attrsGlx[attr + 1]) { - validconfig = false; + valid = false; +#if !BGFX_CONFIG_DEBUG break; +#endif // BGFX_CONFIG_DEBUG } } - if (validconfig) + if (valid) { bestConfig = configs[ii]; break; @@ -444,14 +460,14 @@ namespace bgfx if (NULL != glXCreateContextAttribsARB) { BX_TRACE("Create GL 3.0 context."); - const int contextArrib[] = + const int contextAttrs[] = { GLX_CONTEXT_MAJOR_VERSION_ARB, 3, GLX_CONTEXT_MINOR_VERSION_ARB, 0, None, }; - GLXContext context = glXCreateContextAttribsARB(display, bestConfig, 0, True, contextArrib); + GLXContext context = glXCreateContextAttribsARB(display, bestConfig, 0, true, contextAttrs); if (NULL != context) {