gpt4 book ai didi

c++ - glUniform 无法设置采样器值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:09 26 4
gpt4 key购买 nike

我正在使用 OpenGL 和 GLSL 在简单的网格上绘制纹理。

我的问题是,当我使用 glUniform1i 设置 sampler2D uniform 的值时,它没有被设置。例如在这段代码中:

glUseProgram(programObject);

glUniform1i(glGetUniformLocation(programObject, "texture"), 1);
GLint val;
glGetUniformiv(programObject,
glGetUniformLocation(programObject, "texture"),
&val);
printf("Value is %d\n", val);

命令行输出的值是 0。我检查了着色器是否正确编译,程序是否正确链接。 glGetUniformLocation 输出索引 > 0。此外,glGetError 在任何时候都不会输出任何错误。

只有当制服是采样器时才会发生这种情况。由于未设置纹理,在着色器中查询它总是返回 (0, 0, 0, 1)。 (我还使用 apitrace 检查了我的纹理是否正确绑定(bind)到 GL_TEXTURE1,这是在显示的代码之后立即完成的)。

我广泛搜索了这个问题,但只找到一个与此类似的实例 here .解决方案是初始化 GLEW,但这对我不起作用。

我很乐意提供所需的任何扩展信息(或来自 apitrace 的跟踪)。

编辑

这是着色器:

uniform sampler2D texture;

varying vec2 textureCoord;

void main() {
gl_FragColor = texture2D(texture, textureCoord);
}

解决方案

经过一番努力,我设法解决了这个问题。

事实证明,这个问题不是因为没有设置制服,因为无论实际值如何,总是为采样器返回 0 似乎是 gl 实现的一个怪癖。这仅在 Intel 的 Sandy Bridge 驱动程序下发生。在其他实现下测试代码总是返回正确的采样器值。

纹理返回(0, 0, 0, 1) 的问题总是因为我在生成纹理时犯了一个错误。

现在 glGerUniformiv 仍然返回 0,但使用的纹理是正确的。

最佳答案

解决方案

经过一番努力,我设法解决了这个问题。

事实证明,这个问题不是因为没有设置制服,因为无论实际值如何,总是为采样器返回 0 似乎是 gl 实现的一个怪癖。这仅在 Intel 的 Sandy Bridge 驱动程序下发生。在其他实现下测试代码总是返回正确的采样器值。

纹理返回(0, 0, 0, 1) 的问题总是因为我在生成纹理时犯了一个错误。

现在 glGerUniformiv 仍然返回 0,但使用的纹理是正确的。

关于c++ - glUniform 无法设置采样器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com