1 #ifndef MSP_GL_STENCILTEST_H_
2 #define MSP_GL_STENCILTEST_H_
4 #include <msp/datafile/objectloader.h>
5 #include <msp/strings/lexicalcast.h>
11 enum StencilOp: std::uint8_t
24 Tests values in the stencil buffer against a reference. If the test fails, the
25 incoming fragment is discarded. The stencil buffer may be modified according
26 to results of the stencil test and the depth test.
30 class Loader: public DataFile::ObjectLoader<StencilTest>
33 Loader(StencilTest &);
36 void compare(Predicate);
37 void actions(StencilOp, StencilOp, StencilOp);
41 Predicate compare = ALWAYS;
42 StencilOp stencil_fail_op = KEEP;
43 StencilOp depth_fail_op = KEEP;
44 StencilOp depth_pass_op = KEEP;
45 unsigned reference = 0;
47 bool operator==(const StencilTest &) const;
48 bool operator!=(const StencilTest &s) const { return !operator==(s); }
51 inline bool StencilTest::operator==(const StencilTest &other) const
53 return enabled==other.enabled && compare==other.compare && stencil_fail_op==other.stencil_fail_op &&
54 depth_fail_op==other.depth_fail_op && depth_pass_op==other.depth_pass_op && reference==other.reference;
57 void operator>>(const LexicalConverter &, StencilOp &);
58 void operator<<(LexicalConverter &, StencilOp);
63 #include "stenciltest_backend.h"