#pragma once #include #include namespace mbgl { namespace gfx { class StencilMode { public: template struct SimpleTest { static constexpr StencilFunctionType func = F; static constexpr uint32_t mask = 0; }; template struct MaskedTest { static constexpr StencilFunctionType func = F; uint32_t mask; }; using Never = SimpleTest; using Less = MaskedTest; using Equal = MaskedTest; using LessEqual = MaskedTest; using Greater = MaskedTest; using NotEqual = MaskedTest; using GreaterEqual = MaskedTest; using Always = SimpleTest; 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 }; } }; template constexpr StencilFunctionType StencilMode::SimpleTest::func; template constexpr uint32_t StencilMode::SimpleTest::mask; template constexpr StencilFunctionType StencilMode::MaskedTest::func; } // namespace gfx } // namespace mbgl