Project

General

Profile

« Previous | Next » 

Revision 194ab46f

Added by Leszek Koltunski over 7 years ago

Try using OpenGL ES 3.0 everywhere (but if device does not support it, try creating 2.0 context - this is important because of the emulator!)

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.GLES20;
22
import android.opengl.GLES30;
23 23
import android.os.Build;
24 24

  
25 25
import org.distorted.library.DistortedEffects;
......
47 47
  private int createAndLinkProgram(final int vertexShaderHandle, final int fragmentShaderHandle, final String[] attributes)
48 48
  throws LinkingException
49 49
    {
50
    int programHandle = GLES20.glCreateProgram();
50
    int programHandle = GLES30.glCreateProgram();
51 51

  
52 52
    if (programHandle != 0)
53 53
      {
54
      GLES20.glAttachShader(programHandle, vertexShaderHandle);
55
      GLES20.glAttachShader(programHandle, fragmentShaderHandle);
54
      GLES30.glAttachShader(programHandle, vertexShaderHandle);
55
      GLES30.glAttachShader(programHandle, fragmentShaderHandle);
56 56

  
57 57
      if (attributes != null)
58 58
        {
......
60 60

  
61 61
        for (int i = 0; i < size; i++)
62 62
          {
63
          GLES20.glBindAttribLocation(programHandle, i, attributes[i]);
63
          GLES30.glBindAttribLocation(programHandle, i, attributes[i]);
64 64
          }
65 65
        }
66 66

  
67
      GLES20.glLinkProgram(programHandle);
67
      GLES30.glLinkProgram(programHandle);
68 68

  
69 69
      final int[] linkStatus = new int[1];
70
      GLES20.glGetProgramiv(programHandle, GLES20.GL_LINK_STATUS, linkStatus, 0);
70
      GLES30.glGetProgramiv(programHandle, GLES30.GL_LINK_STATUS, linkStatus, 0);
71 71

  
72
      if (linkStatus[0] != GLES20.GL_TRUE )
72
      if (linkStatus[0] != GLES30.GL_TRUE )
73 73
        {
74
        String error = GLES20.glGetProgramInfoLog(programHandle);
75
        GLES20.glDeleteProgram(programHandle);
74
        String error = GLES30.glGetProgramInfoLog(programHandle);
75
        GLES30.glDeleteProgram(programHandle);
76 76
        throw new LinkingException(error);
77 77
        }
78 78

  
79 79
      final int[] numberOfUniforms = new int[1];
80
      GLES20.glGetProgramiv(programHandle, GLES20.GL_ACTIVE_UNIFORMS, numberOfUniforms, 0);
80
      GLES30.glGetProgramiv(programHandle, GLES30.GL_ACTIVE_UNIFORMS, numberOfUniforms, 0);
81 81

  
82 82
      //android.util.Log.d("program", "number of active uniforms="+numberOfUniforms[0]);
83 83
      }
......
181 181
    int maxV,maxF;
182 182
    int[] param = new int[1];
183 183

  
184
    GLES20.glGetIntegerv(GLES20.GL_MAX_VERTEX_UNIFORM_VECTORS, param, 0);
184
    GLES30.glGetIntegerv(GLES30.GL_MAX_VERTEX_UNIFORM_VECTORS, param, 0);
185 185
    maxV = param[0];
186
    GLES20.glGetIntegerv(GLES20.GL_MAX_FRAGMENT_UNIFORM_VECTORS, param, 0);
186
    GLES30.glGetIntegerv(GLES30.GL_MAX_FRAGMENT_UNIFORM_VECTORS, param, 0);
187 187
    maxF = param[0];
188 188

  
189 189
    //Log.d("program", "Max vectors in vertex shader: "+maxV);
......
210 210
  private static int compileShader(final int shaderType, final String shaderSource)
211 211
  throws FragmentCompilationException,VertexCompilationException
212 212
    {
213
    int shaderHandle = GLES20.glCreateShader(shaderType);
213
    int shaderHandle = GLES30.glCreateShader(shaderType);
214 214

  
215 215
    if (shaderHandle != 0)
216 216
      {
217
      GLES20.glShaderSource(shaderHandle, shaderSource);
218
      GLES20.glCompileShader(shaderHandle);
217
      GLES30.glShaderSource(shaderHandle, shaderSource);
218
      GLES30.glCompileShader(shaderHandle);
219 219
      final int[] compileStatus = new int[1];
220
      GLES20.glGetShaderiv(shaderHandle, GLES20.GL_COMPILE_STATUS, compileStatus, 0);
220
      GLES30.glGetShaderiv(shaderHandle, GLES30.GL_COMPILE_STATUS, compileStatus, 0);
221 221

  
222
      if (compileStatus[0] != GLES20.GL_TRUE )
222
      if (compileStatus[0] != GLES30.GL_TRUE )
223 223
        {
224
        GLES20.glDeleteShader(shaderHandle);
224
        GLES30.glDeleteShader(shaderHandle);
225 225
        shaderHandle = 0;
226 226
        }
227 227
      }
228 228

  
229 229
    if (shaderHandle == 0)
230 230
      {
231
      String error = GLES20.glGetShaderInfoLog(shaderHandle);
231
      String error = GLES30.glGetShaderInfoLog(shaderHandle);
232 232

  
233 233
      switch(shaderType)
234 234
        {
235
        case GLES20.GL_VERTEX_SHADER  : throw new VertexCompilationException(error);
236
        case GLES20.GL_FRAGMENT_SHADER: throw new FragmentCompilationException(error);
235
        case GLES30.GL_VERTEX_SHADER  : throw new VertexCompilationException(error);
236
        case GLES30.GL_FRAGMENT_SHADER: throw new FragmentCompilationException(error);
237 237
        default                       : throw new RuntimeException(error);
238 238
        }
239 239
      }
......
268 268

  
269 269
    sanitizeMaxValues();
270 270

  
271
    final int vertexShaderHandle   = compileShader(GLES20.GL_VERTEX_SHADER  , vertexHeader   + vertexShader  );
272
    final int fragmentShaderHandle = compileShader(GLES20.GL_FRAGMENT_SHADER, fragmentHeader + fragmentShader);
271
    final int vertexShaderHandle   = compileShader(GLES30.GL_VERTEX_SHADER  , vertexHeader   + vertexShader  );
272
    final int fragmentShaderHandle = compileShader(GLES30.GL_FRAGMENT_SHADER, fragmentHeader + fragmentShader);
273 273

  
274 274
    mProgramHandle = createAndLinkProgram(vertexShaderHandle, fragmentShaderHandle, mAttributeName);
275 275

  
......
277 277

  
278 278
    for(int i=0; i<mNumAttributes; i++)
279 279
      {
280
      mAttribute[i] = GLES20.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
280
      mAttribute[i] = GLES30.glGetAttribLocation( mProgramHandle, mAttributeName[i]);
281 281
      }
282 282
    }
283 283

  
......
298 298
 */
299 299
  public void useProgram()
300 300
    {
301
    GLES20.glUseProgram(mProgramHandle);
301
    GLES30.glUseProgram(mProgramHandle);
302 302

  
303 303
    for(int i=0; i<mNumAttributes; i++)
304
      GLES20.glEnableVertexAttribArray(mAttribute[i]);
304
      GLES30.glEnableVertexAttribArray(mAttribute[i]);
305 305
    }
306 306
  }
307 307

  

Also available in: Unified diff