我可以在我的着色器中设置一个值,如下所示:
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
方法中使用?
答案 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。