2013-10-06 4 views
0

В своем недавнем учебнике, я наткнулся на это, чтобы генерировать мип для «textureObject»Что такое правильный способ генерации мип

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, textureObject); 
glBindSampler(0, samplerObject); 
glGenerateMipmap(GL_TEXTURE_2D); 

Я хочу ставить под сомнение использование

glActiveTexture(GL_TEXTURE0); 
glBindSampler(0, samplerObject); 

перед вызовом 'glGenerateMipmap. Потому что я получаю тот же результат, что и раньше, если я прокомментирую эти две строки.

Эти строки присутствуют только для того, чтобы убедиться, что правильная единица текстуры и пробоотборник связаны перед генерированием mipmaps?

или Эти строки на самом деле говорят, какую текстуру выбрать, и какой тип выборки сделать для создания mipmaps?

Что произойдет, если я пропущу эти 2 строки?

ответ

1

от glGenerateMipmap reference

Определяет цель текстуры активного текстурного блока, к которому привязан объект текстуры которого мипмапов будет сгенерирован

и больше

Заменяет поколения MIPMAP Уровни уровня texel массива уровня + 1 до q с массивами, полученными из массива уровня, независимо от их предыдущего содержимого. Все остальные массивы mimap, включая массив базового уровня, остаются неизменными этим вычислением.

Таким образом, если вы используете

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, textureObject); 
glActiveTexture(GL_TEXTURE1); // << 
glGenerateMipmap(GL_TEXTURE_2D); 

Вы получите мип для другого объекта текстуры (если текстура блок 1 имеет другой объект текстуры, связанный)

Что касается пробников: они могут переопределить GL_TEXTURE_BASE_LEVEL и GL_TEXTURE_MAX_LEVEL​, так что также важно использовать правильный объект сэмплера.

См хороший post from g-truck about mipmaps

+0

это пример из г-Truc уже. GL-330-FBO-mipmaps.cpp. Этот учебник связывает как текстурную единицу 0, так и пробник перед генерированием мип-карт. – viktorzeid

+0

Правильно! Я изменил ответ, так что, надеюсь, это лучше. – fen

+0

Требуется ли генерации mipmap какой-либо информации о параметрах выборки/текстуры (например, GL_TEXTURE_LOD_BIAS, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_LOD)? Потому что, если это не так, я думаю, что безопасно предположить, что нам не нужно связывать сэмплер. И о блоке текстуры: причина, по которой я спрашивал, нужен ли выбор активной текстурной единицы или нет, заключается в том, что мы знаем, что эта текстура уже привязана к блоку текстуры 0, когда мы выделили для него изображение или заданные параметры текстуры. Итак, нужно ли указывать его снова при создании mipmaps? – viktorzeid

Смежные вопросы