【问题标题】:Sampling unsigned integers from 1D texture using integer texture coordinates使用整数纹理坐标从 1D 纹理中采样无符号整数
【发布时间】:2016-09-20 00:44:56
【问题描述】:

我想将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 “El Capitan”

【问题讨论】:

  • 作为创建和采样纹理的一个有争议的“证据”,如果纹理图像数据像这样填充,调试着色器将呈现白色,而其他所有内容都保持不变:glTexImage1D(GL_TEXTURE_1D, 0, GL_RG, 128, 0, GL_RG, GL_UNSIGNED_SHORT, data);(尽管这使得对我来说没什么意义,因为如果我很好地理解了文档,internalFormat 必须与采样器类型匹配,在这种情况下,第一个是 float,第二个是 unsigned int)

标签: c opengl glsl texture1d


【解决方案1】:

经过一番谷歌搜索和反复试验,我发现了this post,它指出整数纹理格式(例如,GL_RG16UI 内部格式)GL_LINEAR 无法指定过滤,只有GL_NEAREST 适用,因此,一切都通过以下纹理创建代码解决:

GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_1D, tex);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
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_BYTE,
    data
);

【讨论】:

  • 这救了我的命!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 2018-12-08
相关资源
最近更新 更多