我想将unsigned short
一大堆元组(矩形几何)传递给我的片段着色器,并能够使用整数纹理坐标按原样对其进行采样,为此我正在尝试如下所示的一维纹理,但只是空白( 0) 值。
纹理创建和初始化:
GLushort data[128][2];
// omitted array initialization
GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_1D, tex);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAX_LEVEL, 0);
glTexImage1D(
GL_TEXTURE_1D,
0,
GL_RG16UI,
128,
0,
GL_RG_INTEGER,
GL_UNSIGNED_SHORT,
data
);
纹理传递给着色器:
int tex_unit = 0;
glActiveTexture(GL_TEXTURE0 + tex_unit);
glBindTexture(GL_TEXTURE_1D, tex);
glUniform1iv(loc, 1, &tex_unit);
调试片段着色器:
#version 330 core
out vec4 out_color;
uniform usampler1D tex;
void main()
{
uvec4 rect = texelFetch(tex, 70, 0);
uint w = rect.r;
uint h = rect.g;
out_color = w > 0u ? vec4(1) : vec4(0);
}
确定有效的事情:数组中的非零数据data
、纹理图像单元设置和采样器统一初始化。
OpenGL 4.1、OSX 10.11.6“埃尔卡皮坦”