在GLSL片段着色器中,如何在特定的mipmap级别访问texel?

时间:2010-09-03 11:20:11

标签: opengl gpgpu mipmaps

我使用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输出,包含所有支持的扩展名。

3 个答案:

答案 0 :(得分: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编译器的错误/警告是什么?

答案 1 :(得分:1)

尝试:

glGenerateMipmapEXT(GL_TEXTURE_2D);
绑定纹理后

。 (在进行渲染之前)

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

答案 2 :(得分:1)

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

我不知道GLSL的后期版本是否可能改变了这一点。