OpenGL ES 2.0修改着色器变量

时间:2015-10-29 17:40:59

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

我认为你可以修改一个Uniform变量,然后使用这个方法在绘制之后获取变量,但是在构建着色器时它会抛出一个无法修改的统一异常。

glGetUniformfv(PROGRAM_INT,UNIFORM_INT,PARAMS,0);

我希望着色器修改变量并返回该变量吗?

有没有办法修改着色器变量,并使用GL方法来获取该变量?

1 个答案:

答案 0 :(得分:2)

没有。均匀变量在着色器代码中是只读的。它们用于将值从Java / C ++客户端代码传递到着色器代码,而不是其他方式。

在ES 2.0中,我能想到的唯一方法是将着色器生成的值返回到客户端代码中,将它们作为片段着色器输出中的颜色值生成。然后,它们将成为帧缓冲内容的一部分,您可以使用glReadPixels()回读它。

在较新版本的OpenGL ES中,以及最新版本的完整OpenGL中,还有其他选项。例如,ES 3.1引入了Shader Storage Buffers,它们也可以在OpenGL 4.3及更高版本中使用。它们允许着色器将值写入缓冲区,您可以从客户端代码中读回。