1. 25 Feb, 2011 1 commit
    • Sam Lantinga's avatar
      Fixed bug 1145 (GL Context creation fails for OpenGL 3.2 + Alpha buffer with X11 BadMatch) · 1a2a914b
      Sam Lantinga authored
       Matthias      2011-02-23 09:37:51 PST
      
      Please view the attached source file. Using this minimal program (as attached),
      it creates an OpenGL 2.0 context with a cleared color buffer. If I set the
      OpenGL version to 3.2, the function SDL_GL_CreateContext fails (or more
      specifically, glXMakeCurrent fails) with an X11 BadMatch error:
      
      
      X Error of failed request:  BadMatch (invalid parameter attributes)
        Major opcode of failed request:  128 (GLX)
        Minor opcode of failed request:  5 (X_GLXMakeCurrent)
        Serial number of failed request:  153
        Current serial number in output stream:  153
      
      
      Also note that if I do not specify the alpha buffer size, the program works for
      OpenGL 2.0 and OpenGL 3.2.
      
      After some further analysis, I believe I have found the problem. The specific
      issue is in:
      
      SDL_x11opengl.c::X11_GL_CreateContext.
      
      Note that for OpenGL 3.2 contexts, the GLXFBConfig to use is chosen as the best
      match from glXChooseFBConfig. However, opengl attributes originally set with
      SDL_GL_SetAttribute are not mapped to GLX attributes and then passed to the
      glXChooseFBConfig function. According to the GLX 1.4 specification, if the
      attributes are not specified, the function falls back to defaults (which, in
      this particular case, prefer alpha channel size == 0).
      
      For testing purposes, I modified the call to glXChooseFBConfig to look
      something like this:
      
      
      int glxAttribs[] =
      {
       GLX_RED_SIZE,8,
       GLX_GREEN_SIZE,8,
       GLX_BLUE_SIZE,8,
       GLX_ALPHA_SIZE,8,
       None
      };
      
      if (!glXChooseFBConfig ||
       !(framebuffer_config = glXChooseFBConfig(display, DefaultScreen(display),
      glxAttribs, &fbcount)))
      {
       ...
      }
      
      
      The best match GLXFBConfig then supports 8 bit alpha channel. The program then
      works as intended.
      
      
      Hope this helps!
      1a2a914b
  2. 24 Feb, 2011 1 commit
  3. 23 Feb, 2011 3 commits
  4. 22 Feb, 2011 14 commits
  5. 21 Feb, 2011 9 commits
  6. 20 Feb, 2011 12 commits