diff options
author | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2019-02-08 15:45:05 +0200 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2019-02-12 19:42:08 +0200 |
commit | 690833ef9212756cbdd1945e2f447f22cc05816e (patch) | |
tree | 4dca89518c6b54c60c669aacd8fbff9c15801418 /src | |
parent | 470b01847db1046bbae872f932b0e83ebf3af5f8 (diff) | |
download | qtlocation-mapboxgl-690833ef9212756cbdd1945e2f447f22cc05816e.tar.gz |
[core] Switch to the new OpenGL abstraction
This patch will make Mapbox GL Core never use OpenGL
directly. We should consider locking into OpenGL ES 2.0
to simplify the code path and remove #ifdefs.
Diffstat (limited to 'src')
-rw-r--r-- | src/core-files.json | 5 | ||||
-rw-r--r-- | src/mbgl/gl/attribute.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/gl/color_mode.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/context.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/gl/context.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/gl/cull_face_mode.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/debugging.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/debugging_extension.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/gl/depth_mode.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/gl.cpp | 71 | ||||
-rw-r--r-- | src/mbgl/gl/gl.hpp | 24 | ||||
-rw-r--r-- | src/mbgl/gl/program_binary_extension.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/stencil_mode.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/uniform.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/gl/value.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/gl/value.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/gl/vertex_array.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/gl/vertex_array_extension.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_custom_layer.cpp | 6 |
19 files changed, 34 insertions, 125 deletions
diff --git a/src/core-files.json b/src/core-files.json index 51e48eae76..a173cdd461 100644 --- a/src/core-files.json +++ b/src/core-files.json @@ -23,7 +23,6 @@ "src/mbgl/gl/debugging.cpp", "src/mbgl/gl/debugging_extension.cpp", "src/mbgl/gl/depth_mode.cpp", - "src/mbgl/gl/gl.cpp", "src/mbgl/gl/object.cpp", "src/mbgl/gl/stencil_mode.cpp", "src/mbgl/gl/uniform.cpp", @@ -50,6 +49,7 @@ "src/mbgl/map/transform.cpp", "src/mbgl/map/transform_state.cpp", "src/mbgl/math/log2.cpp", + "src/mbgl/platform/gl_functions.cpp", "src/mbgl/programs/background_program.cpp", "src/mbgl/programs/binary_program.cpp", "src/mbgl/programs/circle_program.cpp", @@ -336,6 +336,7 @@ "mbgl/math/log2.hpp": "include/mbgl/math/log2.hpp", "mbgl/math/minmax.hpp": "include/mbgl/math/minmax.hpp", "mbgl/math/wrap.hpp": "include/mbgl/math/wrap.hpp", + "mbgl/platform/gl_functions.hpp": "include/mbgl/platform/gl_functions.hpp", "mbgl/renderer/backend_scope.hpp": "include/mbgl/renderer/backend_scope.hpp", "mbgl/renderer/mode.hpp": "include/mbgl/renderer/mode.hpp", "mbgl/renderer/query.hpp": "include/mbgl/renderer/query.hpp", @@ -502,12 +503,12 @@ "mbgl/gl/cull_face_mode.hpp": "src/mbgl/gl/cull_face_mode.hpp", "mbgl/gl/debugging.hpp": "src/mbgl/gl/debugging.hpp", "mbgl/gl/debugging_extension.hpp": "src/mbgl/gl/debugging_extension.hpp", + "mbgl/gl/defines.hpp": "src/mbgl/gl/defines.hpp", "mbgl/gl/depth_mode.hpp": "src/mbgl/gl/depth_mode.hpp", "mbgl/gl/draw_mode.hpp": "src/mbgl/gl/draw_mode.hpp", "mbgl/gl/extension.hpp": "src/mbgl/gl/extension.hpp", "mbgl/gl/features.hpp": "src/mbgl/gl/features.hpp", "mbgl/gl/framebuffer.hpp": "src/mbgl/gl/framebuffer.hpp", - "mbgl/gl/gl.hpp": "src/mbgl/gl/gl.hpp", "mbgl/gl/index_buffer.hpp": "src/mbgl/gl/index_buffer.hpp", "mbgl/gl/object.hpp": "src/mbgl/gl/object.hpp", "mbgl/gl/primitives.hpp": "src/mbgl/gl/primitives.hpp", diff --git a/src/mbgl/gl/attribute.cpp b/src/mbgl/gl/attribute.cpp index b2d05fe665..4983a8c204 100644 --- a/src/mbgl/gl/attribute.cpp +++ b/src/mbgl/gl/attribute.cpp @@ -1,10 +1,12 @@ #include <mbgl/gl/attribute.hpp> #include <mbgl/gl/context.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> namespace mbgl { namespace gl { +using namespace platform; + void bindAttributeLocation(Context& context, ProgramID id, AttributeLocation location, const char* name) { // We're using sequentially numberered attribute locations starting with 0. Therefore we can use // the location as a proxy for the number of attributes. diff --git a/src/mbgl/gl/color_mode.cpp b/src/mbgl/gl/color_mode.cpp index e838c8e2ff..e524bfdf98 100644 --- a/src/mbgl/gl/color_mode.cpp +++ b/src/mbgl/gl/color_mode.cpp @@ -1,5 +1,5 @@ #include <mbgl/gl/color_mode.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> #include <mbgl/util/traits.hpp> namespace mbgl { diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index 18ab38e684..2463993cf0 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -1,5 +1,4 @@ #include <mbgl/gl/context.hpp> -#include <mbgl/gl/gl.hpp> #include <mbgl/gl/debugging_extension.hpp> #include <mbgl/gl/vertex_array_extension.hpp> #include <mbgl/gl/program_binary_extension.hpp> @@ -12,6 +11,8 @@ namespace mbgl { namespace gl { +using namespace platform; + static_assert(underlying_type(ShaderType::Vertex) == GL_VERTEX_SHADER, "OpenGL type mismatch"); static_assert(underlying_type(ShaderType::Fragment) == GL_FRAGMENT_SHADER, "OpenGL type mismatch"); diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index bd682f44da..810fb41990 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -15,6 +15,7 @@ #include <mbgl/gl/depth_mode.hpp> #include <mbgl/gl/stencil_mode.hpp> #include <mbgl/gl/color_mode.hpp> +#include <mbgl/platform/gl_functions.hpp> #include <mbgl/util/noncopyable.hpp> diff --git a/src/mbgl/gl/cull_face_mode.cpp b/src/mbgl/gl/cull_face_mode.cpp index 42729aeea7..53dd340204 100644 --- a/src/mbgl/gl/cull_face_mode.cpp +++ b/src/mbgl/gl/cull_face_mode.cpp @@ -1,5 +1,5 @@ #include <mbgl/gl/cull_face_mode.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> #include <mbgl/util/traits.hpp> namespace mbgl { diff --git a/src/mbgl/gl/debugging.cpp b/src/mbgl/gl/debugging.cpp index 366b4d63c7..7b8121f003 100644 --- a/src/mbgl/gl/debugging.cpp +++ b/src/mbgl/gl/debugging.cpp @@ -5,6 +5,8 @@ namespace mbgl { namespace gl { +using namespace platform; + #ifndef NDEBUG DebugGroup::DebugGroup(const Context& context_, const std::string& name) : context(context_) { diff --git a/src/mbgl/gl/debugging_extension.hpp b/src/mbgl/gl/debugging_extension.hpp index 5657bbde88..0fa5a7b424 100644 --- a/src/mbgl/gl/debugging_extension.hpp +++ b/src/mbgl/gl/debugging_extension.hpp @@ -1,7 +1,7 @@ #pragma once #include <mbgl/gl/extension.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/platform/gl_functions.hpp> #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 @@ -51,6 +51,8 @@ namespace mbgl { namespace gl { namespace extension { +using namespace platform; + class Debugging { public: using Callback = void (*)(GLenum source, diff --git a/src/mbgl/gl/depth_mode.cpp b/src/mbgl/gl/depth_mode.cpp index 21af75a391..fdd9cf31d1 100644 --- a/src/mbgl/gl/depth_mode.cpp +++ b/src/mbgl/gl/depth_mode.cpp @@ -1,5 +1,5 @@ #include <mbgl/gl/depth_mode.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> #include <mbgl/util/traits.hpp> namespace mbgl { diff --git a/src/mbgl/gl/gl.cpp b/src/mbgl/gl/gl.cpp deleted file mode 100644 index bd6d7b192d..0000000000 --- a/src/mbgl/gl/gl.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include <mbgl/gl/gl.hpp> -#include <mbgl/util/string.hpp> -#include <mbgl/util/util.hpp> - -namespace mbgl { -namespace gl { - -namespace { - -MBGL_CONSTEXPR const char* stringFromError(GLenum err) { - switch (err) { - case GL_INVALID_ENUM: - return "GL_INVALID_ENUM"; - - case GL_INVALID_VALUE: - return "GL_INVALID_VALUE"; - - case GL_INVALID_OPERATION: - return "GL_INVALID_OPERATION"; - - case GL_INVALID_FRAMEBUFFER_OPERATION: - return "GL_INVALID_FRAMEBUFFER_OPERATION"; - - case GL_OUT_OF_MEMORY: - return "GL_OUT_OF_MEMORY"; - -#ifdef GL_TABLE_TOO_LARGE - case GL_TABLE_TOO_LARGE: - return "GL_TABLE_TOO_LARGE"; -#endif - -#ifdef GL_STACK_OVERFLOW - case GL_STACK_OVERFLOW: - return "GL_STACK_OVERFLOW"; -#endif - -#ifdef GL_STACK_UNDERFLOW - case GL_STACK_UNDERFLOW: - return "GL_STACK_UNDERFLOW"; -#endif - -#ifdef GL_CONTEXT_LOST - case GL_CONTEXT_LOST: - return "GL_CONTEXT_LOST"; -#endif - - default: - return "GL_UNKNOWN"; - } -} - -} // namespace - -void checkError(const char* cmd, const char* file, int line) { -// fprintf(stderr, "cmd: %s\n", cmd); - GLenum err = GL_NO_ERROR; - if ((err = glGetError()) != GL_NO_ERROR) { - std::string message = std::string(cmd) + ": Error " + stringFromError(err); - - // Check for further errors - while ((err = glGetError()) != GL_NO_ERROR) { - message += ", "; - message += stringFromError(err); - } - - throw Error(message + " at " + file + ":" + util::toString(line)); - } -} - -} // namespace gl -} // namespace mbgl diff --git a/src/mbgl/gl/gl.hpp b/src/mbgl/gl/gl.hpp deleted file mode 100644 index 976b7d2f74..0000000000 --- a/src/mbgl/gl/gl.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include <mbgl/gl/gl_impl.hpp> - -#include <stdexcept> -#include <limits> - -namespace mbgl { -namespace gl { - -struct Error : std::runtime_error { - using std::runtime_error::runtime_error; -}; - -void checkError(const char *cmd, const char *file, int line); - -#ifndef NDEBUG -#define MBGL_CHECK_ERROR(cmd) ([&]() { struct __MBGL_C_E { ~__MBGL_C_E() noexcept(false) { ::mbgl::gl::checkError(#cmd, __FILE__, __LINE__); } } __MBGL_C_E; return cmd; }()) -#else -#define MBGL_CHECK_ERROR(cmd) (cmd) -#endif - -} // namespace gl -} // namespace mbgl diff --git a/src/mbgl/gl/program_binary_extension.hpp b/src/mbgl/gl/program_binary_extension.hpp index a4aa1eeefc..b14876728b 100644 --- a/src/mbgl/gl/program_binary_extension.hpp +++ b/src/mbgl/gl/program_binary_extension.hpp @@ -2,7 +2,7 @@ #include <mbgl/gl/features.hpp> #include <mbgl/gl/extension.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> #if MBGL_HAS_BINARY_PROGRAMS diff --git a/src/mbgl/gl/stencil_mode.cpp b/src/mbgl/gl/stencil_mode.cpp index 6858d6d106..fc6f3076dc 100644 --- a/src/mbgl/gl/stencil_mode.cpp +++ b/src/mbgl/gl/stencil_mode.cpp @@ -1,5 +1,5 @@ #include <mbgl/gl/stencil_mode.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> #include <mbgl/util/traits.hpp> namespace mbgl { diff --git a/src/mbgl/gl/uniform.cpp b/src/mbgl/gl/uniform.cpp index 3d8a8d53d9..e6c77be50b 100644 --- a/src/mbgl/gl/uniform.cpp +++ b/src/mbgl/gl/uniform.cpp @@ -1,5 +1,6 @@ #include <mbgl/gl/uniform.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> +#include <mbgl/platform/gl_functions.hpp> #include <mbgl/util/color.hpp> #include <mbgl/util/size.hpp> #include <mbgl/util/convert.hpp> @@ -9,6 +10,8 @@ namespace mbgl { namespace gl { +using namespace platform; + UniformLocation uniformLocation(ProgramID id, const char* name) { return MBGL_CHECK_ERROR(glGetUniformLocation(id, name)); } @@ -101,8 +104,7 @@ ActiveUniforms activeUniforms(ProgramID id) { GLint size; GLenum type; for (GLint index = 0; index < count; index++) { - MBGL_CHECK_ERROR( - glGetActiveUniform(id, index, maxLength, &length, &size, &type, name.get())); + MBGL_CHECK_ERROR(glGetActiveUniform(id, index, maxLength, &length, &size, &type, name.get())); active.emplace( std::string{ name.get(), static_cast<size_t>(length) }, ActiveUniform{ static_cast<size_t>(size), static_cast<UniformDataType>(type) }); diff --git a/src/mbgl/gl/value.cpp b/src/mbgl/gl/value.cpp index 581acd0358..d685e533a5 100644 --- a/src/mbgl/gl/value.cpp +++ b/src/mbgl/gl/value.cpp @@ -1,5 +1,4 @@ #include <mbgl/gl/value.hpp> -#include <mbgl/gl/gl.hpp> #include <mbgl/gl/context.hpp> #include <mbgl/gl/vertex_array_extension.hpp> @@ -7,14 +6,12 @@ namespace mbgl { namespace gl { namespace value { +using namespace platform; + const constexpr ClearDepth::Type ClearDepth::Default; void ClearDepth::Set(const Type& value) { -#if MBGL_USE_GLES2 MBGL_CHECK_ERROR(glClearDepthf(value)); -#else - MBGL_CHECK_ERROR(glClearDepth(value)); -#endif } ClearDepth::Type ClearDepth::Get() { @@ -130,11 +127,7 @@ StencilOp::Type StencilOp::Get() { const constexpr DepthRange::Type DepthRange::Default; void DepthRange::Set(const Type& value) { -#if MBGL_USE_GLES2 MBGL_CHECK_ERROR(glDepthRangef(value.min, value.max)); -#else - MBGL_CHECK_ERROR(glDepthRange(value.min, value.max)); -#endif } DepthRange::Type DepthRange::Get() { diff --git a/src/mbgl/gl/value.hpp b/src/mbgl/gl/value.hpp index 25f22aa038..8e2c995e11 100644 --- a/src/mbgl/gl/value.hpp +++ b/src/mbgl/gl/value.hpp @@ -6,6 +6,7 @@ #include <mbgl/gl/color_mode.hpp> #include <mbgl/gl/cull_face_mode.hpp> #include <mbgl/gl/attribute.hpp> +#include <mbgl/platform/gl_functions.hpp> #include <mbgl/util/color.hpp> #include <mbgl/util/size.hpp> #include <mbgl/util/range.hpp> diff --git a/src/mbgl/gl/vertex_array.cpp b/src/mbgl/gl/vertex_array.cpp index d552a8292e..0892c3b08b 100644 --- a/src/mbgl/gl/vertex_array.cpp +++ b/src/mbgl/gl/vertex_array.cpp @@ -1,6 +1,5 @@ #include <mbgl/gl/vertex_array.hpp> #include <mbgl/gl/context.hpp> -#include <mbgl/gl/gl.hpp> namespace mbgl { namespace gl { diff --git a/src/mbgl/gl/vertex_array_extension.hpp b/src/mbgl/gl/vertex_array_extension.hpp index 707a20e6f0..8c6abdc609 100644 --- a/src/mbgl/gl/vertex_array_extension.hpp +++ b/src/mbgl/gl/vertex_array_extension.hpp @@ -1,7 +1,7 @@ #pragma once #include <mbgl/gl/extension.hpp> -#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/defines.hpp> namespace mbgl { namespace gl { @@ -25,11 +25,11 @@ public: { "GL_APPLE_vertex_array_object", "glGenVertexArraysAPPLE" } })) { } - const ExtensionFunction<void(GLuint array)> bindVertexArray; + const ExtensionFunction<void(platform::GLuint array)> bindVertexArray; - const ExtensionFunction<void(GLsizei n, const GLuint* arrays)> deleteVertexArrays; + const ExtensionFunction<void(platform::GLsizei n, const platform::GLuint* arrays)> deleteVertexArrays; - const ExtensionFunction<void(GLsizei n, GLuint* arrays)> genVertexArrays; + const ExtensionFunction<void(platform::GLsizei n, platform::GLuint* arrays)> genVertexArrays; }; } // namespace extension diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp index 9e65830faf..22c1b4c5d2 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.cpp +++ b/src/mbgl/renderer/layers/render_custom_layer.cpp @@ -3,9 +3,9 @@ #include <mbgl/renderer/backend_scope.hpp> #include <mbgl/renderer/renderer_backend.hpp> #include <mbgl/renderer/bucket.hpp> +#include <mbgl/platform/gl_functions.hpp> #include <mbgl/style/layers/custom_layer_impl.hpp> #include <mbgl/map/transform_state.hpp> -#include <mbgl/gl/gl.hpp> #include <mbgl/util/mat4.hpp> namespace mbgl { @@ -15,7 +15,7 @@ using namespace style; RenderCustomLayer::RenderCustomLayer(Immutable<style::CustomLayer::Impl> _impl) : RenderLayer(std::move(_impl)), host(impl().host) { assert(BackendScope::exists()); - host->initialize(); + MBGL_CHECK_ERROR(host->initialize()); } RenderCustomLayer::~RenderCustomLayer() { @@ -23,7 +23,7 @@ RenderCustomLayer::~RenderCustomLayer() { if (contextDestroyed) { host->contextLost(); } else { - host->deinitialize(); + MBGL_CHECK_ERROR(host->deinitialize()); } } |