OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Stencil.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSG_STENCIL
15 #define OSG_STENCIL 1
16 
17 #include <osg/StateAttribute>
18 
19 namespace osg {
20 
21 #ifndef GL_INCR_WRAP
22 #define GL_INCR_WRAP 0x8507
23 #define GL_DECR_WRAP 0x8508
24 #endif
25 
26 
40 {
41  public :
42 
43 
44  Stencil();
45 
47  Stencil(const Stencil& stencil,const CopyOp& copyop=CopyOp::SHALLOW_COPY):
48  StateAttribute(stencil,copyop),
49  _func(stencil._func),
50  _funcRef(stencil._funcRef),
51  _funcMask(stencil._funcMask),
52  _sfail(stencil._sfail),
53  _zfail(stencil._zfail),
54  _zpass(stencil._zpass),
55  _writeMask(stencil._writeMask) {}
56 
57 
58  META_StateAttribute(osg, Stencil, STENCIL);
59 
61  virtual int compare(const StateAttribute& sa) const
62  {
63  // check the types are equal and then create the rhs variable
64  // used by the COMPARE_StateAttribute_Parameter macros below.
66 
67  // compare each parameter in turn against the rhs.
75 
76  return 0; // passed all the above comparison macros, must be equal.
77  }
78 
79  virtual bool getModeUsage(StateAttribute::ModeUsage& usage) const
80  {
81  usage.usesMode(GL_STENCIL_TEST);
82  return true;
83  }
84 
85  enum Function
86  {
87  NEVER = GL_NEVER,
88  LESS = GL_LESS,
89  EQUAL = GL_EQUAL,
90  LEQUAL = GL_LEQUAL,
91  GREATER = GL_GREATER,
92  NOTEQUAL = GL_NOTEQUAL,
93  GEQUAL = GL_GEQUAL,
94  ALWAYS = GL_ALWAYS
95  };
96 
97  inline void setFunction(Function func,int ref,unsigned int mask)
98  {
99  _func = func;
100  _funcRef = ref;
101  _funcMask = mask;
102  }
103 
104  inline void setFunction(Function func) { _func = func; }
105  inline Function getFunction() const { return _func; }
106 
107  inline void setFunctionRef(int ref) { _funcRef=ref; }
108  inline int getFunctionRef() const { return _funcRef; }
109 
110  inline void setFunctionMask(unsigned int mask) { _funcMask=mask; }
111  inline unsigned int getFunctionMask() const { return _funcMask; }
112 
113 
115  {
116  KEEP = GL_KEEP,
117  ZERO = GL_ZERO,
118  REPLACE = GL_REPLACE,
119  INCR = GL_INCR,
120  DECR = GL_DECR,
121  INVERT = GL_INVERT,
122  INCR_WRAP = GL_INCR_WRAP,
123  DECR_WRAP = GL_DECR_WRAP
124  };
125 
133  inline void setOperation(Operation sfail, Operation zfail, Operation zpass)
134  {
135  _sfail = sfail;
136  _zfail = zfail;
137  _zpass = zpass;
138  }
139 
141  inline void setStencilFailOperation(Operation sfail) { _sfail = sfail; }
142 
144  inline Operation getStencilFailOperation() const { return _sfail; }
145 
147  inline void setStencilPassAndDepthFailOperation(Operation zfail) { _zfail=zfail; }
148 
150  inline Operation getStencilPassAndDepthFailOperation() const { return _zfail; }
151 
153  inline void setStencilPassAndDepthPassOperation(Operation zpass) { _zpass=zpass; }
154 
156  inline Operation getStencilPassAndDepthPassOperation() const { return _zpass; }
157 
158 
159  inline void setWriteMask(unsigned int mask) { _writeMask = mask; }
160 
161  inline unsigned int getWriteMask() const { return _writeMask; }
162 
163 
164  virtual void apply(State& state) const;
165 
166 
167  protected:
168 
169  virtual ~Stencil();
170 
172  int _funcRef;
173  unsigned int _funcMask;
174 
178 
179  unsigned int _writeMask;
180 
181 };
182 
183 }
184 
185 #endif
#define OSG_EXPORT
Definition: Export.h:43
void setStencilPassAndDepthPassOperation(Operation zpass)
Definition: Stencil.h:153
Stencil(const Stencil &stencil, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition: Stencil.h:47
int _funcRef
Definition: Stencil.h:172
#define COMPARE_StateAttribute_Types(TYPE, rhs_attribute)
void setFunctionMask(unsigned int mask)
Definition: Stencil.h:110
void setStencilFailOperation(Operation sfail)
Definition: Stencil.h:141
Operation getStencilPassAndDepthPassOperation() const
Definition: Stencil.h:156
void setFunctionRef(int ref)
Definition: Stencil.h:107
void setWriteMask(unsigned int mask)
Definition: Stencil.h:159
Function getFunction() const
Definition: Stencil.h:105
void setStencilPassAndDepthFailOperation(Operation zfail)
Definition: Stencil.h:147
void setFunction(Function func)
Definition: Stencil.h:104
Operation getStencilPassAndDepthFailOperation() const
Definition: Stencil.h:150
unsigned int _funcMask
Definition: Stencil.h:173
virtual void usesMode(GLMode mode)=0
Operation _sfail
Definition: Stencil.h:175
Function _func
Definition: Stencil.h:171
int getFunctionRef() const
Definition: Stencil.h:108
Operation _zpass
Definition: Stencil.h:177
unsigned int getWriteMask() const
Definition: Stencil.h:161
virtual bool getModeUsage(StateAttribute::ModeUsage &usage) const
Definition: Stencil.h:79
#define GL_INCR_WRAP
Definition: Stencil.h:22
Operation getStencilFailOperation() const
Definition: Stencil.h:144
unsigned int _writeMask
Definition: Stencil.h:179
#define META_StateAttribute(library, name, type)
Definition: AlphaFunc.h:19
virtual int compare(const StateAttribute &sa) const
Definition: Stencil.h:61
unsigned int getFunctionMask() const
Definition: Stencil.h:111
#define COMPARE_StateAttribute_Parameter(parameter)
void setFunction(Function func, int ref, unsigned int mask)
Definition: Stencil.h:97
#define GL_DECR_WRAP
Definition: Stencil.h:23
Operation _zfail
Definition: Stencil.h:176
void setOperation(Operation sfail, Operation zfail, Operation zpass)
Definition: Stencil.h:133