如何写入纹理缓冲区对象?

use*_*451 3 load image glsl

我正在使用这样的纹理缓冲对象:

glGenBuffers(1, &tbo);
glBindBuffer(GL_TEXTURE_BUFFER, tbo);
glBufferData(GL_TEXTURE_BUFFER, maxSize*sizeof(float), faceNormals.data(), GL_STATIC_DRAW);
glGenTextures(1, &tbo_tex);
glBindBuffer(GL_TEXTURE_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

我可以使用texelFetch(u_tbo_tex,index)在我的计算着色器中读取它,但是如何更新此值?

谢谢!路易斯

joz*_*yqk 5

将它绑定为samplerBuffer,因为我认为你正在做的texelFetch()将给你只读访问.不确定这个缓存是否更好,但imo可能比它快一点imageLoad().

要从计算着色器写入纹理缓冲区,请使用image_load_store.

它也值得一提SSBOs(有什么区别?这里这里).

变换反馈也可以直接从顶点着色器输出写入缓冲对象,从几何着色器执行流压缩,但这不适用于您的计算着色器.