summaryrefslogtreecommitdiff
path: root/src/mbgl/gfx/stencil_mode.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/gfx/stencil_mode.hpp')
-rw-r--r--src/mbgl/gfx/stencil_mode.hpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/mbgl/gfx/stencil_mode.hpp b/src/mbgl/gfx/stencil_mode.hpp
new file mode 100644
index 0000000000..3ba2687b8c
--- /dev/null
+++ b/src/mbgl/gfx/stencil_mode.hpp
@@ -0,0 +1,56 @@
+#pragma once
+
+#include <mbgl/gfx/types.hpp>
+#include <mbgl/util/variant.hpp>
+
+namespace mbgl {
+namespace gfx {
+
+class StencilMode {
+public:
+ template <StencilFunctionType F>
+ struct SimpleTest {
+ static constexpr StencilFunctionType func = F;
+ static constexpr uint32_t mask = 0;
+ };
+
+ template <StencilFunctionType F>
+ struct MaskedTest {
+ static constexpr StencilFunctionType func = F;
+ uint32_t mask;
+ };
+
+ using Never = SimpleTest<StencilFunctionType::Never>;
+ using Less = MaskedTest<StencilFunctionType::Less>;
+ using Equal = MaskedTest<StencilFunctionType::Equal>;
+ using LessEqual = MaskedTest<StencilFunctionType::LessEqual>;
+ using Greater = MaskedTest<StencilFunctionType::Greater>;
+ using NotEqual = MaskedTest<StencilFunctionType::NotEqual>;
+ using GreaterEqual = MaskedTest<StencilFunctionType::GreaterEqual>;
+ using Always = SimpleTest<StencilFunctionType::Always>;
+
+ using Test = variant<
+ Never,
+ Less,
+ Equal,
+ LessEqual,
+ Greater,
+ NotEqual,
+ GreaterEqual,
+ Always>;
+
+ Test test;
+ int32_t ref;
+ uint32_t mask;
+
+ StencilOpType fail;
+ StencilOpType depthFail;
+ StencilOpType pass;
+
+ static StencilMode disabled() {
+ return StencilMode { Always(), 0, 0, StencilOpType::Keep, StencilOpType::Keep, StencilOpType::Keep };
+ }
+};
+
+} // namespace gfx
+} // namespace mbgl