OpenGL ES 3: геометрические ограничения glGenerateMipmap

Я работаю над мобильным приложением OpenGL для Android, используя OpenGL ES3.x для графики.

Я хотел бы использовать функцию glGenerateMipmap, но мне не по себе, потому что я помню, что, по крайней мере, в предыдущих версиях OpenGL, были некоторые геометрические ограничения на размер текстуры (квадратные, n-горшечные текстуры, если я правильно помню ).

Справочная страница glGenerateMipmap для OpenGL ES3 больше ничего подобного не сообщает, и беглый тест на паре устройств, кажется, подтверждает информацию.

Тем не менее, учитывая недавний выпуск OpenGL ES3 (и принимая во внимание качество некоторых мобильных реализаций OpenGL...), я бы чувствовал себя более уверенно, если бы кто-то с личным опытом подтвердит, что его можно использовать в реальный мир.

Вопрос сводится к следующему:

  1. Правда ли, что glGenerateMipmap в OpenGL ES 3 не накладывает ограничений на геометрию текстуры?
  2. И если да, то безопасно ли использовать его на неквадратных текстурах без n-pot в дикой природе?

Благодарю вас!


person Rick77    schedule 18.02.2015    source источник


Ответы (1)


Эти ограничения на отсутствие мощности двух текстур официально исчезли в ES 3.0. Соответствующий язык из спецификации ES 2.0 отсутствует в спецификации ES 3.0. В разделе E.1, в котором перечислены новые функции ES 3.0 по сравнению с ES 2.0, это также прямо упоминается:

текстуры не в степени двойки с полной поддержкой режима переноса и мипмэппингом

Так что да, вы можете смело использовать glGenerateMipmap() на текстурах NPOT. Есть одно тонкое, но важное ограничение:

Если массив level_base не был указан с внутренним форматом без размера из таблицы 3.3 или с внутренним форматом с размером, который поддерживает как цветопередачу, так и фильтрацию текстуры в соответствии с таблицей 3.13, генерируется ошибка INVALID_OPERATION.

Это означает, что, например, glGenerateMipmap() не поддерживается ни для каких целочисленных форматов (поскольку они не фильтруются текстурой), а также не для любых форматов с плавающей запятой (поскольку они не отображают цвет).

Я не думаю, что квадратность когда-либо была ограничением для текстур в OpenGL. Этого точно не было ни в ES 2.0, ни в ES 3.0.

person Reto Koradi    schedule 19.02.2015
comment
Спасибо за очень четкий и очень точный ответ (PS: вчера я был немного не в себе, и, вероятно, я придумал квадратную вещь... :)) - person Rick77; 19.02.2015