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上的几何着色器?
为什么没有错误?
我可以像顶点和片段着色器一样将几何着色器附加到程序中吗?
'glGetShaderiv'只需要3个参数。 (https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderiv.xml),但是你用4来调用它。你确定你正在检查错误吗? – MuertoExcobito
@MuertoExcobito:对不起,我没有提到它,但这是android java代码,而不是C++。 [链接](http://developer.android.com/reference/android/opengl/GLES20.html#glGetShaderiv(int,int,int [],int)) – andras