OGL32CTX: Request a 3.0 backward compatible context in linux.

This allows to enable ARB_DEBUG_OUTPUT extension.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@14924 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
vincentlj 2014-01-05 17:48:36 +00:00
parent d44c28ca9e
commit 8a33f14da5
3 changed files with 83 additions and 1 deletions

View File

@ -724,8 +724,23 @@ bool CIrrDeviceLinux::createWindow()
glxWin=glXCreateWindow(display,glxFBConfig,window,NULL);
if (glxWin)
{
int context_attribs[] =
{
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
GLX_CONTEXT_MINOR_VERSION_ARB, 0,
// Uncomment to discard deprecated features
//GLX_CONTEXT_FLAGS_ARB , GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
#if DEBUG
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
#endif
None
};
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = 0;
glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)
glXGetProcAddressARB( (const GLubyte *) "glXCreateContextAttribsARB" );
// create glx context
Context = glXCreateNewContext(display, glxFBConfig, GLX_RGBA_TYPE, NULL, True);
Context = glXCreateContextAttribsARB(display, glxFBConfig, 0, True, context_attribs);
if (Context)
{
if (!glXMakeContextCurrent(display, glxWin, glxWin, Context))

View File

@ -22,6 +22,7 @@
#define GLX_GLXEXT_LEGACY 1
#include <GL/glx.h>
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
#define GLX_GLXEXT_PROTOTYPES
#include "glxext.h"
#endif
#endif

View File

@ -49,6 +49,69 @@ PFNGLDELETEBUFFERSPROC glDeleteBuffers;
static GLuint quad_buffer;
static bool is_gl_init = false;
static
void debugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
const GLchar* msg, const void *userparam)
{
switch(source)
{
case GL_DEBUG_SOURCE_API_ARB:
printf("[API]");
break;
case GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB:
printf("[WINDOW_SYSTEM]");
break;
case GL_DEBUG_SOURCE_SHADER_COMPILER_ARB:
printf("[SHADER_COMPILER]");
break;
case GL_DEBUG_SOURCE_THIRD_PARTY_ARB:
printf("[THIRD_PARTY]");
break;
case GL_DEBUG_SOURCE_APPLICATION_ARB:
printf("[APPLICATION]");
break;
case GL_DEBUG_SOURCE_OTHER_ARB:
printf("[OTHER]");
break;
}
switch(type)
{
case GL_DEBUG_TYPE_ERROR_ARB:
printf("[ERROR]");
break;
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB:
printf("[DEPRECATED_BEHAVIOR]");
break;
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB:
printf("[UNDEFINED_BEHAVIOR]");
break;
case GL_DEBUG_TYPE_PORTABILITY_ARB:
printf("[PORTABILITY]");
break;
case GL_DEBUG_TYPE_PERFORMANCE_ARB:
printf("[PERFORMANCE]");
break;
case GL_DEBUG_TYPE_OTHER_ARB:
printf("[OTHER]");
break;
}
switch(severity)
{
case GL_DEBUG_SEVERITY_HIGH_ARB:
printf("[HIGH]");
break;
case GL_DEBUG_SEVERITY_MEDIUM_ARB:
printf("[MEDIUM]");
break;
case GL_DEBUG_SEVERITY_LOW_ARB:
printf("[LOW]");
break;
}
printf("%s\n", msg);
}
void initGL()
{
if (is_gl_init)
@ -94,6 +157,9 @@ void initGL()
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)IRR_OGL_LOAD_EXTENSION("glVertexAttribDivisor");
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)IRR_OGL_LOAD_EXTENSION("glDrawArraysInstanced");
glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)IRR_OGL_LOAD_EXTENSION("glDeleteBuffers");
#endif
#if DEBUG
glDebugMessageCallbackARB(debugCallback, NULL);
#endif
const float quad_vertex[] = {
-1., -1., -1., 1., // UpperLeft