6

我正在使用 OpenGL 通过一个顶点着色器和一个片段着色器的组合来进行一些 GPGPU 计算。我需要对不同比例的图像进行计算。我想使用 mipmap,因为它们的生成可以是自动的和硬件加速的。但是我无法访问片段着色器中的 mipmap 纹理。

我启用了自动 mipmap 生成:glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

我尝试在着色器中使用texture2DLod,但没有成功,它只是保持正常纹理。我还尝试在主程序中使用 glTextureParameteri(GL_BASE_LEVEL, X) 并没有改变任何东西。

你会怎么做?

我正在使用 Linux。我的显卡是相当老的 Nvidia Quadro。是我的 glxinfo 输出,包含所有受支持的扩展。

4

3 回答 3

3
gvec4 textureLod (gsampler1D sampler, float P, float lod)
gvec4 textureLod (gsampler2D sampler, vec2 P, float lod)
gvec4 textureLod (gsampler3D sampler, vec3 P, float lod)
gvec4 textureLod (gsamplerCube sampler, vec3 P, float lod)
float textureLod (sampler1DShadow sampler, vec3 P, float lod)
float textureLod (sampler2DShadow sampler, vec3 P, float lod)
gvec4 textureLod (gsampler1DArray sampler, vec2 P, float lod)
gvec4 textureLod (gsampler2DArray sampler, vec3 P, float lod)
float textureLod (sampler1DArrayShadow sampler, vec3 P, float lod)

您是否尝试过其中一种内置的?也lod必须是浮点类型。报告 GLSL 编译器有哪些错误/警告?

于 2010-09-03T13:56:24.113 回答
1

GLSL 1.20 规范(第 8.7 节)规定片段着色器不能选择自己的 mipmap 级别(并且纹理*Lod 函数仅在顶点着色器中可用)。如果有的话,您可以使用非 Lod 变体的偏差参数来更改 mipmap 级别,但它只能相对于卡已经为您计算的内容进行更改。

我不知道 GLSL 的后续版本是否会改变这一点。

于 2011-09-29T18:44:55.047 回答
1

尝试:

glGenerateMipmapEXT(GL_TEXTURE_2D);

绑定纹理后。(当然在渲染之前)

我认为已glTexParameteri-GL_GENERATE_MIPMAP弃用... MfG Digi

于 2010-11-30T12:28:30.960 回答