]> git.lizzy.rs Git - irrlicht.git/commitdiff
Enumerate extensions in the OpenGL 3 way
authornumzero <numzer0@yandex.ru>
Mon, 27 Feb 2023 14:41:03 +0000 (17:41 +0300)
committernumzero <numzer0@yandex.ru>
Mon, 27 Feb 2023 14:41:03 +0000 (17:41 +0300)
source/Irrlicht/mt_opengl_loader.cpp

index 96d7587c303ebab530dfd23b3be5eb36057a2b46..26de3d3cec0a43ff5013c1fa5bcd7ac11b946869 100755 (executable)
@@ -756,11 +756,22 @@ void OpenGLProcedures::LoadAllProcedures(irr::video::IContextManager *cmgr)
        if (!NamedBufferPageCommitment) NamedBufferPageCommitment = (PFNGLNAMEDBUFFERPAGECOMMITMENTPROC_MT)cmgr->getProcAddress("glNamedBufferPageCommitmentARB");
        if (!TexPageCommitment) TexPageCommitment = (PFNGLTEXPAGECOMMITMENTPROC_MT)cmgr->getProcAddress("glTexPageCommitmentARB");
 
+       // OpenGL 3 way to enumerate extensions
+       int ext_count = 0;
+       GetIntegerv(NUM_EXTENSIONS, &ext_count);
+       extensions.reserve(ext_count);
+       for (int k = 0; k < ext_count; k++)
+               extensions.emplace((char *)GetStringi(EXTENSIONS, k));
+       if (ext_count)
+               return;
+
+       // OpenGL 2 / ES 2 way to enumerate extensions
+       auto ext_str = GetString(EXTENSIONS);
+       if (!ext_str)
+               return;
        // get the extension string, chop it up
-       std::string ext_string = std::string((char*)GetString(EXTENSIONS));
-       std::stringstream ext_ss(ext_string);
+       std::stringstream ext_ss((char*)ext_str);
        std::string tmp;
        while (std::getline(ext_ss, tmp, ' '))
                extensions.emplace(tmp);
-
 }