summaryrefslogtreecommitdiff
path: root/src/mbgl/gl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/gl')
-rw-r--r--src/mbgl/gl/context.cpp4
-rw-r--r--src/mbgl/gl/context.hpp4
-rw-r--r--src/mbgl/gl/enum.cpp60
-rw-r--r--src/mbgl/gl/program.hpp2
-rw-r--r--src/mbgl/gl/stencil_mode.cpp27
-rw-r--r--src/mbgl/gl/stencil_mode.hpp66
-rw-r--r--src/mbgl/gl/value.cpp13
-rw-r--r--src/mbgl/gl/value.hpp14
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();
};