commit c14e495b0dcb6e572cffc33939b1fdee83b920f1
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Mar 29 00:36:59 2018 +0100

    SSBO: zero out the per-surface transparent fragment counter only when setting the surface as output for the first time in the frame.

diff --git a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
index 0dc0fcd..c4ff622 100644
--- a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
+++ b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
@@ -218,7 +218,8 @@ public static final int DEBUG_FPS = 1;
 
   void recreate()
     {
-    mSSBO[0] = -1;
+    mSSBO[0]   = -1;
+    mLastValue = -1;
     mSurfaceCounter.releaseAll();
     recreateSurface();
     }
@@ -227,7 +228,7 @@ public static final int DEBUG_FPS = 1;
 
   int getNewCounter()
     {
-    int value = mIntBuffer.get(BUFFERING*mSurfaceID+mLastIndex);
+    int value = mIntBuffer.get(BUFFERING*mSurfaceID+(mLastIndex==0 ? BUFFERING-1:mLastIndex-1));
 
     if( value!=mLastValue )
       {
@@ -235,10 +236,6 @@ public static final int DEBUG_FPS = 1;
       android.util.Log.d("surface", "surface id: "+mSurfaceID+" value now: "+mLastValue);
       }
 
-    mLastIndex++;
-    if( mLastIndex>=BUFFERING ) mLastIndex-=BUFFERING;
-
-    mIntBuffer.put(BUFFERING*mSurfaceID+mLastIndex,0);
     return BUFFERING*mSurfaceID + mLastIndex;
     }
 
@@ -526,6 +523,10 @@ public static final int DEBUG_FPS = 1;
       GLES31.glClearStencil(mClearStencil);
       GLES31.glClear(mClear);
       DistortedRenderState.colorDepthStencilRestore();
+
+      mLastIndex++;
+      if( mLastIndex>=BUFFERING ) mLastIndex=0;
+      mIntBuffer.put(BUFFERING*mSurfaceID+mLastIndex,0);
       }
     }
 
