【发布时间】:2010-09-03 11:20:10
【问题描述】:
我正在使用 OpenGL 通过一个顶点着色器和一个片段着色器的组合来进行一些 GPGPU 计算。我需要对不同比例的图像进行计算。我想使用 mipmap,因为它们的生成可以是自动的和硬件加速的。但是我无法访问片段着色器中的 mipmap 纹理。
我启用了自动 mipmap 生成: glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
我尝试在着色器中使用texture2DLod,但没有成功,它只是保持正常纹理。我还尝试在主程序中使用 glTextureParameteri(GL_BASE_LEVEL, X) 并没有改变任何东西。
你会怎么做?
我正在使用 Linux。我的显卡是相当老的 Nvidia Quadro。 Here 是我的 glxinfo 输出,包含所有支持的扩展。
【问题讨论】:
-
我赞成您的问题,因为它“有用且清晰”,但您似乎做的一切都很好。 glTextureSize(sampler, lod) 说什么?(在您的片段着色器中)
-
我没有这样的功能。我认为我的卡太旧了(我刚刚检查了 GLSL 的版本是 GL_ARB_shading_language_100)。这可以解释很多,但我不明白为什么着色器会接受 *Lod 变体而不抱怨它是否不受支持......
-
我也不明白为什么 glTextureParameteri(GL_BASE_LEVEL, X) 和 glTextureParameteri(GL_MAX_LEVEL, X) 调用也没有效果。这与 GLSL 无关……我现在很困惑。
-
我有一些消息。我设置了 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST) 和 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST) 和 texture2DLod 调用现在都返回 (1.0, 1.0, 1.0, 1.0)...我猜 mipmaps 在片段阴影中查找我的显卡,我仍然认为它没有抱怨很奇怪。但是,现在 glTextureParameteri(GL_BASE/MAX_LEVEL, X) 似乎可以工作了。
-
最后一件事:从“相关”部分我读到了stackoverflow.com/questions/3071006/…。然后我尝试了 texture2D(sampler, coord, bias) 结构,我可以在片段着色器中访问所需的 mipmap 级别。我认为我的问题已经解决了,但我对尝试使用不受支持的功能时没有运行时错误感到惊讶......或者也许我做错了什么:)。