我有一个工作代码,我正在从纹理缓冲区读取着色器中的 vec4 值。
在客户端,我创建了一个位移向量缓冲区:
vec4 vector1 : vec4(x1, y1, z1, w1);
vec4 vector2 : vec4(x2, y2, z2, w2);
vec4 vector3 : vec4(x3, y3, z3, w3);
..
然后我创建一个顶点缓冲区,其中包含vector1、vector2、vector3 ....
接下来,我创建一个纹理并将上面的缓冲区绑定到它使用:
glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, bufferID);
我选择 GL_RGBA32F 是因为 x1、y1、z1、w1 等都是浮点数。
在着色器中,我可以使用以下方法获取单个向量:
vec4 vector1 = texelFetch(samplerObj, 0);
vec4 vector2 = texelFetch(samplerObj, 1);
.
.
但是,现在假设我的位移向量不是 vec4,而是一个整数。IE
int vector1 = x1; //(int is 32 bit unsigned)
int vector2 = x2; //(int is 32 bit unsigned)
有人可以告诉相应的 internalFormat 是什么吗?是吗
glTexBuffer(GL_TEXTURE_BUFFER, GL_R32UI, bufferID);
我将如何在着色器中使用 texelFetch 获取值?是吗
int vector1 = texelFetch(samplerObj, 0);
或者
int vector1 = texelFetch(samplerObj, 0).r ?
我很困惑,因为 texelFetch 应该返回一个有 4 个组件的 texel,所以我必须使用结果的红色组件吗?