Revision c2c08950
Added by Leszek Koltunski almost 8 years ago
src/main/java/org/distorted/library/DistortedEffects.java | ||
---|---|---|
72 | 72 |
/// BLIT PROGRAM /// |
73 | 73 |
private static DistortedProgram mBlitProgram; |
74 | 74 |
private static int mBlitTextureH; |
75 |
private static int mBlitObjDH; |
|
76 |
private static int mBlitMVPMatrixH; |
|
75 |
private static int mBlitDepthH; |
|
77 | 76 |
private static final FloatBuffer mQuadPositions; |
78 | 77 |
|
79 | 78 |
static |
... | ... | |
166 | 165 |
|
167 | 166 |
int blitProgramH = mBlitProgram.getProgramHandle(); |
168 | 167 |
mBlitTextureH = GLES30.glGetUniformLocation( blitProgramH, "u_Texture"); |
169 |
mBlitObjDH = GLES30.glGetUniformLocation( blitProgramH, "u_objD"); |
|
170 |
mBlitMVPMatrixH= GLES30.glGetUniformLocation( blitProgramH, "u_MVPMatrix"); |
|
168 |
mBlitDepthH = GLES30.glGetUniformLocation( blitProgramH, "u_Depth"); |
|
171 | 169 |
|
172 | 170 |
// DEBUG ONLY ////////////////////////////////////// |
173 | 171 |
final InputStream debugVertexStream = resources.openRawResource(R.raw.test_vertex_shader); |
... | ... | |
349 | 347 |
|
350 | 348 |
static void blitPriv(DistortedOutputSurface projection) |
351 | 349 |
{ |
352 |
GLES30.glViewport(0, 0, projection.mWidth, projection.mHeight); |
|
353 |
|
|
354 | 350 |
mBlitProgram.useProgram(); |
355 | 351 |
|
356 |
Matrix.setIdentityM(mTmpMatrix, 0); |
|
357 |
Matrix.translateM(mTmpMatrix, 0, 0, 0, -projection.mDistance); |
|
358 |
Matrix.multiplyMM(mMVPMatrix, 0, projection.mProjectionMatrix, 0, mTmpMatrix, 0); |
|
359 |
|
|
352 |
GLES30.glViewport(0, 0, projection.mWidth, projection.mHeight); |
|
360 | 353 |
GLES30.glUniform1i(mBlitTextureH, 0); |
361 |
GLES30.glUniform2f( mBlitObjDH , projection.mWidth/2, projection.mHeight/2); |
|
362 |
GLES30.glUniformMatrix4fv(mBlitMVPMatrixH, 1, false, mMVPMatrix, 0); |
|
354 |
GLES30.glUniform1f( mBlitDepthH , 1.0f-projection.mNear); |
|
363 | 355 |
GLES30.glVertexAttribPointer(mBlitProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions); |
364 | 356 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); |
365 | 357 |
} |
src/main/java/org/distorted/library/DistortedOutputSurface.java | ||
---|---|---|
32 | 32 |
private ArrayList<DistortedNode> mChildren; |
33 | 33 |
private int mNumChildren; // ==mChildren.length(), but we only create mChildren if the first one gets added |
34 | 34 |
|
35 |
private float mNear, mFOV;
|
|
35 |
private float mFOV; |
|
36 | 36 |
int mWidth,mHeight,mDepth; |
37 |
float mDistance; |
|
37 |
float mDistance, mNear;
|
|
38 | 38 |
float[] mProjectionMatrix; |
39 | 39 |
|
40 | 40 |
int mDepthCreated; |
... | ... | |
71 | 71 |
if( mFOV>0.0f ) // perspective projection |
72 | 72 |
{ |
73 | 73 |
float a = 2.0f*(float)Math.tan(mFOV*Math.PI/360); |
74 |
float q = (float)mWidth/mHeight;
|
|
74 |
float q = mWidth*mNear;
|
|
75 | 75 |
float c = mHeight*mNear; |
76 | 76 |
|
77 |
float left = -q*c/2;
|
|
78 |
float right = +q*c/2;
|
|
79 |
float bottom = -c/2;
|
|
80 |
float top = +c/2;
|
|
81 |
float near = c/a;
|
|
77 |
float left = -q/2; |
|
78 |
float right = +q/2; |
|
79 |
float bottom = -c/2; |
|
80 |
float top = +c/2; |
|
81 |
float near = c/a; |
|
82 | 82 |
|
83 | 83 |
mDistance = mHeight/a; |
84 | 84 |
float far = 2*mDistance-near; |
src/main/java/org/distorted/library/EffectQueueFragment.java | ||
---|---|---|
132 | 132 |
} |
133 | 133 |
} |
134 | 134 |
|
135 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
136 |
|
|
137 |
synchronized static void sendZero() |
|
138 |
{ |
|
139 |
GLES30.glUniform1i( mNumEffectsH, 0); |
|
140 |
} |
|
141 |
|
|
142 | 135 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
143 | 136 |
// alpha, brightness, contrast, saturation |
144 | 137 |
|
src/main/java/org/distorted/library/EffectQueueMatrix.java | ||
---|---|---|
294 | 294 |
GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0); |
295 | 295 |
} |
296 | 296 |
|
297 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
298 |
// here construct the ModelView Matrix, but without any effects |
|
299 |
|
|
300 |
synchronized static void sendZero(DistortedOutputSurface projection, float halfX, float halfY, float halfZ) |
|
301 |
{ |
|
302 |
Matrix.setIdentityM(mTmpMatrix, 0); |
|
303 |
Matrix.translateM(mTmpMatrix, 0, halfX-projection.mWidth/2, projection.mHeight/2-halfY, -projection.mDistance); |
|
304 |
Matrix.multiplyMM(mMVPMatrix, 0, projection.mProjectionMatrix, 0, mTmpMatrix, 0); |
|
305 |
|
|
306 |
GLES30.glUniform3f( mObjDH , halfX, halfY, halfZ); |
|
307 |
GLES30.glUniform1f( mDepthH, projection.mDepth); |
|
308 |
GLES30.glUniformMatrix4fv(mMVMatrixH , 1, false, mTmpMatrix, 0); |
|
309 |
GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix, 0); |
|
310 |
} |
|
311 |
|
|
312 | 297 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
313 | 298 |
// move, scale |
314 | 299 |
|
src/main/java/org/distorted/library/EffectQueueVertex.java | ||
---|---|---|
151 | 151 |
} |
152 | 152 |
} |
153 | 153 |
|
154 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
155 |
|
|
156 |
synchronized static void sendZero() |
|
157 |
{ |
|
158 |
GLES30.glUniform1i( mNumEffectsH, 0); |
|
159 |
} |
|
160 |
|
|
161 | 154 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
162 | 155 |
// Do various post-processing on already computed effects. |
163 | 156 |
// 1) here unlike in the fragment queue, we don't have to multiply the points by ModelView matrix because that gets done in the shader. |
src/main/res/raw/blit_vertex_shader.glsl | ||
---|---|---|
19 | 19 |
|
20 | 20 |
precision lowp float; |
21 | 21 |
|
22 |
uniform vec2 u_objD; // half of object width x half of object height |
|
23 |
uniform mat4 u_MVPMatrix; // the combined model/view/projection matrix. |
|
22 |
uniform float u_Depth; // distance from the near plane to render plane, in clip coords |
|
24 | 23 |
attribute vec2 a_Position; // Per-vertex position. |
25 | 24 |
varying vec2 v_TexCoordinate; // |
26 | 25 |
|
... | ... | |
29 | 28 |
void main() |
30 | 29 |
{ |
31 | 30 |
v_TexCoordinate = a_Position + 0.5; |
32 |
//gl_Position = vec4(2.0*a_Position,0.0,1.0); |
|
33 |
gl_Position = u_MVPMatrix*vec4(2.0*u_objD*a_Position,0.0,1.0); |
|
34 |
} |
|
31 |
gl_Position = vec4(2.0*a_Position,u_Depth,1.0); |
|
32 |
} |
Also available in: Unified diff
simplify blitPriv()