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