From 199885baa8bec8e01e3fa0a528d037caf0784af6 Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 9 Feb 2022 18:47:58 +0000 Subject: [PATCH] OpenGL: Avoid deprecated function when querying available extensions In OpenGL 3 and up, GL_EXTENSIONS is deprecated as an argument of glGetString and glGetStringi should be used instead. --- .../juce_opengl/opengl/juce_OpenGLHelpers.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp b/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp index 54ea447f8a..f4b26e795f 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp @@ -133,6 +133,23 @@ bool OpenGLHelpers::isExtensionSupported (const char* const extensionName) jassert (extensionName != nullptr); // you must supply a genuine string for this. jassert (isContextActive()); // An OpenGL context will need to be active before calling this. + if (getOpenGLVersion().major >= 3) + { + using GetStringi = const GLubyte* (*) (GLenum, GLuint); + + if (auto* thisGlGetStringi = reinterpret_cast (getExtensionFunction ("glGetStringi"))) + { + GLint n = 0; + glGetIntegerv (GL_NUM_EXTENSIONS, &n); + + for (auto i = (decltype (n)) 0; i < n; ++i) + if (StringRef (extensionName) == StringRef ((const char*) thisGlGetStringi (GL_EXTENSIONS, (GLuint) i))) + return true; + + return false; + } + } + const char* extensions = (const char*) glGetString (GL_EXTENSIONS); jassert (extensions != nullptr); // Perhaps you didn't activate an OpenGL context before calling this?