#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