Revision e6519ac8
Added by Leszek Koltunski over 7 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)