GLIntercept 1.1 - now with ARB_debug_output

A new version of GLIntercept has been released:

This includes more bug fixes for using a core OpenGL profile, but mostly adds support for the ARB_debug_output extension.
See an example and more screen shots here: GitHub - dtrebilco/glintercept: GLIntercept is a OpenGL function call interceptor for Windows that will intercept and log all OpenGL calls

Here are the options for the plugin


//////////////////////////////////////////////////////////////
// Force setting of debug context via wglCreateContextAttribsARB
// (ARB_debug_output extension is typically only available in a debug context)
//////////////////////////////////////////////////////////////

ForceDebugMode = True;

//////////////////////////////////////////////////////////////
// If debug messages are added to the OpenGL function log
//////////////////////////////////////////////////////////////

LogToFunctionLog = True;

//////////////////////////////////////////////////////////////
// If debug messages are added to the error log 
// (and output window in visual studio)
//////////////////////////////////////////////////////////////

LogToErrorLog = True;

//////////////////////////////////////////////////////////////
// If a debugger breakpoint is issued on every debug message
// when running under a debugger. Stepping through some 
// assembly (Visual studio - F10) may be necessary to return 
// to a valid stack frame to see the code causing the message.
//////////////////////////////////////////////////////////////

BreakOnMessage = False;

//////////////////////////////////////////////////////////////
// Control of what level of debug messages to log.
// Options are the same as specified via glDebugMessageControlARB.
// 
//  Multiple rules of the syntax:
//
//  RuleName = (Source, Type, Severity, Enabled)
//  {
//    ids = (a,b,c);
//  }
//
//  Where:
//   Source is one of ("Dont Care", "OpenGL","Windows","Shader Compiler","Third Party","Application","Other")
//   Type is one of ("Dont Care", "Error", "Deprecated behavior", "Undefined behavior", "Portability", "Performance", "Message")
//   Severity is one of ("Dont Care","High","Medium", "Low")
//   Enabled is "True" or "False"
//   ids [Optional] is a list of the message ids to change
//
// If no rules are specified, the default rules or application
// setting are used.
//////////////////////////////////////////////////////////////

MessageControl
{
  // Enable all messages by default
  AllMessages = ("Dont Care", "Dont Care", "Dont Care", True)
   
  // Example of disabling an OpenGL message number (note the "Don't Care" for severity)
  //DisableRule = ("OpenGL", "Message", "Dont Care", False)
  //{
  //  ids = (131185);
  //}    
    
}


You can also hide the ARB_debug_output extension from the application if you want to by also using the extension override settings in the gliConfig.ini file


      ExtensionOverride = ("GLExtOverride/GLExtOverride.dll")
      {
        RemoveExtensions = ("GL_ARB_debug_output");
      }

Let me know if any issues.

Hi,

I forgot whether I suggested it already or not but a feature that I would love to see in GLIntercept is an overloaded version of glValidateProgram and glValidateProgramPipeline adding tests preventing “silent errors”. For example, checking that the vertex shader input interface matches the vertex array object’s vertex format. Typically if the vertex shader declares a vertex input that is not backed by a vertex attribute, the rendering can’t possibly be correct.

I have some code doing some of this in my OpenGL samples. I can send it to you but it remains only a subset of what an overloaded glValidateProgram* function could do. I’ll be pleased to provide more code over time.

I’ll try to remember to get back to you on this after Siggraph!

Sure, if you can provide the code I can easily slot it into a plugin.

FYI: I did a presentation at a local game engine meetup on GLIntercept today

Nice video. Thanks for the link.

  • Nigel