Open GL ES 2.0:如何查询着色器中的值?

时间:2013-06-26 20:44:59

标签: android opengl-es-2.0 shader getter-setter

我可以在我的着色器中设置一个值,如下所示:

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方法中使用?

2 个答案:

答案 0 :(得分:1)

OpenGL ES没有从任何着色器读取值的规定。这就是着色器代码真的很难调试的原因。

可以使用glReadPixels()读回片段着色器渲染到帧缓冲区的内容,但这非常慢,以至于它实际上只作为调试技术使用。

答案 1 :(得分:1)

您无法读回着色器写入的值,但您可以使用glGetUniformfv从程序状态读回统一的值。

因此,与你的setter相对应的getter将是:

public float getOpacity(void){
    float value;

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

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

有关详细信息,请参阅Khronos man pages