commit 23ee8a18605305c91aa20aba92f2aca6cd95e270
Author: leszek <leszek@koltunski.pl>
Date:   Tue May 2 22:22:35 2017 +0100

    Simplify Transform Feedback App.

diff --git a/src/main/java/org/distorted/examples/feedback/FeedbackRenderer.java b/src/main/java/org/distorted/examples/feedback/FeedbackRenderer.java
index fabc648..a4a137c 100644
--- a/src/main/java/org/distorted/examples/feedback/FeedbackRenderer.java
+++ b/src/main/java/org/distorted/examples/feedback/FeedbackRenderer.java
@@ -19,9 +19,19 @@
 
 package org.distorted.examples.feedback;
 
+import android.content.res.Resources;
+import android.opengl.GLES30;
 import android.opengl.GLSurfaceView;
+import android.util.Log;
 
 import org.distorted.library.Distorted;
+import org.distorted.library.program.DistortedProgram;
+
+import java.io.InputStream;
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
 
 import javax.microedition.khronos.egl.EGLConfig;
 import javax.microedition.khronos.opengles.GL10;
@@ -31,7 +41,9 @@ import javax.microedition.khronos.opengles.GL10;
 class FeedbackRenderer implements GLSurfaceView.Renderer
 {
     private GLSurfaceView mView;
-    private TransformFeedback mTF;
+    private DistortedProgram mFeedbackProgram;
+    private int mBufferLength;
+    private int[] mVBO, mTBO;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -44,7 +56,33 @@ class FeedbackRenderer implements GLSurfaceView.Renderer
    
     public void onDrawFrame(GL10 glUnused) 
       {
-      mTF.render();
+      mFeedbackProgram.useProgram();
+
+      GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mVBO[0]);
+      GLES30.glVertexAttribPointer(mFeedbackProgram.mAttribute[0], 1, GLES30.GL_FLOAT, false, 4, 0);
+      GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mTBO[0]);
+
+      GLES30.glEnable(GLES30.GL_RASTERIZER_DISCARD);
+      GLES30.glBeginTransformFeedback(GLES30.GL_POINTS);
+      GLES30.glDrawArrays(GLES30.GL_POINTS, 0, mBufferLength);
+      GLES30.glEndTransformFeedback();
+      GLES30.glDisable(GLES30.GL_RASTERIZER_DISCARD);
+      GLES30.glFlush();
+
+      Buffer mappedBuffer =  GLES30.glMapBufferRange(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mBufferLength, GLES30.GL_MAP_READ_BIT);
+
+      if (mappedBuffer!=null)
+        {
+        ByteBuffer bb = ((ByteBuffer) mappedBuffer);
+        bb.order(ByteOrder.nativeOrder());
+        FloatBuffer transformedData = bb.asFloatBuffer();
+
+        Log.d( "TransformFeedback", String.format("output values = %f %f %f %f %f %f\n",
+                  transformedData.get(), transformedData.get(), transformedData.get(),
+                  transformedData.get(), transformedData.get(), transformedData.get() ));
+        }
+
+      GLES30.glUnmapBuffer(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -67,6 +105,36 @@ class FeedbackRenderer implements GLSurfaceView.Renderer
         android.util.Log.e("Feedback", ex.getMessage() );
         }
 
-      mTF = new TransformFeedback(mView.getContext());
+      final Resources resources = mView.getContext().getResources();
+      final InputStream vertStream = resources.openRawResource(org.distorted.library.R.raw.feedback_vertex_shader);
+      final InputStream fragStream = resources.openRawResource(org.distorted.library.R.raw.feedback_fragment_shader);
+
+      String vertHeader= Distorted.GLSL_VERSION;
+      String fragHeader= Distorted.GLSL_VERSION;
+      String[] feedback = { "outValue" };
+
+      try
+        {
+        mFeedbackProgram = new DistortedProgram(vertStream,fragStream, vertHeader, fragHeader, Distorted.GLSL, feedback );
+        }
+      catch(Exception ex)
+        {
+        Log.e("TransformFeedback", "exception creating feedback program: "+ex.getMessage());
+        }
+
+      float[] floatData = { 2.0f, 4.0f, 9.0f, 16.0f, 25.0f, 100.0f };
+      mBufferLength = floatData.length * 4;
+      FloatBuffer data = ByteBuffer.allocateDirect(mBufferLength).order(ByteOrder.nativeOrder()).asFloatBuffer();
+      data.put(floatData).position(0);
+
+      mVBO = new int[1];
+      GLES30.glGenBuffers(1, mVBO, 0);
+      GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mVBO[0]);
+      GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, mBufferLength, data, GLES30.GL_STATIC_READ);
+
+      mTBO = new int[1];
+      GLES30.glGenBuffers(1, mTBO, 0);
+      GLES30.glBindBuffer(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, mTBO[0]);
+      GLES30.glBufferData(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, mBufferLength, null, GLES30.GL_STATIC_READ);
       }
 }
