Project

General

Profile

« Previous | Next » 

Revision e6519ac8

Added by Leszek Koltunski about 6 years ago

Up library requirements to OpenGL ES 3.1 (needed for the upcoming GL_SHADER_STORAGE_BUFFER)

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.GLES30;
22
import android.opengl.GLES31;
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 = GLES30.glCreateProgram();
57
    int programHandle = GLES31.glCreateProgram();
58 58

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

  
64 64
      if( feedbackVaryings!=null )
65 65
        {
66
        GLES30.glTransformFeedbackVaryings(programHandle, feedbackVaryings, GLES30.GL_INTERLEAVED_ATTRIBS);
66
        GLES31.glTransformFeedbackVaryings(programHandle, feedbackVaryings, GLES31.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
          GLES30.glBindAttribLocation(programHandle, i, attributes[i]);
75
          GLES31.glBindAttribLocation(programHandle, i, attributes[i]);
76 76
          }
77 77
        }
78 78

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

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

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

  
91 91
      final int[] numberOfUniforms = new int[1];
92
      GLES30.glGetProgramiv(programHandle, GLES30.GL_ACTIVE_UNIFORMS, numberOfUniforms, 0);
92
      GLES31.glGetProgramiv(programHandle, GLES31.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 = GLES30.glCreateShader(shaderType);
286
    int shaderHandle = GLES31.glCreateShader(shaderType);
287 287

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

  
295
      if (compileStatus[0] != GLES30.GL_TRUE )
295
      if (compileStatus[0] != GLES31.GL_TRUE )
296 296
        {
297
        GLES30.glDeleteShader(shaderHandle);
297
        GLES31.glDeleteShader(shaderHandle);
298 298
        shaderHandle = 0;
299 299
        }
300 300
      }
301 301

  
302 302
    if (shaderHandle == 0)
303 303
      {
304
      String error = GLES30.glGetShaderInfoLog(shaderHandle);
304
      String error = GLES31.glGetShaderInfoLog(shaderHandle);
305 305

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

  
308 308
      switch(shaderType)
309 309
        {
310
        case GLES30.GL_VERTEX_SHADER  : throw new VertexCompilationException(error);
311
        case GLES30.GL_FRAGMENT_SHADER: throw new FragmentCompilationException(error);
310
        case GLES31.GL_VERTEX_SHADER  : throw new VertexCompilationException(error);
311
        case GLES31.GL_FRAGMENT_SHADER: throw new FragmentCompilationException(error);
312 312
        default                       : throw new RuntimeException(error);
313 313
        }
314 314
      }
......
360 360
    final String vertexShader   = readTextFileFromRawResource(vertex  , true );
361 361
    final String fragmentShader = readTextFileFromRawResource(fragment, false);
362 362

  
363
    final int vertexShaderHandle   = compileShader(GLES30.GL_VERTEX_SHADER  , vertexHeader   + vertexShader  );
364
    final int fragmentShaderHandle = compileShader(GLES30.GL_FRAGMENT_SHADER, fragmentHeader + fragmentShader);
363
    final int vertexShaderHandle   = compileShader(GLES31.GL_VERTEX_SHADER  , vertexHeader   + vertexShader  );
364
    final int fragmentShaderHandle = compileShader(GLES31.GL_FRAGMENT_SHADER, fragmentHeader + fragmentShader);
365 365

  
366 366
    mProgramHandle = createAndLinkProgram(vertexShaderHandle, fragmentShaderHandle, mAttributeName, glslVersion>= 300 ? feedback:null );
367 367

  
......
369 369

  
370 370
    for(int i=0; i<mNumAttributes; i++)
371 371
      {
372
      mAttribute[i] = GLES30.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
372
      mAttribute[i] = GLES31.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
373 373
      }
374 374

  
375 375
    if( mNumUniforms>0 )
......
379 379

  
380 380
      for(int i=0; i<mNumUniforms; i++)
