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

4

2 回答 2

1

您不能读回着色器写入值,但可以使用 glGetUniformfv 从程序状态中读回制服的值。

因此,与您的 setter 对应的 getter 将类似于:

public float getOpacity(void){
    float value;

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

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

有关更多信息,请参阅Khronos 手册页

于 2013-06-27T23:50:49.350 回答
1

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

可以使用 glReadPixels() 将片段着色器渲染到帧缓冲区中的内容读回,但这太慢了,它实际上只能作为一种调试技术。

于 2013-06-26T23:44:58.550 回答