commit 8a57da611d55f408d22a5b0783c7a25b6fd03a5e
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Mar 28 22:14:46 2018 +0100

    SSBO: counting of transparent fragments more or less works now. Still the counters are zeroed out in the wrong place - every time we start rendering something to a given Surface, rather than once per frame.

diff --git a/src/main/java/org/distorted/library/main/DistortedEffects.java b/src/main/java/org/distorted/library/main/DistortedEffects.java
index da5ae76..a9c0fe5 100644
--- a/src/main/java/org/distorted/library/main/DistortedEffects.java
+++ b/src/main/java/org/distorted/library/main/DistortedEffects.java
@@ -274,8 +274,6 @@ public class DistortedEffects
     {
     float halfZ = halfW*mesh.zFactor;
 
-    android.util.Log.d("surface", "SurfaceID "+ surface.getID()+" transparent fragments: "+ surface.returnOldCounter() );
-
     mM.compute(currTime);
     mV.compute(currTime,halfW,halfH,halfZ);
     mF.compute(currTime,halfW,halfH);
@@ -285,7 +283,7 @@ public class DistortedEffects
 
     mMainProgram.useProgram();
     GLES31.glUniform1i(mMainTextureH, 0);
-    GLES31.glUniform1i(mCountIndexH, surface.resetNewCounter() );
+    GLES31.glUniform1i(mCountIndexH, surface.getNewCounter() );
 
     if( Distorted.GLSL >= 300 )
       {
diff --git a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
index 130fc8a..6ca8bb9 100644
--- a/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
+++ b/src/main/java/org/distorted/library/main/DistortedOutputSurface.java
@@ -114,6 +114,7 @@ public static final int DEBUG_FPS = 1;
 
   private int mSurfaceID;
   private int mLastIndex;
+  private int mLastValue =-1;
   // end section
   ////////////////////////////////////////////////////////////////////////////////
 
@@ -209,30 +210,21 @@ public static final int DEBUG_FPS = 1;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void debugSSBO()
+  int getNewCounter()
     {
-    android.util.Log.d("SSBO", mIntBuffer.get(0)+" "+mIntBuffer.get(1)+" "
-        +mIntBuffer.get(2)+" "+mIntBuffer.get(3) );
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  int resetNewCounter()
-    {
-    mIntBuffer.put(BUFFERING*mSurfaceID+mLastIndex,0);
-    return BUFFERING*mSurfaceID + mLastIndex;
-    }
+    int value = mIntBuffer.get(BUFFERING*mSurfaceID+mLastIndex);
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  int returnOldCounter()
-    {
-    int ret = mIntBuffer.get(BUFFERING*mSurfaceID+mLastIndex);
+    if( value!=mLastValue )
+      {
+      mLastValue = value;
+      android.util.Log.d("surface", "surface id: "+mSurfaceID+" value now: "+mLastValue);
+      }
 
     mLastIndex++;
     if( mLastIndex>=BUFFERING ) mLastIndex-=BUFFERING;
 
-    return ret;
+    mIntBuffer.put(BUFFERING*mSurfaceID+mLastIndex,0);
+    return BUFFERING*mSurfaceID + mLastIndex;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/res/raw/main_fragment_shader.glsl b/src/main/res/raw/main_fragment_shader.glsl
index 860a568..15638d5 100644
--- a/src/main/res/raw/main_fragment_shader.glsl
+++ b/src/main/res/raw/main_fragment_shader.glsl
@@ -73,7 +73,7 @@ void main()
     }
 #endif
 
-  ssbocount[u_currentIndex]= 27 + u_currentIndex;
+  if( color.a < 1.0 ) ssbocount[u_currentIndex]++;
 
   FRAG_COLOR = vec4(color.rgb * (1.0 + 7.0*v_Normal.z) * 0.125, color.a);
   }
\ No newline at end of file
