Revision e6519ac8
Added by Leszek Koltunski about 6 years ago
src/main/java/org/distorted/library/main/DistortedEffects.java | ||
---|---|---|
20 | 20 |
package org.distorted.library.main; |
21 | 21 |
|
22 | 22 |
import android.content.res.Resources; |
23 |
import android.opengl.GLES30; |
|
23 |
import android.opengl.GLES31; |
|
24 |
import android.util.Log; |
|
24 | 25 |
|
25 | 26 |
import org.distorted.library.R; |
26 | 27 |
import org.distorted.library.effect.Effect; |
... | ... | |
118 | 119 |
EffectQueueFragment.getUniforms(mainProgramH); |
119 | 120 |
EffectQueueVertex.getUniforms(mainProgramH); |
120 | 121 |
EffectQueueMatrix.getUniforms(mainProgramH); |
121 |
mMainTextureH= GLES30.glGetUniformLocation( mainProgramH, "u_Texture");
|
|
122 |
mMainTextureH= GLES31.glGetUniformLocation( mainProgramH, "u_Texture");
|
|
122 | 123 |
|
123 | 124 |
// BLIT PROGRAM //////////////////////////////////// |
124 | 125 |
final InputStream blitVertStream = resources.openRawResource(R.raw.blit_vertex_shader); |
... | ... | |
133 | 134 |
} |
134 | 135 |
catch(Exception e) |
135 | 136 |
{ |
136 |
android.util.Log.e("EFFECTS", "exception trying to compile BLIT program: "+e.getMessage());
|
|
137 |
Log.e("EFFECTS", "exception trying to compile BLIT program: "+e.getMessage()); |
|
137 | 138 |
throw new RuntimeException(e.getMessage()); |
138 | 139 |
} |
139 | 140 |
|
140 | 141 |
int blitProgramH = mBlitProgram.getProgramHandle(); |
141 |
mBlitTextureH = GLES30.glGetUniformLocation( blitProgramH, "u_Texture");
|
|
142 |
mBlitDepthH = GLES30.glGetUniformLocation( blitProgramH, "u_Depth");
|
|
142 |
mBlitTextureH = GLES31.glGetUniformLocation( blitProgramH, "u_Texture");
|
|
143 |
mBlitDepthH = GLES31.glGetUniformLocation( blitProgramH, "u_Depth");
|
|
143 | 144 |
|
144 | 145 |
// BLIT DEPTH PROGRAM //////////////////////////////////// |
145 | 146 |
final InputStream blitDepthVertStream = resources.openRawResource(R.raw.blit_depth_vertex_shader); |
... | ... | |
151 | 152 |
} |
152 | 153 |
catch(Exception e) |
153 | 154 |
{ |
154 |
android.util.Log.e("EFFECTS", "exception trying to compile BLIT DEPTH program: "+e.getMessage());
|
|
155 |
Log.e("EFFECTS", "exception trying to compile BLIT DEPTH program: "+e.getMessage()); |
|
155 | 156 |
throw new RuntimeException(e.getMessage()); |
156 | 157 |
} |
157 | 158 |
|
158 | 159 |
int blitDepthProgramH = mBlitDepthProgram.getProgramHandle(); |
159 |
mBlitDepthTextureH = GLES30.glGetUniformLocation( blitDepthProgramH, "u_Texture");
|
|
160 |
mBlitDepthDepthTextureH = GLES30.glGetUniformLocation( blitDepthProgramH, "u_DepthTexture");
|
|
161 |
mBlitDepthDepthH = GLES30.glGetUniformLocation( blitDepthProgramH, "u_Depth");
|
|
160 |
mBlitDepthTextureH = GLES31.glGetUniformLocation( blitDepthProgramH, "u_Texture");
|
|
161 |
mBlitDepthDepthTextureH = GLES31.glGetUniformLocation( blitDepthProgramH, "u_DepthTexture");
|
|
162 |
mBlitDepthDepthH = GLES31.glGetUniformLocation( blitDepthProgramH, "u_Depth");
|
|
162 | 163 |
|
163 | 164 |
// NORMAL PROGRAM ////////////////////////////////////// |
164 | 165 |
final InputStream normalVertexStream = resources.openRawResource(R.raw.normal_vertex_shader); |
... | ... | |
170 | 171 |
} |
171 | 172 |
catch(Exception e) |
172 | 173 |
{ |
173 |
android.util.Log.e("EFFECTS", "exception trying to compile NORMAL program: "+e.getMessage());
|
|
174 |
Log.e("EFFECTS", "exception trying to compile NORMAL program: "+e.getMessage()); |
|
174 | 175 |
throw new RuntimeException(e.getMessage()); |
175 | 176 |
} |
176 | 177 |
|
177 | 178 |
int normalProgramH = mNormalProgram.getProgramHandle(); |
178 |
mNormalMVPMatrixH = GLES30.glGetUniformLocation( normalProgramH, "u_MVPMatrix");
|
|
179 |
mNormalMVPMatrixH = GLES31.glGetUniformLocation( normalProgramH, "u_MVPMatrix");
|
|
179 | 180 |
} |
180 | 181 |
|
181 | 182 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
248 | 249 |
|
249 | 250 |
private void displayNormals(MeshObject mesh) |
250 | 251 |
{ |
251 |
GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mesh.mAttTFO[0]);
|
|
252 |
GLES30.glBeginTransformFeedback( GLES30.GL_POINTS);
|
|
252 |
GLES31.glBindBufferBase(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, 0, mesh.mAttTFO[0]);
|
|
253 |
GLES31.glBeginTransformFeedback( GLES31.GL_POINTS);
|
|
253 | 254 |
DistortedRenderState.switchOffDrawing(); |
254 |
GLES30.glDrawArrays( GLES30.GL_POINTS, 0, mesh.numVertices);
|
|
255 |
GLES31.glDrawArrays( GLES31.GL_POINTS, 0, mesh.numVertices);
|
|
255 | 256 |
DistortedRenderState.restoreDrawing(); |
256 |
GLES30.glEndTransformFeedback();
|
|
257 |
GLES30.glBindBufferBase(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0);
|
|
257 |
GLES31.glEndTransformFeedback();
|
|
258 |
GLES31.glBindBufferBase(GLES31.GL_TRANSFORM_FEEDBACK_BUFFER, 0, 0);
|
|
258 | 259 |
|
259 | 260 |
mNormalProgram.useProgram(); |
260 |
GLES30.glUniformMatrix4fv(mNormalMVPMatrixH, 1, false, mM.getMVP() , 0);
|
|
261 |
GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mesh.mAttTFO[0]);
|
|
262 |
GLES30.glVertexAttribPointer(mNormalProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES30.GL_FLOAT, false, 0, 0);
|
|
263 |
GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, 0);
|
|
264 |
GLES30.glLineWidth(8.0f);
|
|
265 |
GLES30.glDrawArrays(GLES30.GL_LINES, 0, 2*mesh.numVertices);
|
|
261 |
GLES31.glUniformMatrix4fv(mNormalMVPMatrixH, 1, false, mM.getMVP() , 0);
|
|
262 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mesh.mAttTFO[0]);
|
|
263 |
GLES31.glVertexAttribPointer(mNormalProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES31.GL_FLOAT, false, 0, 0);
|
|
264 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0);
|
|
265 |
GLES31.glLineWidth(8.0f);
|
|
266 |
GLES31.glDrawArrays(GLES31.GL_LINES, 0, 2*mesh.numVertices);
|
|
266 | 267 |
} |
267 | 268 |
|
268 | 269 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
276 | 277 |
mF.compute(currTime,halfW,halfH); |
277 | 278 |
mP.compute(currTime); |
278 | 279 |
|
279 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight );
|
|
280 |
GLES31.glViewport(0, 0, surface.mWidth, surface.mHeight );
|
|
280 | 281 |
|
281 | 282 |
mMainProgram.useProgram(); |
282 |
GLES30.glUniform1i(mMainTextureH, 0);
|
|
283 |
GLES31.glUniform1i(mMainTextureH, 0);
|
|
283 | 284 |
|
284 | 285 |
if( Distorted.GLSL >= 300 ) |
285 | 286 |
{ |
286 |
GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mesh.mAttVBO[0]);
|
|
287 |
GLES30.glVertexAttribPointer(mMainProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES30.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET0);
|
|
288 |
GLES30.glVertexAttribPointer(mMainProgram.mAttribute[1], MeshObject.NOR_DATA_SIZE, GLES30.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET1);
|
|
289 |
GLES30.glVertexAttribPointer(mMainProgram.mAttribute[2], MeshObject.TEX_DATA_SIZE, GLES30.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET2);
|
|
290 |
GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, 0);
|
|
287 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mesh.mAttVBO[0]);
|
|
288 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET0);
|
|
289 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[1], MeshObject.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET1);
|
|
290 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[2], MeshObject.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, MeshObject.OFFSET2);
|
|
291 |
GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0);
|
|
291 | 292 |
} |
292 | 293 |
else |
293 | 294 |
{ |
294 | 295 |
mesh.mVertAttribs.position(0); |
295 |
GLES30.glVertexAttribPointer(mMainProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES30.GL_FLOAT, false, MeshObject.VERTSIZE, mesh.mVertAttribs);
|
|
296 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[0], MeshObject.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, mesh.mVertAttribs);
|
|
296 | 297 |
mesh.mVertAttribs.position(MeshObject.POS_DATA_SIZE); |
297 |
GLES30.glVertexAttribPointer(mMainProgram.mAttribute[1], MeshObject.NOR_DATA_SIZE, GLES30.GL_FLOAT, false, MeshObject.VERTSIZE, mesh.mVertAttribs);
|
|
298 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[1], MeshObject.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, mesh.mVertAttribs);
|
|
298 | 299 |
mesh.mVertAttribs.position(MeshObject.POS_DATA_SIZE+MeshObject.NOR_DATA_SIZE); |
299 |
GLES30.glVertexAttribPointer(mMainProgram.mAttribute[2], MeshObject.TEX_DATA_SIZE, GLES30.GL_FLOAT, false, MeshObject.VERTSIZE, mesh.mVertAttribs);
|
|
300 |
GLES31.glVertexAttribPointer(mMainProgram.mAttribute[2], MeshObject.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshObject.VERTSIZE, mesh.mVertAttribs);
|
|
300 | 301 |
} |
301 | 302 |
|
302 | 303 |
mM.send(surface,halfW,halfH,halfZ,marginInPixels); |
303 | 304 |
mV.send(); |
304 | 305 |
mF.send(); |
305 | 306 |
|
306 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.numVertices);
|
|
307 |
GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, mesh.numVertices);
|
|
307 | 308 |
|
308 | 309 |
if( mesh.mShowNormals ) displayNormals(mesh); |
309 | 310 |
} |
... | ... | |
318 | 319 |
{ |
319 | 320 |
mBlitProgram.useProgram(); |
320 | 321 |
|
321 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight );
|
|
322 |
GLES30.glUniform1i(mBlitTextureH, 0);
|
|
323 |
GLES30.glUniform1f( mBlitDepthH , 1.0f-surface.mNear);
|
|
324 |
GLES30.glVertexAttribPointer(mBlitProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions);
|
|
325 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
|
|
322 |
GLES31.glViewport(0, 0, surface.mWidth, surface.mHeight );
|
|
323 |
GLES31.glUniform1i(mBlitTextureH, 0);
|
|
324 |
GLES31.glUniform1f( mBlitDepthH , 1.0f-surface.mNear);
|
|
325 |
GLES31.glVertexAttribPointer(mBlitProgram.mAttribute[0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions);
|
|
326 |
GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4);
|
|
326 | 327 |
} |
327 | 328 |
|
328 | 329 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
331 | 332 |
{ |
332 | 333 |
mBlitDepthProgram.useProgram(); |
333 | 334 |
|
334 |
GLES30.glViewport(0, 0, surface.mWidth, surface.mHeight );
|
|
335 |
GLES30.glUniform1i(mBlitDepthTextureH, 0);
|
|
336 |
GLES30.glUniform1i(mBlitDepthDepthTextureH, 1);
|
|
337 |
GLES30.glUniform1f( mBlitDepthDepthH , 1.0f-surface.mNear);
|
|
338 |
GLES30.glVertexAttribPointer(mBlitDepthProgram.mAttribute[0], 2, GLES30.GL_FLOAT, false, 0, mQuadPositions);
|
|
339 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4);
|
|
335 |
GLES31.glViewport(0, 0, surface.mWidth, surface.mHeight );
|
|
336 |
GLES31.glUniform1i(mBlitDepthTextureH, 0);
|
|
337 |
GLES31.glUniform1i(mBlitDepthDepthTextureH, 1);
|
|
338 |
GLES31.glUniform1f( mBlitDepthDepthH , 1.0f-surface.mNear);
|
|
339 |
GLES31.glVertexAttribPointer(mBlitDepthProgram.mAttribute[0], 2, GLES31.GL_FLOAT, false, 0, mQuadPositions);
|
|
340 |
GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, 4);
|
|
340 | 341 |
} |
341 | 342 |
|
342 | 343 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Up library requirements to OpenGL ES 3.1 (needed for the upcoming GL_SHADER_STORAGE_BUFFER)