2016-02-20 14 views
1

Я хотел бы приложить геометрический шейдер к существующим (и рабочим) вершинам и фрагментам шейдеров. Фрагмент кода отвечает за создание программы:Использование GLES31ext на Android для компиляции геометрического шейдера?

int geometryShader = GLES31.glCreateShader(GLES31Ext.GL_GEOMETRY_SHADER_EXT); 
    glShaderSource(geometryShader, geometryShaderSource); 
    glCompileShader(geometryShader); 

    // Error checking: 
    glGetShaderiv(geometryShader, GL_COMPILE_STATUS, success, 0); 
    if(success[0] == 0) 
     Log.v(Debug.shaderHelper, "Geometry Shader Compile Failed: " + glGetShaderInfoLog(geometryShader)); 


    int program = glCreateProgram(); 
    glAttachShader(program, vertexShader); 
    glAttachShader(program, geometryShader); 
    glAttachShader(program, fragmentShader); 

    glLinkProgram(program); 

А вот геометрия шейдеров:

#version 310 es 
layout (triangles) in; 
layout (triangle_strip) out; 
layout (max_vertices = 3) out; 

void main(void){ 
    int i 

    for (i = 0; i < gl_in.length(); i++){ 
     //gl_Position = gl_in[i].gl_Position; 

     gl_Position = vec4(0.0); 

     //EmitVertex(); 
    } 

//EndPrimitive(); 
} 

Этот шейдер должен быть просто сквозная шейдер (только для тестирования на данный момент). Проблема в том, что код шейдера геометрии не влияет на окончательную обработку вершин. Несмотря на то, что я прокомментировал важные части кода, он все еще работает. (Не говоря уже о недостающей точке с запятой.)

Ошибок не зарегистрировано, хотя я проверяю их.

Так что мои вопросы:

  • Как я могу скомпилировать геометрии шейдер на андроид?

  • Почему нет ошибок?

  • Могу ли я просто прикрепить геометрический шейдер к программе точно так же, как вершинный и фрагментарный шейдер?

+0

'glGetShaderiv' принимает только 3 параметра. (https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderiv.xml), но вы вызываете его с 4. Вы уверены, что правильно проверяете ошибку? – MuertoExcobito

+0

@MuertoExcobito: Мне жаль, что я не упоминал об этом, но это код javascript для Android, а не C++. [link] (http://developer.android.com/reference/android/opengl/GLES20.html#glGetShaderiv (int, int, int [], int)) – andras

ответ

1

Код, который я разместил, в порядке, это то, как вы добавляете геометрический шейдер. Мое устройство не поддерживает это расширение, поэтому он не дал никаких журналов ошибок. Оказывается, версия android os не имеет ничего общего с версиями и расширениями opengl (версия 5.0 os и 3.0 opengl).