Revision 8fa96e69
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/library/EffectQueuePostprocess.java | ||
---|---|---|
20 | 20 |
package org.distorted.library; |
21 | 21 |
|
22 | 22 |
import android.opengl.GLES20; |
23 |
import android.opengl.Matrix; |
|
24 | 23 |
|
25 | 24 |
import org.distorted.library.message.EffectMessage; |
25 |
import org.distorted.library.program.DistortedProgram; |
|
26 | 26 |
import org.distorted.library.type.Data1D; |
27 | 27 |
import org.distorted.library.type.Data2D; |
28 | 28 |
import org.distorted.library.type.Dynamic1D; |
... | ... | |
30 | 30 |
import org.distorted.library.type.Static1D; |
31 | 31 |
import org.distorted.library.type.Static2D; |
32 | 32 |
|
33 |
import java.nio.ByteBuffer; |
|
34 |
import java.nio.ByteOrder; |
|
35 |
import java.nio.FloatBuffer; |
|
36 |
|
|
33 | 37 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
34 | 38 |
|
35 | 39 |
class EffectQueuePostprocess extends EffectQueue |
36 | 40 |
{ |
41 |
private static final int BYTES_PER_FLOAT = 4; |
|
42 |
private static final int POSITION_DATA_SIZE= 2; // Post Program: size of the position data in elements |
|
43 |
private static final int TEX_DATA_SIZE = 2; // Post Program: size of the texture coordinate data in elements. |
|
44 |
|
|
37 | 45 |
private static final int NUM_UNIFORMS = 3; |
38 | 46 |
private static final int NUM_CACHE = 0; |
39 | 47 |
private static final int INDEX = EffectTypes.POSTPROCESS.ordinal(); |
... | ... | |
44 | 52 |
private static int mObjDH; |
45 | 53 |
private static int mMVPMatrixH; |
46 | 54 |
|
47 |
private static float[] mMVPMatrix = new float[16]; |
|
48 |
private static float[] mTmpMatrix = new float[16]; |
|
55 |
private static final FloatBuffer mQuadPositions, mQuadTexture; |
|
56 |
private static DistortedProgram mProgram; |
|
57 |
|
|
58 |
static |
|
59 |
{ |
|
60 |
int dataLength = 4; |
|
61 |
|
|
62 |
float[] positionData= { -0.5f, -0.5f, -0.5f, 0.5f, 0.5f,-0.5f, 0.5f, 0.5f }; |
|
63 |
float[] textureData = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f }; |
|
64 |
|
|
65 |
mQuadPositions = ByteBuffer.allocateDirect(POSITION_DATA_SIZE*dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer(); |
|
66 |
mQuadPositions.put(positionData).position(0); |
|
67 |
mQuadTexture = ByteBuffer.allocateDirect(TEX_DATA_SIZE *dataLength*BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer(); |
|
68 |
mQuadTexture.put(textureData).position(0); |
|
69 |
} |
|
49 | 70 |
|
50 | 71 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
51 | 72 |
|
... | ... | |
65 | 86 |
mMVPMatrixH = GLES20.glGetUniformLocation(mProgramH, "u_MVPMatrix"); |
66 | 87 |
} |
67 | 88 |
|
89 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
90 |
|
|
91 |
static void setProgram(DistortedProgram p) |
|
92 |
{ |
|
93 |
mProgram = p; |
|
94 |
} |
|
95 |
|
|
68 | 96 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
69 | 97 |
|
70 | 98 |
synchronized void compute(long currTime) |
... | ... | |
115 | 143 |
|
116 | 144 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
117 | 145 |
|
118 |
synchronized void send(float w, float h, float[] mvp)
|
|
146 |
synchronized static void sendZero(float w, float h, float[] mvp)
|
|
119 | 147 |
{ |
120 |
GLES20.glUniform1i( mNumEffectsH, mNumEffects);
|
|
121 |
GLES20.glUniform2f( mObjDH , w, h );
|
|
148 |
GLES20.glUniform1i( mNumEffectsH, 0);
|
|
149 |
GLES20.glUniform2f( mObjDH , w, h); |
|
122 | 150 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mvp , 0); |
123 |
|
|
124 |
if( mNumEffects>0 ) |
|
125 |
{ |
|
126 |
GLES20.glUniform1iv( mTypeH , mNumEffects, mName ,0); |
|
127 |
GLES20.glUniform4fv( mUniformsH,2*mNumEffects, mUniforms,0); |
|
128 |
} |
|
129 | 151 |
} |
130 | 152 |
|
131 | 153 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
132 | 154 |
|
133 |
synchronized void send(DistortedFramebuffer df)
|
|
155 |
synchronized void render(float w, float h, float[] mvp, DistortedFramebuffer df)
|
|
134 | 156 |
{ |
135 |
Matrix.setIdentityM(mTmpMatrix, 0); |
|
136 |
Matrix.translateM(mTmpMatrix, 0, 0, 0, -df.mDistance); |
|
137 |
Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mTmpMatrix, 0); |
|
157 |
mProgram.useProgram(); |
|
158 |
df.setAsOutput(); |
|
138 | 159 |
|
139 | 160 |
GLES20.glUniform1i( mNumEffectsH, mNumEffects); |
140 |
GLES20.glUniform2f( mObjDH , df.mWidth, df.mHeight);
|
|
141 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0);
|
|
161 |
GLES20.glUniform2f( mObjDH , w, h );
|
|
162 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mvp , 0);
|
|
142 | 163 |
|
143 | 164 |
if( mNumEffects>0 ) |
144 | 165 |
{ |
145 | 166 |
GLES20.glUniform1iv( mTypeH , mNumEffects, mName ,0); |
146 | 167 |
GLES20.glUniform4fv( mUniformsH,2*mNumEffects, mUniforms,0); |
147 | 168 |
} |
148 |
} |
|
149 |
|
|
150 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
151 | 169 |
|
152 |
synchronized static void sendZero(DistortedFramebuffer df) |
|
153 |
{ |
|
154 |
Matrix.setIdentityM(mTmpMatrix, 0); |
|
155 |
Matrix.translateM(mTmpMatrix, 0, 0, 0, -df.mDistance); |
|
156 |
Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mTmpMatrix, 0); |
|
157 |
|
|
158 |
GLES20.glUniform1i( mNumEffectsH, 0); |
|
159 |
GLES20.glUniform2f( mObjDH , df.mWidth, df.mHeight); |
|
160 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0); |
|
170 |
GLES20.glVertexAttribPointer(mProgram.mAttribute[0], POSITION_DATA_SIZE, GLES20.GL_FLOAT, false, 0, mQuadPositions); |
|
171 |
GLES20.glVertexAttribPointer(mProgram.mAttribute[1], TEX_DATA_SIZE , GLES20.GL_FLOAT, false, 0, mQuadTexture); |
|
172 |
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); |
|
161 | 173 |
} |
162 | 174 |
|
163 | 175 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Move more intelligence to EffectQueuePostprocess.