1 #pragma once 2 3 #include <mbgl/util/variant.hpp> 4 5 namespace mbgl { 6 namespace gl { 7 8 class StencilMode { 9 public: 10 template <uint32_t F> 11 struct SimpleTest { 12 static constexpr uint32_t func = F; 13 static constexpr uint32_t mask = 0; 14 }; 15 16 template <uint32_t F> 17 struct MaskedTest { 18 static constexpr uint32_t func = F; 19 uint32_t mask; 20 }; 21 22 using Never = SimpleTest<0x0200>; 23 using Less = MaskedTest<0x0201>; 24 using Equal = MaskedTest<0x0202>; 25 using LessEqual = MaskedTest<0x0203>; 26 using Greater = MaskedTest<0x0204>; 27 using NotEqual = MaskedTest<0x0205>; 28 using GreaterEqual = MaskedTest<0x0206>; 29 using Always = SimpleTest<0x0207>; 30 31 using Test = variant< 32 Never, 33 Less, 34 Equal, 35 LessEqual, 36 Greater, 37 NotEqual, 38 GreaterEqual, 39 Always>; 40 41 enum Op { 42 Zero = 0x0000, 43 Keep = 0x1E00, 44 Replace = 0x1E01, 45 Increment = 0x1E02, 46 Decrement = 0x1E03, 47 Invert = 0x150A, 48 IncrementWrap = 0x8507, 49 DecrementWrap = 0x8508 50 }; 51 52 Test test; 53 int32_t ref; 54 uint32_t mask; 55 56 Op fail; 57 Op depthFail; 58 Op pass; 59 disabled()60 static StencilMode disabled() { 61 return StencilMode { Always(), 0, 0, Keep, Keep, Keep }; 62 } 63 }; 64 65 } // namespace gl 66 } // namespace mbgl 67