2013-06-26 81 views
0

我可以像這樣在我的着色器設定值:Open GL ES 2.0:如何查詢着色器中的值?

public void setOpacity(float op){ 

    GLES20.glUseProgram(iProgId); 

    // get handle to transformation matrix 
    mOpacityHandle = GLES20.glGetUniformLocation(iProgId, "opValue"); 

    //Apply the opacity value 
    GLES20.glUniform1f(mOpacityHandle, op); 

} 

這工作正常(在這種特定情況下,我使用這個代碼來設置我的四邊形的不透明度)

但是,怎麼會我能夠查詢我剛剛從着色器設置的值?例如要在getOpacity方法中使用?

回答

1

OpenGL ES沒有規定從任何着色器讀取值。這就是着色器代碼真的很難調試的原因。

可以使用glReadPixels()回讀片段着色器渲染到幀緩衝區中的內容,但這太慢了,它實際上僅作爲調試技術使用。

1

不能回讀着色器寫入值,但你可以回讀均勻使用glGetUniformfv程序狀態的值。

。因此,對應於你的二傳手,吸氣會是這樣的:

public float getOpacity(void){ 
    float value; 

    mOpacityHandle = GLES20.glGetUniformLocation(iProgId, "opValue"); 

    GLES20.glGetUniformfv(iProgId, mOpacityHandle, &value); 
    return value; 
} 

進一步信息,請參見Khronos man pages

+0

這是一個很好的觀點,但我認爲glGetUniform只允許您從着色器回讀輸入到着色器的相同值,所以它不是特別有用。 – ClayMontgomery