summaryrefslogtreecommitdiff
path: root/src/SFML/Window/Context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SFML/Window/Context.cpp')
-rw-r--r--src/SFML/Window/Context.cpp80
1 files changed, 4 insertions, 76 deletions
diff --git a/src/SFML/Window/Context.cpp b/src/SFML/Window/Context.cpp
index 2d51bbc..7617e1a 100644
--- a/src/SFML/Window/Context.cpp
+++ b/src/SFML/Window/Context.cpp
@@ -28,24 +28,6 @@
#include <SFML/Window/Context.hpp>
#include <SFML/Window/GlContext.hpp>
#include <SFML/System/ThreadLocalPtr.hpp>
-#include <SFML/OpenGL.hpp>
-#include <algorithm>
-#include <vector>
-#include <string>
-
-#if defined(SFML_SYSTEM_WINDOWS)
-
- typedef const GLubyte* (APIENTRY *glGetStringiFuncType)(GLenum, GLuint);
-
-#else
-
- typedef const GLubyte* (*glGetStringiFuncType)(GLenum, GLuint);
-
-#endif
-
-#if !defined(GL_NUM_EXTENSIONS)
- #define GL_NUM_EXTENSIONS 0x821D
-#endif
namespace
@@ -99,70 +81,16 @@ const Context* Context::getActiveContext()
////////////////////////////////////////////////////////////
-GlFunctionPointer Context::getFunction(const char* name)
+bool Context::isExtensionAvailable(const char* name)
{
- return priv::GlContext::getFunction(name);
+ return priv::GlContext::isExtensionAvailable(name);
}
////////////////////////////////////////////////////////////
-bool Context::isExtensionAvailable(const char* name)
+GlFunctionPointer Context::getFunction(const char* name)
{
- static std::vector<std::string> extensions;
- static bool loaded = false;
-
- if (!loaded)
- {
- const Context* context = getActiveContext();
-
- if (!context)
- return false;
-
- const char* extensionString = NULL;
-
- if(context->getSettings().majorVersion < 3)
- {
- // Try to load the < 3.0 way
- extensionString = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
-
- do
- {
- const char* extension = extensionString;
-
- while(*extensionString && (*extensionString != ' '))
- extensionString++;
-
- extensions.push_back(std::string(extension, extensionString));
- }
- while (*extensionString++);
- }
- else
- {
- // Try to load the >= 3.0 way
- glGetStringiFuncType glGetStringiFunc = NULL;
- glGetStringiFunc = reinterpret_cast<glGetStringiFuncType>(getFunction("glGetStringi"));
-
- if (glGetStringiFunc)
- {
- int numExtensions = 0;
- glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
-
- if (numExtensions)
- {
- for (unsigned int i = 0; i < static_cast<unsigned int>(numExtensions); ++i)
- {
- extensionString = reinterpret_cast<const char*>(glGetStringiFunc(GL_EXTENSIONS, i));
-
- extensions.push_back(extensionString);
- }
- }
- }
- }
-
- loaded = true;
- }
-
- return std::find(extensions.begin(), extensions.end(), name) != extensions.end();
+ return priv::GlContext::getFunction(name);
}