Revision 194ab46f
Added by Leszek Koltunski over 7 years ago
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
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!)