diff options
Diffstat (limited to 'src/mbgl/gl')
-rw-r--r-- | src/mbgl/gl/context.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/gl/context.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/gl/enum.cpp | 60 | ||||
-rw-r--r-- | src/mbgl/gl/program.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/gl/stencil_mode.cpp | 27 | ||||
-rw-r--r-- | src/mbgl/gl/stencil_mode.hpp | 66 | ||||
-rw-r--r-- | src/mbgl/gl/value.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/gl/value.hpp | 14 |
8 files changed, 79 insertions, 111 deletions
diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index 1be6a32f2b..abe082f14f 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -716,8 +716,8 @@ void Context::setDepthMode(const gfx::DepthMode& depth) { } } -void Context::setStencilMode(const StencilMode& stencil) { - if (stencil.test.is<StencilMode::Always>() && !stencil.mask) { +void Context::setStencilMode(const gfx::StencilMode& stencil) { + if (stencil.test.is<gfx::StencilMode::Always>() && !stencil.mask) { stencilTest = false; } else { stencilTest = true; diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index e296e81452..d5e51d0adf 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -13,7 +13,7 @@ #include <mbgl/gl/types.hpp> #include <mbgl/gfx/draw_mode.hpp> #include <mbgl/gfx/depth_mode.hpp> -#include <mbgl/gl/stencil_mode.hpp> +#include <mbgl/gfx/stencil_mode.hpp> #include <mbgl/gfx/color_mode.hpp> #include <mbgl/platform/gl_functions.hpp> #include <mbgl/util/noncopyable.hpp> @@ -171,7 +171,7 @@ public: void setDrawMode(const gfx::TriangleStrip&); void setDepthMode(const gfx::DepthMode&); - void setStencilMode(const StencilMode&); + void setStencilMode(const gfx::StencilMode&); void setColorMode(const gfx::ColorMode&); void setCullFaceMode(const CullFaceMode&); diff --git a/src/mbgl/gl/enum.cpp b/src/mbgl/gl/enum.cpp index a6f251a438..ea47f2104f 100644 --- a/src/mbgl/gl/enum.cpp +++ b/src/mbgl/gl/enum.cpp @@ -123,5 +123,65 @@ platform::GLboolean Enum<gfx::DepthMaskType>::to(const gfx::DepthMaskType value) return value == gfx::DepthMaskType::ReadWrite ? GL_TRUE : GL_FALSE; } +template <> +gfx::StencilFunctionType Enum<gfx::StencilFunctionType>::from(const platform::GLint value) { + switch (value) { + case GL_NEVER: return gfx::StencilFunctionType::Never; + case GL_LESS: return gfx::StencilFunctionType::Less; + case GL_EQUAL: return gfx::StencilFunctionType::Equal; + case GL_LEQUAL: return gfx::StencilFunctionType::LessEqual; + case GL_GREATER: return gfx::StencilFunctionType::Greater; + case GL_NOTEQUAL: return gfx::StencilFunctionType::NotEqual; + case GL_GEQUAL: return gfx::StencilFunctionType::GreaterEqual; + case GL_ALWAYS: return gfx::StencilFunctionType::Always; + } + return {}; +} + +template <> +platform::GLenum Enum<gfx::StencilFunctionType>::to(const gfx::StencilFunctionType value) { + switch (value) { + case gfx::StencilFunctionType::Never: return GL_NEVER; + case gfx::StencilFunctionType::Less: return GL_LESS; + case gfx::StencilFunctionType::Equal: return GL_EQUAL; + case gfx::StencilFunctionType::LessEqual: return GL_LEQUAL; + case gfx::StencilFunctionType::Greater: return GL_GREATER; + case gfx::StencilFunctionType::NotEqual: return GL_NOTEQUAL; + case gfx::StencilFunctionType::GreaterEqual: return GL_GEQUAL; + case gfx::StencilFunctionType::Always: return GL_ALWAYS; + } + return GL_INVALID_ENUM; +} + +template <> +gfx::StencilOpType Enum<gfx::StencilOpType>::from(const platform::GLint value) { + switch (value) { + case GL_KEEP: return gfx::StencilOpType::Keep; + case GL_ZERO: return gfx::StencilOpType::Zero; + case GL_REPLACE: return gfx::StencilOpType::Replace; + case GL_INCR: return gfx::StencilOpType::Increment; + case GL_INCR_WRAP: return gfx::StencilOpType::IncrementWrap; + case GL_DECR: return gfx::StencilOpType::Decrement; + case GL_DECR_WRAP: return gfx::StencilOpType::DecrementWrap; + case GL_INVERT: return gfx::StencilOpType::Invert; + } + return {}; +} + +template <> +platform::GLenum Enum<gfx::StencilOpType>::to(const gfx::StencilOpType value) { + switch (value) { + case gfx::StencilOpType::Keep: return GL_KEEP; + case gfx::StencilOpType::Zero: return GL_ZERO; + case gfx::StencilOpType::Replace: return GL_REPLACE; + case gfx::StencilOpType::Increment: return GL_INCR; + case gfx::StencilOpType::IncrementWrap: return GL_INCR_WRAP; + case gfx::StencilOpType::Decrement: return GL_DECR; + case gfx::StencilOpType::DecrementWrap: return GL_DECR_WRAP; + case gfx::StencilOpType::Invert: return GL_INVERT; + } + return GL_INVALID_ENUM; +} + } // namespace gl } // namespace mbgl diff --git a/src/mbgl/gl/program.hpp b/src/mbgl/gl/program.hpp index de51e8dcb6..5bc7c2075b 100644 --- a/src/mbgl/gl/program.hpp +++ b/src/mbgl/gl/program.hpp @@ -116,7 +116,7 @@ public: void draw(Context& context, DrawMode drawMode, gfx::DepthMode depthMode, - StencilMode stencilMode, + gfx::StencilMode stencilMode, gfx::ColorMode colorMode, CullFaceMode cullFaceMode, const UniformValues& uniformValues, diff --git a/src/mbgl/gl/stencil_mode.cpp b/src/mbgl/gl/stencil_mode.cpp deleted file mode 100644 index fc6f3076dc..0000000000 --- a/src/mbgl/gl/stencil_mode.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include <mbgl/gl/stencil_mode.hpp> -#include <mbgl/gl/defines.hpp> -#include <mbgl/util/traits.hpp> - -namespace mbgl { -namespace gl { - -static_assert(StencilMode::Never::func == GL_NEVER, "OpenGL enum mismatch"); -static_assert(StencilMode::Less::func == GL_LESS, "OpenGL enum mismatch"); -static_assert(StencilMode::Equal::func == GL_EQUAL, "OpenGL enum mismatch"); -static_assert(StencilMode::LessEqual::func == GL_LEQUAL, "OpenGL enum mismatch"); -static_assert(StencilMode::Greater::func == GL_GREATER, "OpenGL enum mismatch"); -static_assert(StencilMode::NotEqual::func == GL_NOTEQUAL, "OpenGL enum mismatch"); -static_assert(StencilMode::GreaterEqual::func == GL_GEQUAL, "OpenGL enum mismatch"); -static_assert(StencilMode::Always::func == GL_ALWAYS, "OpenGL enum mismatch"); - -static_assert(underlying_type(StencilMode::Keep) == GL_KEEP, "OpenGL enum mismatch"); -static_assert(underlying_type(StencilMode::Zero) == GL_ZERO, "OpenGL enum mismatch"); -static_assert(underlying_type(StencilMode::Replace) == GL_REPLACE, "OpenGL enum mismatch"); -static_assert(underlying_type(StencilMode::Increment) == GL_INCR, "OpenGL enum mismatch"); -static_assert(underlying_type(StencilMode::IncrementWrap) == GL_INCR_WRAP, "OpenGL enum mismatch"); -static_assert(underlying_type(StencilMode::Decrement) == GL_DECR, "OpenGL enum mismatch"); -static_assert(underlying_type(StencilMode::DecrementWrap) == GL_DECR_WRAP, "OpenGL enum mismatch"); -static_assert(underlying_type(StencilMode::Invert) == GL_INVERT, "OpenGL enum mismatch"); - -} // namespace gl -} // namespace mbgl diff --git a/src/mbgl/gl/stencil_mode.hpp b/src/mbgl/gl/stencil_mode.hpp deleted file mode 100644 index bc959c9a73..0000000000 --- a/src/mbgl/gl/stencil_mode.hpp +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#include <mbgl/util/variant.hpp> - -namespace mbgl { -namespace gl { - -class StencilMode { -public: - template <uint32_t F> - struct SimpleTest { - static constexpr uint32_t func = F; - static constexpr uint32_t mask = 0; - }; - - template <uint32_t F> - struct MaskedTest { - static constexpr uint32_t func = F; - uint32_t mask; - }; - - using Never = SimpleTest<0x0200>; - using Less = MaskedTest<0x0201>; - using Equal = MaskedTest<0x0202>; - using LessEqual = MaskedTest<0x0203>; - using Greater = MaskedTest<0x0204>; - using NotEqual = MaskedTest<0x0205>; - using GreaterEqual = MaskedTest<0x0206>; - using Always = SimpleTest<0x0207>; - - using Test = variant< - Never, - Less, - Equal, - LessEqual, - Greater, - NotEqual, - GreaterEqual, - Always>; - - enum Op { - Zero = 0x0000, - Keep = 0x1E00, - Replace = 0x1E01, - Increment = 0x1E02, - Decrement = 0x1E03, - Invert = 0x150A, - IncrementWrap = 0x8507, - DecrementWrap = 0x8508 - }; - - Test test; - int32_t ref; - uint32_t mask; - - Op fail; - Op depthFail; - Op pass; - - static StencilMode disabled() { - return StencilMode { Always(), 0, 0, Keep, Keep, Keep }; - } -}; - -} // namespace gl -} // namespace mbgl diff --git a/src/mbgl/gl/value.cpp b/src/mbgl/gl/value.cpp index 800c39a9d6..8b46c1ae35 100644 --- a/src/mbgl/gl/value.cpp +++ b/src/mbgl/gl/value.cpp @@ -93,7 +93,7 @@ StencilFunc::Type StencilFunc::Get() { 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<uint32_t>(func), ref, static_cast<uint32_t>(mask) }; + return { Enum<gfx::StencilFunctionType>::from(func), ref, static_cast<uint32_t>(mask) }; } const constexpr StencilTest::Type StencilTest::Default; @@ -111,9 +111,9 @@ StencilTest::Type StencilTest::Get() { const constexpr StencilOp::Type StencilOp::Default; void StencilOp::Set(const Type& value) { - MBGL_CHECK_ERROR(glStencilOp(static_cast<GLenum>(value.sfail), - static_cast<GLenum>(value.dpfail), - static_cast<GLenum>(value.dppass))); + MBGL_CHECK_ERROR(glStencilOp(Enum<gfx::StencilOpType>::to(value.sfail), + Enum<gfx::StencilOpType>::to(value.dpfail), + Enum<gfx::StencilOpType>::to(value.dppass))); } StencilOp::Type StencilOp::Get() { @@ -121,8 +121,9 @@ StencilOp::Type StencilOp::Get() { 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<StencilMode::Op>(sfail), static_cast<StencilMode::Op>(dpfail), - static_cast<StencilMode::Op>(dppass) }; + return { Enum<gfx::StencilOpType>::from(sfail), + Enum<gfx::StencilOpType>::from(dpfail), + Enum<gfx::StencilOpType>::from(dppass) }; } const constexpr DepthRange::Type DepthRange::Default; diff --git a/src/mbgl/gl/value.hpp b/src/mbgl/gl/value.hpp index d7a8ddf6fe..128eff2dce 100644 --- a/src/mbgl/gl/value.hpp +++ b/src/mbgl/gl/value.hpp @@ -2,7 +2,7 @@ #include <mbgl/gl/types.hpp> #include <mbgl/gfx/depth_mode.hpp> -#include <mbgl/gl/stencil_mode.hpp> +#include <mbgl/gfx/stencil_mode.hpp> #include <mbgl/gfx/color_mode.hpp> #include <mbgl/gl/cull_face_mode.hpp> #include <mbgl/gl/attribute.hpp> @@ -62,11 +62,11 @@ struct ColorMask { struct StencilFunc { struct Type { - uint32_t func; + gfx::StencilFunctionType func; int32_t ref; uint32_t mask; }; - static const constexpr Type Default = { StencilMode::Always::func, 0, ~0u }; + static const constexpr Type Default = { gfx::StencilMode::Always::func, 0, ~0u }; static void Set(const Type&); static Type Get(); }; @@ -84,11 +84,11 @@ struct StencilTest { struct StencilOp { struct Type { - StencilMode::Op sfail; - StencilMode::Op dpfail; - StencilMode::Op dppass; + gfx::StencilOpType sfail; + gfx::StencilOpType dpfail; + gfx::StencilOpType dppass; }; - static const constexpr Type Default = { StencilMode::Keep, StencilMode::Keep, StencilMode::Keep }; + static const constexpr Type Default = { gfx::StencilOpType::Keep, gfx::StencilOpType::Keep, gfx::StencilOpType::Keep }; static void Set(const Type&); static Type Get(); }; |