Just a quick GL info logger func for any of you

   #if JUCE_OPENGL
    void logOpenGLInfoCallback (OpenGLContext&)
    {
        int major = 0, minor = 0;
        glGetIntegerv (GL_MAJOR_VERSION, &major);
        glGetIntegerv (GL_MINOR_VERSION, &minor);

        String stats;
        stats
        << "---------------------------" << newLine
        << "=== OpenGL/GPU Information ===" << newLine
        << "Vendor: " << String ((const char*) glGetString (GL_VENDOR)) << newLine
        << "Renderer: " << String ((const char*) glGetString (GL_RENDERER)) << newLine
        << "OpenGL Version: " << String ((const char*) glGetString (GL_VERSION)) << newLine
        << "OpenGL Major: " << String (major) << newLine
        << "OpenGL Minor: " << String (minor) << newLine
        << "OpenGL Shading Language Version: " << String ((const char*) glGetString (GL_SHADING_LANGUAGE_VERSION)) << newLine
        << "---------------------------" << newLine;

        Logger::writeToLog (stats);
    }
   #endif
#if JUCE_OPENGL
// Somewhere where a context is attached, and the context is valid:
static auto logGlInfoOnce = [] (OpenGLContext& c)
{
    static std::once_flag openGlLogFlag;
    std::call_once (openGlLogFlag, logOpenGLInfoCallback, c);
};

context->executeOnGLThread (logGlInfoOnce, false);
#endif
7 Likes

Just saw this. No code at hand but I also suggest to also add these:

glGetIntegerv with GL_CONTEXT_PROFILE_MASK
and use GLbitfield
GL_CONTEXT_CORE_PROFILE_BIT
GL_CONTEXT_COMPATIBILITY_PROFILE_BIT

glGetIntegerv with GL_CONTEXT_FLAGS
and use GLbitfield
GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
GL_CONTEXT_FLAG_DEBUG_BIT
GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT
GL_CONTEXT_FLAG_NO_ERROR_BIT (4.6 or GL_KHR_no_error)

Especially the no error bit is useful, since turned off error logging
can drastically improve performance due to avoiding implicit sync. see KHR_no_error

Optionally, not sure if even available on Mac:
glGetIntegerv with GL_CONTEXT_RELEASE_BEHAVIOR
which is
GL_NONE
or
GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH

see https://registry.khronos.org/OpenGL/extensions/KHR/KHR_context_flush_control.txt

(reference OpenGL Context - OpenGL Wiki)

1 Like