commit 81f0078a3b21c0b7b1c4c49cf258751971f749ff
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Wed May 24 14:47:57 2017 +0100

    Switch on Stencil in Postprocessing.
    
    This is a clear win on Nexus 5X; on Nexus 4 it is debatable - faster on loads where area to be postprocessed is not much (~20% ?) of the screen; slower otherwise.

diff --git a/src/main/java/org/distorted/library/DistortedNode.java b/src/main/java/org/distorted/library/DistortedNode.java
index dc1295c..3706759 100644
--- a/src/main/java/org/distorted/library/DistortedNode.java
+++ b/src/main/java/org/distorted/library/DistortedNode.java
@@ -277,9 +277,9 @@ public class DistortedNode implements DistortedSlave
       mEffects.drawPriv(w, h, mMesh, buffer1, currTime, 0);
 
       // Mark area of our object + marginInPixels pixels around with 1s in Stencil buffer
-      //buffer2.setAsOutput();
+      buffer2.setAsOutput();
       DistortedRenderState.setUpStencilMark();
-      mEffects.drawPriv(w, h, mMesh, buffer1, currTime, effects.getHalo()*buffer1.mMipmap);
+      mEffects.drawPriv(w, h, mMesh, buffer2, currTime, effects.getHalo()*buffer2.mMipmap);
       DistortedRenderState.unsetUpStencilMark();
 
       return 1;
diff --git a/src/main/java/org/distorted/library/DistortedRenderState.java b/src/main/java/org/distorted/library/DistortedRenderState.java
index ede3a1e..28df641 100644
--- a/src/main/java/org/distorted/library/DistortedRenderState.java
+++ b/src/main/java/org/distorted/library/DistortedRenderState.java
@@ -143,29 +143,6 @@ class DistortedRenderState
       }
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  static void switchOffDepthWriting()
-    {
-    if( cState.depthMask!=0 )
-      {
-      sState.depthMask = cState.depthMask;
-      cState.depthMask = 0;
-      GLES30.glDepthMask(false);
-      }
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  static void restoreDepthWriting()
-    {
-    if( sState.depthMask!=cState.depthMask )
-      {
-      cState.depthMask = sState.depthMask;
-      GLES30.glDepthMask(cState.depthMask==1);
-      }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   static void switchOffDrawing()
@@ -300,14 +277,24 @@ class DistortedRenderState
       cState.stencilFuncMask = STENCIL_MASK;
       GLES30.glStencilFunc(cState.stencilFuncFunc,cState.stencilFuncRef,cState.stencilFuncMask);
       }
-
-    // TODO: Debatable
     if( cState.stencilMask!= 0x00 )
       {
       sState.stencilMask = cState.stencilMask;
       cState.stencilMask = 0x00;
       GLES30.glStencilMask(cState.stencilMask);
       }
+     if( cState.depthMask!=0 )
+      {
+      sState.depthMask = cState.depthMask;
+      cState.depthMask = 0;
+      GLES30.glDepthMask(false);
+      }
+    if( cState.depthTest!=0 )
+      {
+      sState.depthTest = cState.depthTest;
+      cState.depthTest = 0;
+      GLES30.glDisable(GLES30.GL_DEPTH_TEST);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -327,7 +314,6 @@ class DistortedRenderState
         GLES30.glEnable(GLES30.GL_STENCIL_TEST);
         }
       }
-
     if( sState.stencilFuncFunc!=cState.stencilFuncFunc || sState.stencilFuncRef!=cState.stencilFuncRef || sState.stencilFuncMask!=cState.stencilFuncMask )
       {
       cState.stencilFuncFunc = sState.stencilFuncFunc;
@@ -335,12 +321,29 @@ class DistortedRenderState
       cState.stencilFuncMask = sState.stencilFuncMask;
       GLES30.glStencilFunc(cState.stencilFuncFunc,cState.stencilFuncRef,cState.stencilFuncMask);
       }
-
     if( sState.stencilMask!=cState.stencilMask )
       {
       cState.stencilMask = sState.stencilMask;
       GLES30.glStencilMask(cState.stencilMask);
       }
+    if( sState.depthMask!=cState.depthMask )
+      {
+      cState.depthMask = sState.depthMask;
+      GLES30.glDepthMask(cState.depthMask==1);
+      }
+    if( sState.depthTest!=cState.depthTest )
+      {
+      cState.depthTest = sState.depthTest;
+
+      if (cState.depthTest == 0)
+        {
+        GLES30.glDisable(GLES30.GL_DEPTH_TEST);
+        }
+      else
+        {
+        GLES30.glEnable(GLES30.GL_DEPTH_TEST);
+        }
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/library/EffectQueuePostprocess.java b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
index dcf2912..23ec87f 100644
--- a/src/main/java/org/distorted/library/EffectQueuePostprocess.java
+++ b/src/main/java/org/distorted/library/EffectQueuePostprocess.java
@@ -302,17 +302,15 @@ class EffectQueuePostprocess extends EffectQueue
       GLES30.glVertexAttribPointer(mBlur1Program.mAttribute[0], POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadPositions);
       GLES30.glVertexAttribPointer(mBlur1Program.mAttribute[1], TEX_DATA_SIZE, GLES30.GL_FLOAT, false, 0, mQuadTexture);
 
-      //DistortedRenderState.switchOffDepthWriting();
-      //DistortedRenderState.useStencilMark();
+      DistortedRenderState.useStencilMark();
       GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
-      //DistortedRenderState.unuseStencilMark();
-      //DistortedRenderState.restoreDepthWriting();
+      DistortedRenderState.unuseStencilMark();
 
       // vertical blur
       GLES30.glViewport(0, 0, (int)w2, (int)h2);
       mBlur2Program.useProgram();
       buffer2.setAsInput();
-      buffer1.setAsDepth();
+      buffer2.setAsDepth();
       surface.setAsOutput(time);
 
       GLES30.glUniform1fv( mWeights2H, radius+1, weightsCache,offset);