diff --git a/src/main/java/org/distorted/examples/feedback/TransformFeedback.java b/src/main/java/org/distorted/examples/feedback/TransformFeedback.java
deleted file mode 100644
index 7eb60cd..0000000
--- a/src/main/java/org/distorted/examples/feedback/TransformFeedback.java
+++ /dev/null
@@ -1,113 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2016 Leszek Koltunski                                                               //
-//                                                                                               //
-// This file is part of Distorted.                                                               //
-//                                                                                               //
-// Distorted is free software: you can redistribute it and/or modify                             //
-// it under the terms of the GNU General Public License as published by                          //
-// the Free Software Foundation, either version 2 of the License, or                             //
-// (at your option) any later version.                                                           //
-//                                                                                               //
-// Distorted is distributed in the hope that it will be useful,                                  //
-// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
-// GNU General Public License for more details.                                                  //
-//                                                                                               //
-// You should have received a copy of the GNU General Public License                             //
-// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-package org.distorted.examples.feedback;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.opengl.GLES30;
-import android.util.Log;
-
-import org.distorted.library.Distorted;
-import org.distorted.library.program.DistortedProgram;
-
-import java.io.InputStream;
-import java.nio.Buffer;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.FloatBuffer;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-class TransformFeedback
-    {
-    private DistortedProgram mFeedbackProgram;
-    private int mBufferLength;
-    private int[] mVBO, mTBO;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    TransformFeedback(final Context context)
-        {
-        final Resources resources = context.getResources();
-        final InputStream vertStream = resources.openRawResource(org.distorted.library.R.raw.feedback_vertex_shader);
-        final InputStream fragStream = resources.openRawResource(org.distorted.library.R.raw.feedback_fragment_shader);
-
-        String vertHeader= Distorted.GLSL_VERSION;
-        String fragHeader= Distorted.GLSL_VERSION;
-        String[] feedback = { "outValue" };
-
-        try
-          {
-          mFeedbackProgram = new DistortedProgram(vertStream,fragStream, vertHeader, fragHeader, Distorted.GLSL, feedback );
-          }
-        catch(Exception ex)
-          {
-          Log.e("TransformFeedback", "exception creating feedback program: "+ex.getMessage());
-          }
-
-        float[] floatData = { 2.0f, 4.0f, 9.0f, 16.0f, 25.0f, 100.0f };
-        mBufferLength = floatData.length * 4;
-        FloatBuffer data = ByteBuffer.allocateDirect(mBufferLength).order(ByteOrder.nativeOrder()).asFloatBuffer();
-        data.put(floatData).position(0);
-
-        mVBO = new int[1];
-        GLES30.glGenBuffers(1, mVBO, 0);
-        GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mVBO[0]);
-        GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, mBufferLength, data, GLES30.GL_STATIC_READ);
-
-        mTBO = new int[1];
-        GLES30.glGenBuffers(1, mTBO, 0);
-        GLES30.glBindBuffer(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, mTBO[0]);
-        GLES30.glBufferData(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, mBufferLength, null, GLES30.GL_STATIC_READ);
-        }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    void render()
-        {
-        mFeedbackProgram.useProgram();
-
-        GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mVBO[0]);
-        GLES30.glVertexAttribPointer(mFeedbackProgram.mAttribute[0], 1, GLES30.GL_FLOAT, false, 4, 0);
-        GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mTBO[0]);
-
-        GLES30.glEnable(GLES30.GL_RASTERIZER_DISCARD);
-        GLES30.glBeginTransformFeedback(GLES30.GL_POINTS);
-        GLES30.glDrawArrays(GLES30.GL_POINTS, 0, mBufferLength);
-        GLES30.glEndTransformFeedback();
-        GLES30.glDisable(GLES30.GL_RASTERIZER_DISCARD);
-        GLES30.glFlush();
-
-        Buffer mappedBuffer =  GLES30.glMapBufferRange(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mBufferLength, GLES30.GL_MAP_READ_BIT);
-
-        if (mappedBuffer!=null)
-            {
-            ByteBuffer bb = ((ByteBuffer) mappedBuffer);
-            bb.order(ByteOrder.nativeOrder());
-            FloatBuffer transformedData = bb.asFloatBuffer();
-
-            Log.d( "TransformFeedback", String.format("output values = %f %f %f %f %f %f\n",
-                    transformedData.get(), transformedData.get(), transformedData.get(),
-                    transformedData.get(), transformedData.get(), transformedData.get() ));
-            }
-
-        GLES30.glUnmapBuffer(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER);
-        }
-}
