#pragma once #include #include namespace mln { 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; Test test; int32_t ref; uint32_t mask; StencilOpType fail; StencilOpType depthFail; StencilOpType pass; static StencilMode disabled() { return StencilMode{.test = Always(), .ref = 0, .mask = 0, .fail = StencilOpType::Keep, .depthFail = StencilOpType::Keep, .pass = StencilOpType::Keep}; } }; } // namespace gfx } // namespace mln