2010-09-03 76 views
6

我使用OpenGL通過一個頂點着色器和一個片段着色器的組合來完成一些GPGPU計算。我需要對不同規模的圖像進行計算。我想使用mipmap,因爲他們的代可以自動和硬件加速。但是我無法設法訪問片段着色器中的mipmap紋理。在GLSL片段着色器中,如何在特定的mipmap級別訪問texel?

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

我試着在着色器中使用texture2DLod而沒有運氣,它只是保持正常的紋理。我也嘗試在主程序中使用glTextureParameteri(GL_BASE_LEVEL,X),它沒有改變任何東西。

你會怎麼做?

我正在使用Linux。我的顯卡是Nvidia Quadro,相當老舊。 Here是我的glxinfo輸出與所有受支持的擴展。

+0

我上傳了你的問題,因爲它「有用而且清晰」,但你似乎一切正常。 glTextureSize(sampler,lod)說什麼?(在你的片段着色器中) – Calvin1602 2010-09-03 13:21:03

+0

我沒有這樣的功能。我認爲我的卡太舊了(我剛剛檢查過,GLSL的版本是GL_ARB_shading_language_100)。這將解釋很多,但我不明白爲什麼着色器會接受* Lod變體而不抱怨它不被支持... – Jim 2010-09-06 11:20:54

+0

我不明白爲什麼glTextureParameteri(GL_BASE_LEVEL,X)和glTextureParameteri(GL_MAX_LEVEL,X )調用也沒有效果。這不是GLSL相關的...我現在很困惑。 – Jim 2010-09-06 11:24:36

回答

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編譯器有哪些錯誤/警告?

+0

嗨,很抱歉,很長的延遲。我嘗試了texture2DLod函數。奇怪的是,無論我給「lod」賦予什麼樣的價值,返回的值都與標準的texture2D查找完全相同。在着色器編譯中不會產生錯誤甚至警告。 – Jim 2010-09-06 11:18:43

1

嘗試:

glGenerateMipmapEXT(GL_TEXTURE_2D); 

綁定紋理後。 (而這樣做當然渲染之前)

glTexParameteri-GL_GENERATE_MIPMAP已被棄用我想...... MFG的Digi

1

的GLSL 1.20規範(部分8.7)指出,片段着色不能選擇自己的紋理貼圖的水平(這紋理* Lod函數僅在頂點着色器中可用)。如果有的話,你可能會使用非Lod變體的bias參數來改變mipmap級別,但它只能改變它相對於卡已經爲你計算的值。

我不知道GLSL的後期版本是否可能改變了這一點。

+0

事實上,他們已經改變了這一點,正如這個問題的第一個答案所表明的那樣。 – 2012-08-18 11:05:16

相關問題