【问题标题】:WebGL Texture read/write at the same timeWebGL 纹理同时读/写
【发布时间】:2012-02-14 16:27:30
【问题描述】:

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

提前致谢, 易

【问题讨论】:

    标签: textures shader webgl


    【解决方案1】:

    来自http://www.opengl.org/wiki/GLSL_:_common_mistakes 中的常见错误: “通常,您不应同时对纹理进行采样并渲染到同一纹理。这会给您带来不确定的行为。它可能适用于某些 GPU 和某些驱动程序版本,但不适用于其他版本。”

    使用乒乓方法代替两个纹理(以下教程是 OpenGL,但在 WebGL 中使用该技术应该是直截了当的):

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

    【讨论】:

    • 感谢您的回复。我想知道 webGL 是否支持不同的颜色缓冲区。但我尝试使用 glBindTexture 将纹理复制到两个图像单元。所以着色器从一个单元读取纹理并写入另一个单元,但是,它不起作用。有谁知道这是否可行?
    • 不,这是不可行的。您需要使用乒乓球方法。这是一个从它刚刚写给webglsamples.googlecode.com/hg/persistence/persistence.html的纹理中读取的样本,这里有一个关于它的视频youtube.com/watch?v=rfQ8rKGTVlg#t=31m42s
    猜你喜欢
    • 2012-11-17
    • 2012-11-18
    • 2016-08-28
    • 2012-02-21
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多