2013-06-26 79 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