myTexSampler->Release (this);
}
-#if !defined(GL_ES_VERSION_2_0)
if (arbDbg != NULL
&& myIsGlDebugCtx
&& IsValid())
{
// reset callback
+ #if !defined(GL_ES_VERSION_2_0)
void* aPtr = NULL;
glGetPointerv (GL_DEBUG_CALLBACK_USER_PARAM, &aPtr);
if (aPtr == this)
+ #endif
{
- arbDbg->glDebugMessageCallbackARB (NULL, NULL);
+ arbDbg->glDebugMessageCallback (NULL, NULL);
}
myIsGlDebugCtx = Standard_False;
}
-#endif
}
// =======================================================================
static Standard_CString THE_DBGMSG_SEV_MEDIUM = "Medium"; // GL_DEBUG_SEVERITY_MEDIUM
static Standard_CString THE_DBGMSG_SEV_LOW = "Low"; // GL_DEBUG_SEVERITY_LOW
-#if !defined(GL_ES_VERSION_2_0)
//! Callback for GL_ARB_debug_output extension
static void APIENTRY debugCallbackWrap(unsigned int theSource,
unsigned int theType,
OpenGl_Context* aCtx = (OpenGl_Context* )theUserParam;
aCtx->PushMessage (theSource, theType, theId, theSeverity, theMessage);
}
-#endif
// =======================================================================
// function : PushMessage
{
arbTBO = reinterpret_cast<OpenGl_ArbTBO*> (myFuncs.get());
}
+
+ // initialize debug context extension
+ if (CheckExtension ("GL_KHR_debug"))
+ {
+ // this functionality become a part of OpenGL ES 3.2
+ arbDbg = NULL;
+ // According to GL_KHR_debug spec, all functions should have KHR suffix.
+ // However, some implementations can export these functions without suffix.
+ if (FindProc ("glDebugMessageControlKHR", myFuncs->glDebugMessageControl)
+ && FindProc ("glDebugMessageInsertKHR", myFuncs->glDebugMessageInsert)
+ && FindProc ("glDebugMessageCallbackKHR", myFuncs->glDebugMessageCallback)
+ && FindProc ("glGetDebugMessageLogKHR", myFuncs->glGetDebugMessageLog))
+ {
+ arbDbg = (OpenGl_ArbDbg* )(&(*myFuncs));
+ }
+
+ if (arbDbg != NULL
+ && caps->contextDebug)
+ {
+ // setup default callback
+ myIsGlDebugCtx = Standard_True;
+ arbDbg->glDebugMessageCallback (debugCallbackWrap, this);
+ ::glEnable (GL_DEBUG_OUTPUT);
+ if (caps->contextSyncDebug)
+ {
+ // note that some broken implementations (e.g. simulators) might generate error message on this call
+ ::glEnable (GL_DEBUG_OUTPUT_SYNCHRONOUS);
+ }
+ }
+ }
+
#else
myTexClamp = IsGlGreaterEqual (1, 2) ? GL_CLAMP_TO_EDGE : GL_CLAMP;
//extSwapTear = CheckExtension (aGlxExts, "GLX_EXT_swap_control_tear");
#endif
- // initialize debug context extension
- if (CheckExtension ("GL_ARB_debug_output"))
- {
- arbDbg = NULL;
- if (FindProcShort (glDebugMessageControlARB)
- && FindProcShort (glDebugMessageInsertARB)
- && FindProcShort (glDebugMessageCallbackARB)
- && FindProcShort (glGetDebugMessageLogARB))
- {
- arbDbg = (OpenGl_ArbDbg* )(&(*myFuncs));
- }
- if (arbDbg != NULL
- && caps->contextDebug)
- {
- // setup default callback
- myIsGlDebugCtx = Standard_True;
- arbDbg->glDebugMessageCallbackARB (debugCallbackWrap, this);
- if (caps->contextSyncDebug)
- {
- ::glEnable (GL_DEBUG_OUTPUT_SYNCHRONOUS);
- }
- }
- }
-
// load OpenGL 1.2 new functions
has12 = IsGlGreaterEqual (1, 2)
&& FindProcShort (glBlendColor)
&& FindProcShort (glBindImageTextures)
&& FindProcShort (glBindVertexBuffers);
+ // initialize debug context extension
+ if (CheckExtension ("GL_ARB_debug_output"))
+ {
+ arbDbg = NULL;
+ if (has43)
+ {
+ arbDbg = (OpenGl_ArbDbg* )(&(*myFuncs));
+ }
+ else if (FindProc ("glDebugMessageControlARB", myFuncs->glDebugMessageControl)
+ && FindProc ("glDebugMessageInsertARB", myFuncs->glDebugMessageInsert)
+ && FindProc ("glDebugMessageCallbackARB", myFuncs->glDebugMessageCallback)
+ && FindProc ("glGetDebugMessageLogARB", myFuncs->glGetDebugMessageLog))
+ {
+ arbDbg = (OpenGl_ArbDbg* )(&(*myFuncs));
+ }
+
+ if (arbDbg != NULL
+ && caps->contextDebug)
+ {
+ // setup default callback
+ myIsGlDebugCtx = Standard_True;
+ arbDbg->glDebugMessageCallback (debugCallbackWrap, this);
+ if (has43)
+ {
+ ::glEnable (GL_DEBUG_OUTPUT);
+ }
+ if (caps->contextSyncDebug)
+ {
+ ::glEnable (GL_DEBUG_OUTPUT_SYNCHRONOUS);
+ }
+ }
+ }
+
// initialize TBO extension (ARB)
if (!has31
&& CheckExtension ("GL_ARB_texture_buffer_object")
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
// debug ARB extension
+ #define GL_DEBUG_OUTPUT 0x92E0
#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
typedef void (*glTexBuffer_t)(GLenum target, GLenum internalFormat, GLuint buffer);
glTexBuffer_t glTexBuffer;
+public: //! @name GL_KHR_debug (optional)
+
+ typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
+
+ typedef void (APIENTRYP glDebugMessageControl_t ) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
+ typedef void (APIENTRYP glDebugMessageInsert_t ) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf);
+ typedef void (APIENTRYP glDebugMessageCallback_t) (GLDEBUGPROCARB callback, const void* userParam);
+ typedef GLuint (APIENTRYP glGetDebugMessageLog_t ) (GLuint count,
+ GLsizei bufSize,
+ GLenum* sources,
+ GLenum* types,
+ GLuint* ids,
+ GLenum* severities,
+ GLsizei* lengths,
+ GLchar* messageLog);
+
+ glDebugMessageControl_t glDebugMessageControl;
+ glDebugMessageInsert_t glDebugMessageInsert;
+ glDebugMessageCallback_t glDebugMessageCallback;
+ glGetDebugMessageLog_t glGetDebugMessageLog;
+
#else // OpenGL ES vs. desktop
public: //! @name OpenGL 1.2
PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
-public: //! @name GL_ARB_debug_output (optional)
-
- PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControlARB;
- PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsertARB;
- PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB;
- PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB;
-
public: //! @name GL_EXT_geometry_shader4
PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT;