В шейдерном фрагменте GLSL, как получить доступ к texel на определенном уровне mipmap? - PullRequest
6 голосов
/ 03 сентября 2010

Я использую OpenGL для выполнения некоторых вычислений GPGPU через комбинацию одного вершинного шейдера и одного фрагментного шейдера.Мне нужно сделать вычисления на изображении в другом масштабе.Я хотел бы использовать mipmaps, поскольку их генерация может быть автоматической и аппаратно ускоренной.Однако мне не удается получить доступ к текстурам mipmap во фрагментном шейдере.

Я включил автоматическое создание mipmap: glTexParameteri (GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

Я безуспешно пытался использовать texture2DLod в шейдере, он просто давал нормальную текстуру.Я также попытался использовать glTextureParameteri (GL_BASE_LEVEL, X) в основной программе, и это ничего не изменило.

Как бы вы это сделали?

Я использую Linux.Моя графическая карта Nvidia Quadro довольно старая. Здесь - мой вывод glxinfo со всеми поддерживаемыми расширениями.

Ответы [ 3 ]

3 голосов
/ 03 сентября 2010
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 должен иметь тип float.О каких ошибках / предупреждениях сообщает компилятор GLSL?

1 голос
/ 29 сентября 2011

В спецификации GLSL 1.20 (раздел 8.7) говорится, что фрагментные шейдеры не могут выбирать свой собственный уровень mipmap (и что функция Lod текстуры * доступна только в вершинных шейдерах).Во всяком случае, вы можете использовать параметр смещения для вариантов без Lod, чтобы изменить уровень mipmap, но он может изменить его только относительно того, что карта уже рассчитала для вас.

Надеюсьне знаю, могли ли последние версии GLSL изменить это.

1 голос
/ 30 ноября 2010

попробовать:

glGenerateMipmapEXT(GL_TEXTURE_2D);

после связывания текстуры. (И перед рендерингом конечно)

glTexParameteri-GL_GENERATE_MIPMAP устарела, я думаю ... MfG Digi

...