Project

General

Profile

« Previous | Next » 

Revision b7074bc6

Added by Leszek Koltunski about 4 years ago

Lower requirements - now only OpenGL ES 3.0 is required; if running on such platform, OIT part of the API ( which is the only one which actually requires 3.1) is switched off.

View differences:

src/main/java/org/distorted/library/program/DistortedProgram.java
19 19

  
20 20
package org.distorted.library.program;
21 21

  
22
import android.opengl.GLES31;
22
import android.opengl.GLES30;
23 23

  
24 24
import java.io.BufferedReader;
25 25
import java.io.IOException;
......
54 54
  private int createAndLinkProgram(final int vertexShaderHandle, final int fragmentShaderHandle, final String[] attributes, final String[] feedbackVaryings)
55 55
  throws LinkingException
56 56
    {
57
    int programHandle = GLES31.glCreateProgram();
57
    int programHandle = GLES30.glCreateProgram();
58 58

  
59 59
    if (programHandle != 0)
60 60
      {
61
      GLES31.glAttachShader(programHandle, vertexShaderHandle);
62
      GLES31.glAttachShader(programHandle, fragmentShaderHandle);
61
      GLES30.glAttachShader(programHandle, vertexShaderHandle);
62
      GLES30.glAttachShader(programHandle, fragmentShaderHandle);
63 63

  
64 64
      if( feedbackVaryings!=null )
65 65
        {
66
        GLES31.glTransformFeedbackVaryings(programHandle, feedbackVaryings, GLES31.GL_INTERLEAVED_ATTRIBS);
66
        GLES30.glTransformFeedbackVaryings(programHandle, feedbackVaryings, GLES30.GL_INTERLEAVED_ATTRIBS);
67 67
        }
68 68

  
69 69
      if (attributes != null)
......
72 72

  
73 73
        for (int i = 0; i < size; i++)
74 74
          {
75
          GLES31.glBindAttribLocation(programHandle, i, attributes[i]);
75
          GLES30.glBindAttribLocation(programHandle, i, attributes[i]);
76 76
          }
77 77
        }
78 78

  
79
      GLES31.glLinkProgram(programHandle);
79
      GLES30.glLinkProgram(programHandle);
80 80

  
81 81
      final int[] linkStatus = new int[1];
82
      GLES31.glGetProgramiv(programHandle, GLES31.GL_LINK_STATUS, linkStatus, 0);
82
      GLES30.glGetProgramiv(programHandle, GLES30.GL_LINK_STATUS, linkStatus, 0);
83 83

  
84
      if (linkStatus[0] != GLES31.GL_TRUE )
84
      if (linkStatus[0] != GLES30.GL_TRUE )
85 85
        {
86
        String error = GLES31.glGetProgramInfoLog(programHandle);
87
        GLES31.glDeleteProgram(programHandle);
86
        String error = GLES30.glGetProgramInfoLog(programHandle);
87
        GLES30.glDeleteProgram(programHandle);
88 88
        throw new LinkingException(error);
89 89
        }
90 90

  
91 91
      final int[] numberOfUniforms = new int[1];
92
      GLES31.glGetProgramiv(programHandle, GLES31.GL_ACTIVE_UNIFORMS, numberOfUniforms, 0);
92
      GLES30.glGetProgramiv(programHandle, GLES30.GL_ACTIVE_UNIFORMS, numberOfUniforms, 0);
93 93

  
94 94
      //android.util.Log.d("program", "number of active uniforms="+numberOfUniforms[0]);
95 95
      }
......
283 283
  private static int compileShader(final int shaderType, final String shaderSource)
284 284
  throws FragmentCompilationException,VertexCompilationException
285 285
    {
286
    int shaderHandle = GLES31.glCreateShader(shaderType);
286
    int shaderHandle = GLES30.glCreateShader(shaderType);
287 287

  
288 288
    if (shaderHandle != 0)
289 289
      {
290
      GLES31.glShaderSource(shaderHandle, shaderSource);
291
      GLES31.glCompileShader(shaderHandle);
290
      GLES30.glShaderSource(shaderHandle, shaderSource);
291
      GLES30.glCompileShader(shaderHandle);
292 292
      final int[] compileStatus = new int[1];
293
      GLES31.glGetShaderiv(shaderHandle, GLES31.GL_COMPILE_STATUS, compileStatus, 0);
293
      GLES30.glGetShaderiv(shaderHandle, GLES30.GL_COMPILE_STATUS, compileStatus, 0);
294 294

  
295
      if (compileStatus[0] != GLES31.GL_TRUE)
295
      if (compileStatus[0] != GLES30.GL_TRUE)
296 296
        {
297
        String error = GLES31.glGetShaderInfoLog(shaderHandle);
297
        String error = GLES30.glGetShaderInfoLog(shaderHandle);
298 298

  
299
        //android.util.Log.e("Program", "error compiling :" + error);
300

  
301
        GLES31.glDeleteShader(shaderHandle);
299
        GLES30.glDeleteShader(shaderHandle);
302 300

  
303 301
        switch (shaderType)
304 302
          {
305
          case GLES31.GL_VERTEX_SHADER:   throw new VertexCompilationException(error);
306
          case GLES31.GL_FRAGMENT_SHADER: throw new FragmentCompilationException(error);
303
          case GLES30.GL_VERTEX_SHADER:   throw new VertexCompilationException(error);
304
          case GLES30.GL_FRAGMENT_SHADER: throw new FragmentCompilationException(error);
307 305
          default:                        throw new RuntimeException(error);
308 306
          }
309 307
        }
......
357 355
    final String vertShader = readTextFileFromRawResource(vert, true );
358 356
    final String fragShader = readTextFileFromRawResource(frag, false);
359 357

  
360
    final int vertShaderHandle = compileShader(GLES31.GL_VERTEX_SHADER  , vertHeader + vertShader);
361
    final int fragShaderHandle = compileShader(GLES31.GL_FRAGMENT_SHADER, fragHeader + fragShader);
358
    final int vertShaderHandle = compileShader(GLES30.GL_VERTEX_SHADER  , vertHeader + vertShader);
359
    final int fragShaderHandle = compileShader(GLES30.GL_FRAGMENT_SHADER, fragHeader + fragShader);
362 360

  
363 361
    mProgramHandle = createAndLinkProgram(vertShaderHandle, fragShaderHandle, mAttributeName, glslVersion>= 300 ? feedback:null );
364 362

  
......
366 364

  
367 365
    for(int i=0; i<mNumAttributes; i++)
368 366
      {
369
      mAttribute[i] = GLES31.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
367
      mAttribute[i] = GLES30.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
370 368
      }
371 369

  
372 370
    if( mNumUniforms>0 )
......
376 374

  
377 375
      for(int i=0; i<mNumUniforms; i++)
378 376
        {
379
        mUniform[i] = GLES31.glGetUniformLocation( mProgramHandle, mUniformName[i]);
377
        mUniform[i] = GLES30.glGetUniformLocation( mProgramHandle, mUniformName[i]);
380 378
        }
381 379
      }
382 380
    else mUniform = null;
......
400 398
    if( enabledVert!=null ) vertShader = insertEnabledEffects(vertShader,enabledVert);
401 399
    if( enabledFrag!=null ) fragShader = insertEnabledEffects(fragShader,enabledFrag);
402 400

  
403
    final int vertShaderHandle = compileShader(GLES31.GL_VERTEX_SHADER  , vertHeader + vertShader);
404
    final int fragShaderHandle = compileShader(GLES31.GL_FRAGMENT_SHADER, fragHeader + fragShader);
401
    final int vertShaderHandle = compileShader(GLES30.GL_VERTEX_SHADER  , vertHeader + vertShader);
402
    final int fragShaderHandle = compileShader(GLES30.GL_FRAGMENT_SHADER, fragHeader + fragShader);
405 403

  
406 404
    mProgramHandle = createAndLinkProgram(vertShaderHandle, fragShaderHandle, mAttributeName, glslVersion>= 300 ? feedback:null );
407 405

  
......
409 407

  
410 408
    for(int i=0; i<mNumAttributes; i++)
411 409
      {
412
      mAttribute[i] = GLES31.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
410
      mAttribute[i] = GLES30.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
413 411
      }
414 412

  
415 413
    if( mNumUniforms>0 )
......
419 417

  
420 418
      for(int i=0; i<mNumUniforms; i++)
421 419
        {
422
        mUniform[i] = GLES31.glGetUniformLocation( mProgramHandle, mUniformName[i]);
420
        mUniform[i] = GLES30.glGetUniformLocation( mProgramHandle, mUniformName[i]);
423 421
        }
424 422
      }
425 423
    else mUniform = null;
......
461 459
    doAttributes(vertex  , true );
462 460
    doAttributes(fragment, false);
463 461

  
464
    final int vertexShaderHandle   = compileShader(GLES31.GL_VERTEX_SHADER  , vertex  );
465
    final int fragmentShaderHandle = compileShader(GLES31.GL_FRAGMENT_SHADER, fragment);
462
    final int vertexShaderHandle   = compileShader(GLES30.GL_VERTEX_SHADER  , vertex  );
463
    final int fragmentShaderHandle = compileShader(GLES30.GL_FRAGMENT_SHADER, fragment);
466 464

  
467 465
    mProgramHandle = createAndLinkProgram(vertexShaderHandle, fragmentShaderHandle, mAttributeName, null );
468 466

  
......
470 468

  
471 469
    for(int i=0; i<mNumAttributes; i++)
472 470
      {
473
      mAttribute[i] = GLES31.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
471
      mAttribute[i] = GLES30.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
474 472
      }
475 473

  
476 474
    if( mNumUniforms>0 )
......
480 478

  
481 479
      for(int i=0; i<mNumUniforms; i++)
482 480
        {
483
        mUniform[i] = GLES31.glGetUniformLocation( mProgramHandle, mUniformName[i]);
481
        mUniform[i] = GLES30.glGetUniformLocation( mProgramHandle, mUniformName[i]);
484 482
        }
485 483
      }
486 484
    else mUniform = null;
......
503 501
 */
504 502
  public void useProgram()
505 503
    {
506
    GLES31.glUseProgram(mProgramHandle);
504
    GLES30.glUseProgram(mProgramHandle);
507 505

  
508 506
    for(int i=0; i<mNumAttributes; i++)
509
      GLES31.glEnableVertexAttribArray(mAttribute[i]);
507
      GLES30.glEnableVertexAttribArray(mAttribute[i]);
510 508
    }
511 509
  }
512 510

  

Also available in: Unified diff