OpenGL ES 2.0: glGetShaderiv не меняя параметры

У меня есть этот код:

String vertexShaderText = 
            "void main()\n"
            + "{\n"
            + "}\n";
    int vertexShader = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
    GLES20.glShaderSource(vertexShader, vertexShaderText);
    GLES20.glCompileShader(vertexShader);
    int[] err = new int[1];
    err[0] = 555;
    GLES20.glGetShaderiv(vertexShader, GLES20.GL_COMPILE_STATUS, err, 0);

И err [0] никогда не меняется. Если строка комментария "err[0] = 555;", значение err [0] будет 0.

vertexShader имеет значение 43(не ноль) и этот код из функции переопределения

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) 
{}

Может быть, у меня проблемы с видеокартой устройства? Спасибо!


та же проблема. У меня нет ошибки компиляции. Просто функция glGetShaderiv не возвращает результат. Здесь у меня есть ошибка [0] == 0

String vertexShaderText = 
            "void main()"
            + "{"
            + "     gl_Position = vec4(0.0, 0.0, 0.0, 0.0);"
            + "}";
    int vertexShader = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
    GLES20.glShaderSource(vertexShader, vertexShaderText);
    GLES20.glCompileShader(vertexShader);
    int[] err = new int[1];
    GLES20.glGetShaderiv(vertexShader, GLES20.GL_COMPILE_STATUS, err, 0);

1 ответ

Вы должны записать значение обратно в gl_Position,

В своем основном теле напишите gl_Position = vec4(0.0f,0.0f,0.0f,0.0f);; это должно позволить шейдеру скомпилироваться.

Вы также должны сообщить Dalvik, что хотите использовать контекст OpenGL ES 2.0; это делается по телефону setEGLContextVersion(2),

Другие вопросы по тегам