2016-02-20 40 views
1

我想附加一个几何着色器到我现有的(和工作)顶点和片段着色器。负责建设项目的片段:在Android上使用GLES31ext来编译几何着色器?

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上的几何着色器?

  • 为什么没有错误?

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

+0

'glGetShaderiv'只需要3个参数。 (https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderiv.xml),但是你用4来调用它。你确定你正在检查错误吗? – MuertoExcobito

+0

@MuertoExcobito:对不起,我没有提到它,但这是android java代码,而不是C++。 [链接](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版本)无关。