]> git.tdb.fi Git - libs/gl.git/blob - source/core/stenciltest.h
Always set uniform array size to at least one
[libs/gl.git] / source / core / stenciltest.h
1 #ifndef MSP_GL_STENCILTEST_H_
2 #define MSP_GL_STENCILTEST_H_
3
4 #include <msp/datafile/objectloader.h>
5 #include <msp/strings/lexicalcast.h>
6 #include "predicate.h"
7
8 namespace Msp {
9 namespace GL {
10
11 enum StencilOp
12 {
13         KEEP,
14         SET_ZERO,
15         REPLACE,
16         INCR,
17         DECR,
18         INVERT,
19         INCR_WRAP,
20         DECR_WRAP
21 };
22
23 /**
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.
27 */
28 struct StencilTest
29 {
30         class Loader: public DataFile::ObjectLoader<StencilTest>
31         {
32         public:
33                 Loader(StencilTest &);
34
35         private:
36                 void compare(Predicate);
37                 void actions(StencilOp, StencilOp, StencilOp);
38         };
39
40         bool enabled = false;
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;
46 };
47
48 void operator>>(const LexicalConverter &, StencilOp &);
49 void operator<<(LexicalConverter &, StencilOp);
50
51 } // namespace GL
52 } // namespace Msp
53
54 #include "stenciltest_backend.h"
55
56 #endif