381 381
        {
382
        mUniform[i] = GLES30.glGetUniformLocation( mProgramHandle, mUniformName[i]);
382
        mUniform[i] = GLES31.glGetUniformLocation( mProgramHandle, mUniformName[i]);
383 383
        }
384 384
      }
385 385
    else mUniform = null;
......
403 403
    vertexShader   = insertEnabledEffects(vertexShader  ,enabledVertex  );
404 404
    fragmentShader = insertEnabledEffects(fragmentShader,enabledFragment);
405 405

  
406
    final int vertexShaderHandle   = compileShader(GLES30.GL_VERTEX_SHADER  , vertexHeader   + vertexShader  );
407
    final int fragmentShaderHandle = compileShader(GLES30.GL_FRAGMENT_SHADER, fragmentHeader + fragmentShader);
406
    final int vertexShaderHandle   = compileShader(GLES31.GL_VERTEX_SHADER  , vertexHeader   + vertexShader  );
407
    final int fragmentShaderHandle = compileShader(GLES31.GL_FRAGMENT_SHADER, fragmentHeader + fragmentShader);
408 408

  
409 409
    mProgramHandle = createAndLinkProgram(vertexShaderHandle, fragmentShaderHandle, mAttributeName, glslVersion>= 300 ? feedback:null );
410 410

  
......
412 412

  
413 413
    for(int i=0; i<mNumAttributes; i++)
414 414
      {
415
      mAttribute[i] = GLES30.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
415
      mAttribute[i] = GLES31.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
416 416
      }
417 417

  
418 418
    if( mNumUniforms>0 )
......
422 422

  
423 423
      for(int i=0; i<mNumUniforms; i++)
424 424
        {
425
        mUniform[i] = GLES30.glGetUniformLocation( mProgramHandle, mUniformName[i]);
425
        mUniform[i] = GLES31.glGetUniformLocation( mProgramHandle, mUniformName[i]);
426 426
        }
427 427
      }
428 428
    else mUniform = null;
......
465 465
    doAttributes(vertex  , true );
466 466
    doAttributes(fragment, false);
467 467

  
468
    final int vertexShaderHandle   = compileShader(GLES30.GL_VERTEX_SHADER  , vertex  );
469
    final int fragmentShaderHandle = compileShader(GLES30.GL_FRAGMENT_SHADER, fragment);
468
    final int vertexShaderHandle   = compileShader(GLES31.GL_VERTEX_SHADER  , vertex  );
469
    final int fragmentShaderHandle = compileShader(GLES31.GL_FRAGMENT_SHADER, fragment);
470 470

  
471 471
    mProgramHandle = createAndLinkProgram(vertexShaderHandle, fragmentShaderHandle, mAttributeName, null );
472 472

  
......
474 474

  
475 475
    for(int i=0; i<mNumAttributes; i++)
476 476
      {
477
      mAttribute[i] = GLES30.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
477
      mAttribute[i] = GLES31.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
478 478
      }
479 479

  
480 480
    if( mNumUniforms>0 )
......
484 484

  
485 485
      for(int i=0; i<mNumUniforms; i++)
486 486
        {
487
        mUniform[i] = GLES30.glGetUniformLocation( mProgramHandle, mUniformName[i]);
487
        mUniform[i] = GLES31.glGetUniformLocation( mProgramHandle, mUniformName[i]);
488 488
        }
489 489
      }
490 490
    else mUniform = null;
......
507 507
 */
508 508
  public void useProgram()
509 509
    {
510
    GLES30.glUseProgram(mProgramHandle);
510
    GLES31.glUseProgram(mProgramHandle);
511 511

  
512 512
    for(int i=0; i<mNumAttributes; i++)
513
      GLES30.glEnableVertexAttribArray(mAttribute[i]);
513
      GLES31.glEnableVertexAttribArray(mAttribute[i]);
514 514
    }
515 515
  }
516 516

  

Also available in: Unified diff