Project

General

Profile

« Previous | Next » 

Revision 23ee8a18

Added by Leszek Koltunski about 7 years ago

Simplify Transform Feedback App.

View differences:

src/main/java/org/distorted/examples/feedback/FeedbackRenderer.java
19 19

  
20 20
package org.distorted.examples.feedback;
21 21

  
22
import android.content.res.Resources;
23
import android.opengl.GLES30;
22 24
import android.opengl.GLSurfaceView;
25
import android.util.Log;
23 26

  
24 27
import org.distorted.library.Distorted;
28
import org.distorted.library.program.DistortedProgram;
29

  
30
import java.io.InputStream;
31
import java.nio.Buffer;
32
import java.nio.ByteBuffer;
33
import java.nio.ByteOrder;
34
import java.nio.FloatBuffer;
25 35

  
26 36
import javax.microedition.khronos.egl.EGLConfig;
27 37
import javax.microedition.khronos.opengles.GL10;
......
31 41
class FeedbackRenderer implements GLSurfaceView.Renderer
32 42
{
33 43
    private GLSurfaceView mView;
34
    private TransformFeedback mTF;
44
    private DistortedProgram mFeedbackProgram;
45
    private int mBufferLength;
46
    private int[] mVBO, mTBO;
35 47

  
36 48
///////////////////////////////////////////////////////////////////////////////////////////////////
37 49

  
......
44 56
   
45 57
    public void onDrawFrame(GL10 glUnused) 
46 58
      {
47
      mTF.render();
59
      mFeedbackProgram.useProgram();
60

  
61
      GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mVBO[0]);
62
      GLES30.glVertexAttribPointer(mFeedbackProgram.mAttribute[0], 1, GLES30.GL_FLOAT, false, 4, 0);
63
      GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mTBO[0]);
64

  
65
      GLES30.glEnable(GLES30.GL_RASTERIZER_DISCARD);
66
      GLES30.glBeginTransformFeedback(GLES30.GL_POINTS);
67
      GLES30.glDrawArrays(GLES30.GL_POINTS, 0, mBufferLength);
68
      GLES30.glEndTransformFeedback();
69
      GLES30.glDisable(GLES30.GL_RASTERIZER_DISCARD);
70
      GLES30.glFlush();
71

  
72
      Buffer mappedBuffer =  GLES30.glMapBufferRange(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mBufferLength, GLES30.GL_MAP_READ_BIT);
73

  
74
      if (mappedBuffer!=null)
75
        {
76
        ByteBuffer bb = ((ByteBuffer) mappedBuffer);
77
        bb.order(ByteOrder.nativeOrder());
78
        FloatBuffer transformedData = bb.asFloatBuffer();
79

  
80
        Log.d( "TransformFeedback", String.format("output values = %f %f %f %f %f %f\n",
81
                  transformedData.get(), transformedData.get(), transformedData.get(),
82
                  transformedData.get(), transformedData.get(), transformedData.get() ));
83
        }
84

  
85
      GLES30.glUnmapBuffer(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER);
48 86
      }
49 87

  
50 88
///////////////////////////////////////////////////////////////////////////////////////////////////
......
67 105
        android.util.Log.e("Feedback", ex.getMessage() );
68 106
        }
69 107

  
70
      mTF = new TransformFeedback(mView.getContext());
108
      final Resources resources = mView.getContext().getResources();
109
      final InputStream vertStream = resources.openRawResource(org.distorted.library.R.raw.feedback_vertex_shader);
110
      final InputStream fragStream = resources.openRawResource(org.distorted.library.R.raw.feedback_fragment_shader);
111

  
112
      String vertHeader= Distorted.GLSL_VERSION;
113
      String fragHeader= Distorted.GLSL_VERSION;
114
      String[] feedback = { "outValue" };
115

  
116
      try
117
        {
118
        mFeedbackProgram = new DistortedProgram(vertStream,fragStream, vertHeader, fragHeader, Distorted.GLSL, feedback );
119
        }
120
      catch(Exception ex)
121
        {
122
        Log.e("TransformFeedback", "exception creating feedback program: "+ex.getMessage());
123
        }
124

  
125
      float[] floatData = { 2.0f, 4.0f, 9.0f, 16.0f, 25.0f, 100.0f };
126
      mBufferLength = floatData.length * 4;
127
      FloatBuffer data = ByteBuffer.allocateDirect(mBufferLength).order(ByteOrder.nativeOrder()).asFloatBuffer();
128
      data.put(floatData).position(0);
129

  
130
      mVBO = new int[1];
131
      GLES30.glGenBuffers(1, mVBO, 0);
132
      GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mVBO[0]);
133
      GLES30.glBufferData(GLES30.GL_ARRAY_BUFFER, mBufferLength, data, GLES30.GL_STATIC_READ);
134

  
135
      mTBO = new int[1];
136
      GLES30.glGenBuffers(1, mTBO, 0);
137
      GLES30.glBindBuffer(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, mTBO[0]);
138
      GLES30.glBufferData(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, mBufferLength, null, GLES30.GL_STATIC_READ);
71 139
      }
72 140
}

Also available in: Unified diff