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