commit 5c83f4b4216fc4cb2aef2ae24b99fa52b2c3ddf4
Author: leszek <leszek@koltunski.pl>
Date:   Mon May 22 00:08:56 2017 +0100

    Progress with Stencil in Postprocessing: stencil during the 1st stage postprocess (buffer1->buffer2) works now, provided quality is HIGHEST.
    (lower quality --> render errors, looks like Stencil is not set up correctly then)

diff --git a/src/main/java/org/distorted/library/DistortedFramebuffer.java b/src/main/java/org/distorted/library/DistortedFramebuffer.java
index ff42466..a6bbde2 100644
--- a/src/main/java/org/distorted/library/DistortedFramebuffer.java
+++ b/src/main/java/org/distorted/library/DistortedFramebuffer.java
@@ -246,19 +246,11 @@ public class DistortedFramebuffer extends DistortedOutputSurface implements Dist
       if( depthStencil!= NO_DEPTH_NO_STENCIL && mDepthStencilCreated==DONT_CREATE )
         {
         mDepthStencilCreated = NOT_CREATED_YET;
-
-        if( mBuffer1[0]!=null )
-          for(int i=0; i<EffectQuality.LENGTH; i++) mBuffer1[i].enableDepthStencil(depthStencil);
-
         markForCreation();
         }
       if( depthStencil== NO_DEPTH_NO_STENCIL && mDepthStencilCreated!=DONT_CREATE )
         {
         mDepthStencilCreated = DONT_CREATE;
-
-        if( mBuffer1[0]!=null )
-          for(int i=0; i<EffectQuality.LENGTH; i++) mBuffer1[i].enableDepthStencil(depthStencil);
-
         markForCreation();
         }
       }
diff --git a/src/main/java/org/distorted/library/DistortedNode.java b/src/main/java/org/distorted/library/DistortedNode.java
index 0a71838..ef79d12 100644
--- a/src/main/java/org/distorted/library/DistortedNode.java
+++ b/src/main/java/org/distorted/library/DistortedNode.java
@@ -259,21 +259,26 @@ public class DistortedNode implements DistortedSlave
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  int markStencilAndDraw(long currTime, DistortedOutputSurface surface, float marginInPixels)
+  int markStencilAndDraw(long currTime, DistortedOutputSurface surface, int quality, float marginInPixels)
     {
     DistortedInputSurface input = mNumChildren[0]==0 ? mSurface : mData.mFBO;
 
     if( input.setAsInput() )
       {
-      surface.setAsOutput(currTime);
+      DistortedFramebuffer buffer1 = surface.mBuffer1[quality];
+      DistortedFramebuffer buffer2 = surface.mBuffer2[quality];
+      float w = mSurface.getWidth() /2.0f;
+      float h = mSurface.getHeight()/2.0f;
 
       // Mark area of our object + marginInPixels pixels around with 1s in Stencil buffer
+      buffer2.setAsOutput(currTime);
       DistortedRenderState.setUpStencilMark();
-      mEffects.drawPriv(mSurface.getWidth()/2.0f, mSurface.getHeight()/2.0f, mMesh, surface, currTime, marginInPixels);
+      mEffects.drawPriv(w, h, mMesh, buffer2, currTime, marginInPixels);
 
       // Actually draw our object.
+      buffer1.setAsOutput(currTime);
       mState.apply();
-      mEffects.drawPriv(mSurface.getWidth()/2.0f, mSurface.getHeight()/2.0f, mMesh, surface, currTime, 0);
+      mEffects.drawPriv(w, h, mMesh, buffer1, currTime, 0);
       return 1;
       }
     return 0;
diff --git a/src/main/java/org/distorted/library/DistortedOutputSurface.java b/src/main/java/org/distorted/library/DistortedOutputSurface.java
index bacfb35..31adf46 100644
--- a/src/main/java/org/distorted/library/DistortedOutputSurface.java
+++ b/src/main/java/org/distorted/library/DistortedOutputSurface.java
@@ -191,15 +191,15 @@ abstract class DistortedOutputSurface extends DistortedSurface implements Distor
 
           for(int j=0; j<EffectQuality.LENGTH; j++)
             {
-            mBuffer1[j] = new DistortedFramebuffer(mDepthStencil      ,TYPE_SYST, (int)(mWidth*mipmap), (int)(mHeight*mipmap) );
-            mBuffer2[j] = new DistortedFramebuffer(NO_DEPTH_NO_STENCIL,TYPE_SYST, (int)(mWidth*mipmap), (int)(mHeight*mipmap) );
+            mBuffer1[j] = new DistortedFramebuffer(BOTH_DEPTH_STENCIL,TYPE_SYST, (int)(mWidth*mipmap), (int)(mHeight*mipmap) );
+            mBuffer2[j] = new DistortedFramebuffer(BOTH_DEPTH_STENCIL,TYPE_SYST, (int)(mWidth*mipmap), (int)(mHeight*mipmap) );
             mBuffer1[j].mMipmap = mipmap;
             mipmap *= EffectQuality.MULTIPLIER;
             }
           DistortedObject.toDo(); // create the FBOs immediately. This is safe as we must be holding the OpenGL context now.
           }
 
-        numRenders += child.markStencilAndDraw(time,mBuffer1[currP.getQuality()],50);
+        numRenders += child.markStencilAndDraw(time,this,currP.getQuality(),50);
 
         if( i==num-1 )
           {
diff --git a/src/main/java/org/distorted/library/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
index a508420..b86211e 100644
--- a/src/main/java/org/distorted/library/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
@@ -318,7 +318,7 @@ class EffectQueuePostprocess extends EffectQueue
       GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
 
       // after each postprocess, clear the STENCIL
-      buffer1.setAsOutput(time);
+      buffer2.setAsOutput(time);
       GLES30.glClear(GLES30.GL_STENCIL_BUFFER_BIT);
       }
 
