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