diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-02-04 16:59:59 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-02-08 12:50:00 +0100 |
commit | e74987b07fac1c2e39ced47e2401436fb01b2a1c (patch) | |
tree | 27abb7086bd510aadd63a4a6327f82fbbcb52a36 /src/mbgl/renderer | |
parent | 5c3b01ffcfa6f10473d9eb54bd025a2276744a90 (diff) | |
download | qtlocation-mapboxgl-e74987b07fac1c2e39ced47e2401436fb01b2a1c.tar.gz |
[core] move GL value objects from gl_config.hpp to gl_values.hpp
Also removes duplicate code from gl_helper.hpp by reusing the GL values that we already have anyway.
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/gl_config.cpp | 24 | ||||
-rw-r--r-- | src/mbgl/renderer/gl_config.hpp | 330 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.hpp | 2 |
3 files changed, 1 insertions, 355 deletions
diff --git a/src/mbgl/renderer/gl_config.cpp b/src/mbgl/renderer/gl_config.cpp deleted file mode 100644 index 4160ae100e..0000000000 --- a/src/mbgl/renderer/gl_config.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "gl_config.hpp" - -namespace mbgl { -namespace gl { - -const StencilFunc::Type StencilFunc::Default = { GL_ALWAYS, 0, ~0u }; -const StencilMask::Type StencilMask::Default = ~0u; -const StencilTest::Type StencilTest::Default = GL_FALSE; -const StencilOp::Type StencilOp::Default = { GL_KEEP, GL_KEEP, GL_REPLACE }; -const DepthRange::Type DepthRange::Default = { 0, 1 }; -const DepthMask::Type DepthMask::Default = GL_TRUE; -const DepthTest::Type DepthTest::Default = GL_FALSE; -const DepthFunc::Type DepthFunc::Default = GL_LEQUAL; -const Blend::Type Blend::Default = GL_TRUE; -const BlendFunc::Type BlendFunc::Default = { GL_ONE, GL_ONE_MINUS_SRC_ALPHA }; -const ColorMask::Type ColorMask::Default = { GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE }; -const ClearDepth::Type ClearDepth::Default = 1; -const ClearColor::Type ClearColor::Default = { 0, 0, 0, 0 }; -const ClearStencil::Type ClearStencil::Default = 0; -const Program::Type Program::Default = 0; -const LineWidth::Type LineWidth::Default = 1; - -} // namespace gl -} // namespace mbgl diff --git a/src/mbgl/renderer/gl_config.hpp b/src/mbgl/renderer/gl_config.hpp deleted file mode 100644 index 4ab1dbb268..0000000000 --- a/src/mbgl/renderer/gl_config.hpp +++ /dev/null @@ -1,330 +0,0 @@ -#ifndef MBGL_RENDERER_GL_CONFIG -#define MBGL_RENDERER_GL_CONFIG - -#include <cstdint> -#include <tuple> -#include <array> - -#include <mbgl/gl/gl.hpp> - -namespace mbgl { -namespace gl { - -template <typename T> -class Value { -public: - inline void operator=(const typename T::Type& value) { - if (dirty || current != value) { - dirty = false; - current = value; - T::Set(current); - } - } - - inline void reset() { - dirty = true; - current = T::Default; - T::Set(current); - } - - inline void setDirty() { - dirty = true; - } - -private: - typename T::Type current = T::Default; - bool dirty = false; -}; - -struct ClearDepth { - using Type = GLfloat; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glClearDepth(value)); - } - inline static Type Get() { - Type clearDepth; - MBGL_CHECK_ERROR(glGetFloatv(GL_DEPTH_CLEAR_VALUE, &clearDepth)); - return clearDepth; - } -}; - -struct ClearColor { - struct Type { GLfloat r, g, b, a; }; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glClearColor(value.r, value.g, value.b, value.a)); - } - inline static Type Get() { - GLfloat floats[4]; - MBGL_CHECK_ERROR(glGetFloatv(GL_COLOR_CLEAR_VALUE, floats)); - return { floats[0], floats[1], floats[2], floats[3] }; - } -}; - -inline bool operator!=(const ClearColor::Type& a, const ClearColor::Type& b) { - return a.r != b.r || a.g != b.g || a.b != b.b || a.a != b.a; -} - -struct ClearStencil { - using Type = GLint; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glClearStencil(value)); - } - inline static Type Get() { - Type clearStencil; - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_CLEAR_VALUE, &clearStencil)); - return clearStencil; - } -}; - -struct StencilMask { - using Type = GLuint; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glStencilMask(value)); - } - inline static Type Get() { - GLint stencilMask; - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_WRITEMASK, &stencilMask)); - return stencilMask; - } -}; - -struct DepthMask { - using Type = GLboolean; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glDepthMask(value)); - } - inline static Type Get() { - Type depthMask; - MBGL_CHECK_ERROR(glGetBooleanv(GL_DEPTH_WRITEMASK, &depthMask)); - return depthMask; - } -}; - -struct ColorMask { - struct Type { bool r, g, b, a; }; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glColorMask(value.r, value.g, value.b, value.a)); - } - inline static Type Get() { - GLboolean bools[4]; - MBGL_CHECK_ERROR(glGetBooleanv(GL_COLOR_WRITEMASK, bools)); - return { static_cast<bool>(bools[0]), static_cast<bool>(bools[1]), - static_cast<bool>(bools[2]), static_cast<bool>(bools[3]) }; - } -}; - -inline bool operator!=(const ColorMask::Type& a, const ColorMask::Type& b) { - return a.r != b.r || a.g != b.g || a.b != b.b || a.a != b.a; -} - -struct StencilFunc { - struct Type { GLenum func; GLint ref; GLuint mask; }; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glStencilFunc(value.func, value.ref, value.mask)); - } - inline static Type Get() { - GLint func, ref, mask; - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_FUNC, &func)); - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_REF, &ref)); - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_VALUE_MASK, &mask)); - return { static_cast<GLenum>(func), ref, static_cast<GLuint>(mask) }; - } -}; - -inline bool operator!=(const StencilFunc::Type& a, const StencilFunc::Type& b) { - return a.func != b.func || a.ref != b.ref || a.mask != b.mask; -} - -struct StencilTest { - using Type = bool; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(value ? glEnable(GL_STENCIL_TEST) : glDisable(GL_STENCIL_TEST)); - } - inline static Type Get() { - Type stencilTest; - MBGL_CHECK_ERROR(stencilTest = glIsEnabled(GL_STENCIL_TEST)); - return stencilTest; - } -}; - -struct StencilOp { - struct Type { GLenum sfail, dpfail, dppass; }; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glStencilOp(value.sfail, value.dpfail, value.dppass)); - } - inline static Type Get() { - GLint sfail, dpfail, dppass; - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_FAIL, &sfail)); - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &dpfail)); - MBGL_CHECK_ERROR(glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &dppass)); - return { static_cast<GLenum>(sfail), static_cast<GLenum>(dpfail), static_cast<GLuint>(dppass) }; - } -}; - -struct DepthRange { - struct Type { GLfloat near, far; }; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glDepthRange(value.near, value.far)); - } - inline static Type Get() { - GLfloat floats[2]; - MBGL_CHECK_ERROR(glGetFloatv(GL_DEPTH_RANGE, floats)); - return { floats[0], floats[1] }; - } -}; - -inline bool operator!=(const DepthRange::Type& a, const DepthRange::Type& b) { - return a.near != b.near || a.far != b.far; -} - -struct DepthTest { - using Type = bool; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(value ? glEnable(GL_DEPTH_TEST) : glDisable(GL_DEPTH_TEST)); - } - inline static Type Get() { - Type depthTest; - MBGL_CHECK_ERROR(depthTest = glIsEnabled(GL_DEPTH_TEST)); - return depthTest; - } -}; - -struct DepthFunc { - using Type = GLenum; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glDepthFunc(value)); - } - inline static Type Get() { - GLint depthFunc; - MBGL_CHECK_ERROR(glGetIntegerv(GL_DEPTH_FUNC, &depthFunc)); - return depthFunc; - } -}; - -struct Blend { - using Type = bool; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(value ? glEnable(GL_BLEND) : glDisable(GL_BLEND)); - } - inline static Type Get() { - Type blend; - MBGL_CHECK_ERROR(blend = glIsEnabled(GL_BLEND)); - return blend; - } -}; - -struct BlendFunc { - struct Type { GLenum sfactor, dfactor; }; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glBlendFunc(value.sfactor, value.dfactor)); - } - inline static Type Get() { - GLint sfactor, dfactor; - MBGL_CHECK_ERROR(glGetIntegerv(GL_BLEND_SRC_ALPHA, &sfactor)); - MBGL_CHECK_ERROR(glGetIntegerv(GL_BLEND_DST_ALPHA, &dfactor)); - return { static_cast<GLenum>(sfactor), static_cast<GLenum>(dfactor) }; - } -}; - -struct Program { - using Type = GLuint; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glUseProgram(value)); - } - inline static Type Get() { - GLint program; - MBGL_CHECK_ERROR(glGetIntegerv(GL_CURRENT_PROGRAM, &program)); - return program; - } -}; - -struct LineWidth { - using Type = GLfloat; - static const Type Default; - inline static void Set(const Type& value) { - MBGL_CHECK_ERROR(glLineWidth(value)); - } - inline static Type Get() { - Type lineWidth; - MBGL_CHECK_ERROR(glGetFloatv(GL_LINE_WIDTH, &lineWidth)); - return lineWidth; - } -}; - -class Config { -public: - void reset() { - stencilFunc.reset(); - stencilMask.reset(); - stencilTest.reset(); - stencilOp.reset(); - depthRange.reset(); - depthMask.reset(); - depthTest.reset(); - depthFunc.reset(); - blend.reset(); - blendFunc.reset(); - colorMask.reset(); - clearDepth.reset(); - clearColor.reset(); - clearStencil.reset(); - program.reset(); - lineWidth.reset(); - } - - void setDirty() { - stencilFunc.setDirty(); - stencilMask.setDirty(); - stencilTest.setDirty(); - stencilOp.setDirty(); - depthRange.setDirty(); - depthMask.setDirty(); - depthTest.setDirty(); - depthFunc.setDirty(); - blend.setDirty(); - blendFunc.setDirty(); - colorMask.setDirty(); - clearDepth.setDirty(); - clearColor.setDirty(); - clearStencil.setDirty(); - program.setDirty(); - lineWidth.setDirty(); - } - - Value<StencilFunc> stencilFunc; - Value<StencilMask> stencilMask; - Value<StencilTest> stencilTest; - Value<StencilOp> stencilOp; - Value<DepthRange> depthRange; - Value<DepthMask> depthMask; - Value<DepthTest> depthTest; - Value<DepthFunc> depthFunc; - Value<Blend> blend; - Value<BlendFunc> blendFunc; - Value<ColorMask> colorMask; - Value<ClearDepth> clearDepth; - Value<ClearColor> clearColor; - Value<ClearStencil> clearStencil; - Value<Program> program; - Value<LineWidth> lineWidth; -}; - -} // namespace gl -} // namespace mbgl - -#endif // MBGL_RENDERER_GL_CONFIG diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp index 3940978835..e2949681cd 100644 --- a/src/mbgl/renderer/painter.hpp +++ b/src/mbgl/renderer/painter.hpp @@ -10,7 +10,7 @@ #include <mbgl/geometry/vao.hpp> #include <mbgl/geometry/static_vertex_buffer.hpp> -#include <mbgl/renderer/gl_config.hpp> +#include <mbgl/gl/gl_config.hpp> #include <mbgl/style/types.hpp> |