Revision 270c27bc
Added by Leszek Koltunski almost 7 years ago
src/main/java/org/distorted/library/DistortedRenderState.java | ||
---|---|---|
56 | 56 |
private int mBlendSrc, mBlendDst; // |
57 | 57 |
private int mClear; // This does not have a 'static' compatriot |
58 | 58 |
|
59 |
private static int rStencilTest; // |
|
60 |
private static int rStencilFuncFunc; // |
|
61 |
private static int rStencilFuncRef; // Remember values of Stencil. |
|
62 |
private static int rStencilFuncMask; // |
|
63 |
private static int rStencilMask; // |
|
64 |
|
|
59 | 65 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
60 | 66 |
// default: color writes on, depth test and writes on, blending on, stencil off. |
61 | 67 |
|
... | ... | |
153 | 159 |
GLES30.glDisable(GLES30.GL_SCISSOR_TEST); |
154 | 160 |
} |
155 | 161 |
|
162 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
163 |
|
|
164 |
static void setUpStencilMark() |
|
165 |
{ |
|
166 |
if( sStencilTest!=1 ) |
|
167 |
{ |
|
168 |
sStencilTest = 1; |
|
169 |
GLES30.glEnable(GLES30.GL_STENCIL_TEST); |
|
170 |
} |
|
171 |
if( sStencilFuncFunc!=GLES30.GL_ALWAYS || sStencilFuncRef!=1 || sStencilFuncMask!=STENCIL_MASK ) |
|
172 |
{ |
|
173 |
sStencilFuncFunc = GLES30.GL_ALWAYS; |
|
174 |
sStencilFuncRef = 1; |
|
175 |
sStencilFuncMask = STENCIL_MASK; |
|
176 |
GLES30.glStencilFunc(sStencilFuncFunc,sStencilFuncRef,sStencilFuncMask); |
|
177 |
} |
|
178 |
if( sStencilOpSfail!=GLES30.GL_KEEP || sStencilOpDpfail!=GLES30.GL_KEEP || sStencilOpDppass!=GLES30.GL_REPLACE ) |
|
179 |
{ |
|
180 |
sStencilOpSfail = GLES30.GL_KEEP; |
|
181 |
sStencilOpDpfail= GLES30.GL_KEEP; |
|
182 |
sStencilOpDppass= GLES30.GL_REPLACE; |
|
183 |
GLES30.glStencilOp(sStencilOpSfail,sStencilOpDpfail,sStencilOpDppass); |
|
184 |
} |
|
185 |
if( sColorMaskR!=0 || sColorMaskG!=0 || sColorMaskB!=0 || sColorMaskA!=0 ) |
|
186 |
{ |
|
187 |
sColorMaskR = 0; |
|
188 |
sColorMaskG = 0; |
|
189 |
sColorMaskB = 0; |
|
190 |
sColorMaskA = 0; |
|
191 |
GLES30.glColorMask(false,false,false,false); |
|
192 |
} |
|
193 |
if( sDepthMask!=0 ) |
|
194 |
{ |
|
195 |
sDepthMask = 0; |
|
196 |
GLES30.glDepthMask(false); |
|
197 |
} |
|
198 |
if( sStencilMask!= STENCIL_MASK ) |
|
199 |
{ |
|
200 |
sStencilMask = STENCIL_MASK; |
|
201 |
GLES30.glStencilMask(sStencilMask); |
|
202 |
} |
|
203 |
} |
|
204 |
|
|
205 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
206 |
|
|
207 |
static void useStencilMark() |
|
208 |
{ |
|
209 |
if( sStencilTest!=1 ) |
|
210 |
{ |
|
211 |
rStencilTest = sStencilTest; |
|
212 |
sStencilTest = 1; |
|
213 |
GLES30.glEnable(GLES30.GL_STENCIL_TEST); |
|
214 |
} |
|
215 |
if( sStencilFuncFunc!=GLES30.GL_EQUAL || sStencilFuncRef!=1 || sStencilFuncMask!=STENCIL_MASK ) |
|
216 |
{ |
|
217 |
rStencilFuncFunc = sStencilFuncFunc; |
|
218 |
rStencilFuncRef = sStencilFuncRef; |
|
219 |
rStencilFuncMask = sStencilFuncMask; |
|
220 |
sStencilFuncFunc = GLES30.GL_EQUAL; |
|
221 |
sStencilFuncRef = 1; |
|
222 |
sStencilFuncMask = STENCIL_MASK; |
|
223 |
GLES30.glStencilFunc(sStencilFuncFunc,sStencilFuncRef,sStencilFuncMask); |
|
224 |
} |
|
225 |
|
|
226 |
// TODO: Debatable |
|
227 |
if( sStencilMask!= 0x00 ) |
|
228 |
{ |
|
229 |
rStencilMask = sStencilMask; |
|
230 |
sStencilMask = 0x00; |
|
231 |
GLES30.glStencilMask(sStencilMask); |
|
232 |
} |
|
233 |
} |
|
234 |
|
|
235 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
236 |
|
|
237 |
static void restoreStencilMark() |
|
238 |
{ |
|
239 |
if( rStencilTest!=sStencilTest ) |
|
240 |
{ |
|
241 |
sStencilTest = rStencilTest; |
|
242 |
|
|
243 |
if (sStencilTest == 0) |
|
244 |
{ |
|
245 |
GLES30.glDisable(GLES30.GL_STENCIL_TEST); |
|
246 |
} |
|
247 |
else |
|
248 |
{ |
|
249 |
GLES30.glEnable(GLES30.GL_STENCIL_TEST); |
|
250 |
} |
|
251 |
} |
|
252 |
|
|
253 |
if( rStencilFuncFunc!=sStencilFuncFunc || rStencilFuncRef!=sStencilFuncRef || rStencilFuncMask!=sStencilFuncMask ) |
|
254 |
{ |
|
255 |
sStencilFuncFunc = rStencilFuncFunc; |
|
256 |
sStencilFuncRef = rStencilFuncRef ; |
|
257 |
sStencilFuncMask = rStencilFuncMask; |
|
258 |
GLES30.glStencilFunc(sStencilFuncFunc,sStencilFuncRef,sStencilFuncMask); |
|
259 |
} |
|
260 |
|
|
261 |
if( rStencilMask!=sStencilMask ) |
|
262 |
{ |
|
263 |
sStencilMask = rStencilMask; |
|
264 |
GLES30.glStencilMask(sStencilMask); |
|
265 |
} |
|
266 |
} |
|
267 |
|
|
156 | 268 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
157 | 269 |
|
158 | 270 |
void apply() |
Also available in: Unified diff
Progress with Stencils in postprocessing.