2012-02-14 83 views
1

我想用webGL着色器做一些渲染,但是我需要读取由前一帧着色器生成的数据数组。我正在使用着色器写入纹理并使用相同的着色器读取该纹理。但是,这不起作用。着色器可以从最后一帧读取纹理并完美地写入帧缓冲区,但它不能再次写入纹理。我也尝试将纹理复制到其他图像单元,但它也不起作用。我想知道是否对webGL的纹理有任何限制,您无法在同一着色器中进行读/写操作?或者我做错了什么?WebGL纹理同时读取/写入

由于提前, 易

回答

5

从常见的错误在http://www.opengl.org/wiki/GLSL_:_common_mistakes: “通常情况下,你不应该品尝的纹理和渲染到相同的纹理,同时这将使你未定义行为只是有可能。在某些GPU上工作,并且使用某些驱动程序版本,但不是其他版本。“

改用两个纹理采用乒乓方式(下面的教程是OpenGL的,但使用的WebGL技术应该是直线前进):

http://www.mathematik.tu-dortmund.de/~goeddeke/gpgpu/oldstuff/HelloPingPong.pdf

+0

感谢您的答复。我想知道如果webGL支持不同的颜色缓冲区。但我试图通过使用glBindTexture将纹理复制到两个图像单元。所以着色器从一个单元读取纹理并写入另一个单元,但是,它不起作用。有没有人知道这是否可行? – 2012-02-14 18:15:37

+1

不是,这是不可行的。你需要使用乒乓方法。 Hre是一个从它刚写到http://webglsamples.googlecode.com/hg/persistence/persistence.html的纹理中读取的样本,并且有一个关于它的视频http://www.youtube.com/watch?v= rfQ8rKGTVlg#吨= 31m42s – gman 2012-02-14 22:56:49