在Android上使用GLES31ext编译几何着色器?

时间:2016-02-20 15:57:55

标签: android opengl-es geometry-shader

我想将几何着色器附加到我现有的(和工作的)顶点和片段着色器上。负责构建程序的代码片段:

    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();
}

此着色器应该只是一个传递着色器(仅用于测试)。问题是几何着色器代码对顶点的最终处理没有影响。即使我注释掉代码的重要部分,它仍然有效。 (更不用说丢失的分号了。)

即使我检查它们,也没有记录错误。

所以我的问题是:

  • 如何在android上编译几何着色器?

  • 为什么没有错误?

  • 我可以像将顶点和片段着色器一样将几何着色器附加到程序中吗?

1 个答案:

答案 0 :(得分:1)

我发布的代码很好,这就是添加几何着色器的方法。我的设备不支持此扩展,这就是它没有提供任何错误日志的原因。事实证明,android os版本与opengl版本和扩展(5.0 os和3.0 opengl版本)无关。