From 89106a96cd86042415d19f307a4ade5f1fae8b5d Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 23 Oct 2012 00:41:25 +0300 Subject: Add OpenGL debug extensions bindings. Also show in log information about known extensions. --- src/graphicsmanager.cpp | 45 ++++++++++++++++++++++++++++++++++----------- src/mgl.cpp | 2 ++ src/mgl.h | 12 +++++++++++- 3 files changed, 47 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp index 15768fcb0..d746cb199 100644 --- a/src/graphicsmanager.cpp +++ b/src/graphicsmanager.cpp @@ -578,11 +578,31 @@ void GraphicsManager::deleteFBO(FBOInfo *fbo) void GraphicsManager::initOpenGLFunctions() { + // Texture sampler + if (checkGLVersion(1, 0) && supportExtension("GL_ARB_sampler_objects")) + { + logger->log("found GL_ARB_sampler_objects"); + assignFunction(glGenSamplers, "glGenSamplers"); + assignFunction(glDeleteSamplers, "glDeleteSamplers"); + assignFunction(glBindSampler, "glBindSampler"); + assignFunction(glSamplerParameteri, "glSamplerParameteri"); + if (mglGenSamplers && config.getBoolValue("useTextureSampler")) + mUseTextureSampler &= true; + else + mUseTextureSampler = false; + } + else + { + logger->log("texture sampler not found"); + mUseTextureSampler = false; + } + if (!checkGLVersion(1, 1)) return; if (supportExtension("GL_ARB_framebuffer_object")) { // frame buffer supported + logger->log("found GL_ARB_framebuffer_object"); assignFunction(glGenRenderbuffers, "glGenRenderbuffers"); assignFunction(glBindRenderbuffer, "glBindRenderbuffer"); assignFunction(glRenderbufferStorage, "glRenderbufferStorage"); @@ -595,6 +615,7 @@ void GraphicsManager::initOpenGLFunctions() } else if (supportExtension("GL_EXT_framebuffer_object")) { // old frame buffer extension + logger->log("found GL_EXT_framebuffer_object"); assignFunction(glGenRenderbuffers, "glGenRenderbuffersEXT"); assignFunction(glBindRenderbuffer, "glBindRenderbufferEXT"); assignFunction(glRenderbufferStorage, "glRenderbufferStorageEXT"); @@ -608,24 +629,26 @@ void GraphicsManager::initOpenGLFunctions() } else { // no frame buffer support + logger->log("frame buffer not found"); config.setValue("usefbo", false); } - // Texture sampler - if (checkGLVersion(1, 0) && supportExtension("GL_ARB_sampler_objects")) + // debug extensions + if (supportExtension("GL_KHR_debug")) { - assignFunction(glGenSamplers, "glGenSamplers"); - assignFunction(glDeleteSamplers, "glDeleteSamplers"); - assignFunction(glBindSampler, "glBindSampler"); - assignFunction(glSamplerParameteri, "glSamplerParameteri"); - if (mglGenSamplers && config.getBoolValue("useTextureSampler")) - mUseTextureSampler &= true; - else - mUseTextureSampler = false; + logger->log("found GL_KHR_debug"); + assignFunction(glDebugMessageControl, "glDebugMessageControl"); + assignFunction(glDebugMessageCallback, "glDebugMessageCallback"); + } + else if (supportExtension("GL_ARB_debug_output")) + { + logger->log("found GL_ARB_debug_output"); + assignFunction(glDebugMessageControl, "glDebugMessageControlARB"); + assignFunction(glDebugMessageCallback, "glDebugMessageCallbackARB"); } else { - mUseTextureSampler = false; + logger->log("debug extensions not found"); } #ifdef WIN32 diff --git a/src/mgl.cpp b/src/mgl.cpp index 54ac6c199..56d3b94c2 100644 --- a/src/mgl.cpp +++ b/src/mgl.cpp @@ -40,6 +40,8 @@ defName(glGenSamplers); defName(glDeleteSamplers); defName(glBindSampler); defName(glSamplerParameteri); +defName(glDebugMessageControl); +defName(glDebugMessageCallback); #ifdef WIN32 defName(wglGetExtensionsString); diff --git a/src/mgl.h b/src/mgl.h index 5050c5dea..f8d2d8db9 100644 --- a/src/mgl.h +++ b/src/mgl.h @@ -67,13 +67,21 @@ typedef void (APIENTRY *glFramebufferRenderbuffer_t)(GLenum target, typedef void (APIENTRY *glDeleteFramebuffers_t) (GLsizei, const GLuint *); typedef void (APIENTRY *glDeleteRenderbuffers_t) (GLsizei, const GLuint *); typedef const GLubyte *(APIENTRY *glGetStringi_t) (GLenum, GLuint); - typedef void (APIENTRY *glGenSamplers_t) (GLsizei count, GLuint *samplers); typedef void (APIENTRY *glDeleteSamplers_t) (GLsizei count, const GLuint * samplers); typedef void (APIENTRY *glBindSampler_t) (GLuint unit, GLuint sampler); typedef void (APIENTRY *glSamplerParameteri_t) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRY *glDebugMessageControl_t) (GLenum source, GLenum type, + GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); + +// callback +typedef void (APIENTRY *GLDEBUGPROC_t) (GLenum source, GLenum type, GLuint id, + GLenum severity, GLsizei length, const GLchar *message, GLvoid *userParam); + +typedef void (APIENTRY *glDebugMessageCallback_t) (GLDEBUGPROC_t callback, + const void *userParam); defNameE(glGenRenderbuffers); defNameE(glBindRenderbuffer); @@ -89,6 +97,8 @@ defNameE(glGenSamplers); defNameE(glDeleteSamplers); defNameE(glBindSampler); defNameE(glSamplerParameteri); +defNameE(glDebugMessageControl); +defNameE(glDebugMessageCallback); #ifdef WIN32 typedef const char* (APIENTRY * wglGetExtensionsString_t) (HDC hdc); -- cgit v1.2.3-70-g09d2