diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2015-05-12 14:35:26 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-05-13 19:01:58 -0700 |
commit | a2344c36c372445ee230832a0b742ac5ee739eb1 (patch) | |
tree | c733e1fff4d4b7e7a914d19f0838aeaaf1ca3aa7 /src/mbgl/platform | |
parent | 0f7c6b0b52ac76db3bb0064b4230229d9def62a8 (diff) | |
download | qtlocation-mapboxgl-a2344c36c372445ee230832a0b742ac5ee739eb1.tar.gz |
Extensible GL extension support
Diffstat (limited to 'src/mbgl/platform')
-rw-r--r-- | src/mbgl/platform/gl.cpp | 78 |
1 files changed, 17 insertions, 61 deletions
diff --git a/src/mbgl/platform/gl.cpp b/src/mbgl/platform/gl.cpp index 096ec8393f..3d8a237c70 100644 --- a/src/mbgl/platform/gl.cpp +++ b/src/mbgl/platform/gl.cpp @@ -1,75 +1,31 @@ #include <mbgl/platform/gl.hpp> -#include <mbgl/platform/log.hpp> - -#include <iostream> - namespace mbgl { namespace gl { -PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl = nullptr; -PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert = nullptr; -PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback = nullptr; -PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog = nullptr; -PFNGLGETPOINTERVPROC GetPointerv = nullptr; -PFNGLPUSHDEBUGGROUPPROC PushDebugGroup = nullptr; -PFNGLPOPDEBUGGROUPPROC PopDebugGroup = nullptr; -PFNGLOBJECTLABELPROC ObjectLabel = nullptr; -PFNGLGETOBJECTLABELPROC GetObjectLabel = nullptr; -PFNGLOBJECTPTRLABELPROC ObjectPtrLabel = nullptr; -PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel = nullptr; +std::vector<ExtensionFunctionBase*>& ExtensionFunctionBase::functions() { + static std::vector<ExtensionFunctionBase*> functions; + return functions; +} -void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei, const GLchar *message, const void *) { - std::string strSource; - switch (source) { - case GL_DEBUG_SOURCE_API: strSource = "DEBUG_SOURCE_API"; break; - case GL_DEBUG_SOURCE_WINDOW_SYSTEM: strSource = "DEBUG_SOURCE_WINDOW_SYSTEM"; break; - case GL_DEBUG_SOURCE_SHADER_COMPILER: strSource = "DEBUG_SOURCE_SHADER_COMPILER"; break; - case GL_DEBUG_SOURCE_THIRD_PARTY: strSource = "DEBUG_SOURCE_THIRD_PARTY"; break; - case GL_DEBUG_SOURCE_APPLICATION: strSource = "DEBUG_SOURCE_APPLICATION"; break; - case GL_DEBUG_SOURCE_OTHER: strSource = "DEBUG_SOURCE_OTHER"; break; - default: strSource = "(unknown)"; break; - } +void InitializeExtensions(glProc (*getProcAddress)(const char *)) { + const char * extensionsPtr = reinterpret_cast<const char *>( + MBGL_CHECK_ERROR(glGetString(GL_EXTENSIONS))); - std::string strType; - switch (type) { - case GL_DEBUG_TYPE_ERROR: strType = "DEBUG_TYPE_ERROR"; break; - case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: strType = "DEBUG_TYPE_DEPRECATED_BEHAVIOR"; break; - case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: strType = "DEBUG_TYPE_UNDEFINED_BEHAVIOR"; break; - case GL_DEBUG_TYPE_PERFORMANCE: strType = "DEBUG_TYPE_PERFORMANCE"; break; - case GL_DEBUG_TYPE_PORTABILITY: strType = "DEBUG_TYPE_PORTABILITY"; break; - case GL_DEBUG_TYPE_OTHER: strType = "DEBUG_TYPE_OTHER"; break; - case GL_DEBUG_TYPE_MARKER: strType = "DEBUG_TYPE_MARKER"; break; - case GL_DEBUG_TYPE_PUSH_GROUP: strType = "DEBUG_TYPE_OTHER"; break; - case GL_DEBUG_TYPE_POP_GROUP: strType = "DEBUG_TYPE_POP_GROUP"; break; - default: strSource = "(unknown)"; break; - } + if (!extensionsPtr) + return; - std::string strSeverity; - mbgl::EventSeverity evtSeverity; - switch (severity) { - case GL_DEBUG_SEVERITY_HIGH: strSeverity = "DEBUG_SEVERITY_HIGH"; evtSeverity = mbgl::EventSeverity::Error; break; - case GL_DEBUG_SEVERITY_MEDIUM: strSeverity = "DEBUG_SEVERITY_MEDIUM"; evtSeverity = mbgl::EventSeverity::Warning; break; - case GL_DEBUG_SEVERITY_LOW: strSeverity = "DEBUG_SEVERITY_LOW"; evtSeverity = mbgl::EventSeverity::Info; break; - case GL_DEBUG_SEVERITY_NOTIFICATION: strSeverity = "DEBUG_SEVERITY_NOTIFICATION"; evtSeverity = mbgl::EventSeverity::Debug; break; - default: strSource = "(unknown)"; evtSeverity = mbgl::EventSeverity::Debug; break; + const std::string extensions = extensionsPtr; + for (auto fn : ExtensionFunctionBase::functions()) { + for (auto probe : fn->probes) { + if (extensions.find(probe.first) != std::string::npos) { + fn->ptr = getProcAddress(probe.second); + break; + } + } } - - mbgl::Log::Record(evtSeverity, mbgl::Event::OpenGL, "GL_%s GL_%s %u GL_%s - %s", strSource.c_str(), strType.c_str(), id, strSeverity.c_str(), message); } -PFNGLINSERTEVENTMARKEREXTPROC InsertEventMarkerEXT = nullptr; -PFNGLPUSHGROUPMARKEREXTPROC PushGroupMarkerEXT = nullptr; -PFNGLPOPGROUPMARKEREXTPROC PopGroupMarkerEXT = nullptr; - -PFNGLLABELOBJECTEXTPROC LabelObjectEXT = nullptr; -PFNGLGETOBJECTLABELEXTPROC GetObjectLabelEXT = nullptr; - -PFNGLBINDVERTEXARRAYPROC BindVertexArray = nullptr; -PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays = nullptr; -PFNGLGENVERTEXARRAYSPROC GenVertexArrays = nullptr; -PFNGLISVERTEXARRAYPROC IsVertexArray = nullptr; - void checkError(const char *cmd, const char *file, int line) { const GLenum err = glGetError(); if (err != GL_NO_ERROR) { |