Project

General

Profile

« Previous | Next » 

Revision 270c27bc

Added by Leszek Koltunski almost 7 years ago

Progress with Stencils in postprocessing.

View differences:

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