我认为你可以修改一个Uniform变量,然后使用这个方法在绘制之后获取变量,但是在构建着色器时它会抛出一个无法修改的统一异常。
glGetUniformfv(PROGRAM_INT,UNIFORM_INT,PARAMS,0);
我希望着色器修改变量并返回该变量吗?
有没有办法修改着色器变量,并使用GL方法来获取该变量?
答案 0 :(得分:2)
没有。均匀变量在着色器代码中是只读的。它们用于将值从Java / C ++客户端代码传递到着色器代码,而不是其他方式。
在ES 2.0中,我能想到的唯一方法是将着色器生成的值返回到客户端代码中,将它们作为片段着色器输出中的颜色值生成。然后,它们将成为帧缓冲内容的一部分,您可以使用glReadPixels()
回读它。
在较新版本的OpenGL ES中,以及最新版本的完整OpenGL中,还有其他选项。例如,ES 3.1引入了Shader Storage Buffers,它们也可以在OpenGL 4.3及更高版本中使用。它们允许着色器将值写入缓冲区,您可以从客户端代码中读回。