15

Is it possible to use vertex or pixel shaders in android app? please give an example if possible of setting up shader.

genpfault
  • 51,148
  • 11
  • 85
  • 139
Yuriy Vikulov
  • 2,469
  • 5
  • 25
  • 32
  • 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 Answers1

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