我想将几何着色器附加到我现有的(和工作的)顶点和片段着色器上。负责构建程序的代码片段:
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 :(得分:1)
我发布的代码很好,这就是添加几何着色器的方法。我的设备不支持此扩展,这就是它没有提供任何错误日志的原因。事实证明,android os版本与opengl版本和扩展(5.0 os和3.0 opengl版本)无关。