簡體   English   中英

在GLSL片段着色器中,如何在特定的mipmap級別訪問texel?

[英]In a GLSL fragment shader, how to access to texel at a specific mipmap level?

我正在使用OpenGL通過一個頂點着色器和一個片段着色器的組合來進行一些GPGPU計算。 我需要在不同規模的圖像上進行計算。 我想使用mipmap,因為它們的生成可以自動和硬件加速。 但是我無法設法訪問片段着色器中的mipmap紋理。

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

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

你會怎么做?

我正在使用Linux。 我的顯卡是Nvidia Quadro很老了。 是我的glxinfo輸出,包含所有支持的擴展。

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

嘗試:

glGenerateMipmapEXT(GL_TEXTURE_2D);

綁定紋理后。 (在進行渲染之前)

不推薦使用glTexParameteri-GL_GENERATE_MIPMAP ... MfG Digi

GLSL 1.20規范(第8.7節)規定片段着色器不能選擇自己的mipmap級別(並且紋理* Lod函數僅在頂點着色器中可用)。 如果有的話,您可以將偏置參數用於非Lod變體以更改mipmap級別,但它只能相對於卡已經為您計算的內容更改它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM