Is it possible to use vertex or pixel shaders in android app? please give an example if possible of setting up shader.
Asked
Active
Viewed 2.3k times
15
-
6@Vincent , before writing here look at date of the question. At that time there was not a lot of information even in google. However this question is a noticalbe question and the damian 's answer got lot of voteups. You should be less scattered and not not post links cause the answer should consist of descriptive information like Damian 's answer. That's why he got points – Yuriy Vikulov Apr 25 '12 at 01:44
1 Answers
35
If you're targetting andriod 2.x / OpengL ES 2, then yes, it's possible.
Here is a code example of how to load a shader:
public int createProgram(String vertexSource, String fragmentSource) {
int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource);
int pixelShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource);
int program = GLES20.glCreateProgram();
if (program != 0) {
GLES20.glAttachShader(program, vertexShader);
checkGlError("glAttachShader");
GLES20.glAttachShader(program, pixelShader);
checkGlError("glAttachShader");
GLES20.glLinkProgram(program);
int[] linkStatus = new int[1];
GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
if (linkStatus[0] != GLES20.GL_TRUE) {
Log.e(TAG, "Could not link program: ");
Log.e(TAG, GLES20.glGetProgramInfoLog(program));
GLES20.glDeleteProgram(program);
program = 0;
}
}
return program;
}
private int loadShader(int shaderType, String source) {
int shader = GLES20.glCreateShader(shaderType);
if (shader != 0) {
GLES20.glShaderSource(shader, source);
GLES20.glCompileShader(shader);
int[] compiled = new int[1];
GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
if (compiled[0] == 0) {
Log.e(TAG, "Could not compile shader " + shaderType + ":");
Log.e(TAG, GLES20.glGetShaderInfoLog(shader));
GLES20.glDeleteShader(shader);
shader = 0;
}
}
return shader;
}

Lasse V. Karlsen
- 380,855
- 102
- 628
- 825

Damian
- 5,471
- 11
- 56
- 89