2016-02-20 41 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版本)無關。