OpenGL ES 2.x: связать оба `GL_TEXTURE_2D` и` GL_TEXTURE_CUBE_MAP` в одном и том же текстурном блоке изображения? - PullRequest
6 голосов
/ 31 марта 2012

Что произойдет, если вы связываете (разные текстуры) с GL_TEXTURE_2D и GL_TEXTURE_CUBE_MAP в одной и той же единице изображения текстуры?

Например, предположим, что я связываю одну текстуру с GL_TEXTURE0 GL_TEXTURE_2D цель и другую текстуру к цели GL_TEXTURE_CUBE_MAP той же единицы текстуры.Могу ли я тогда иметь две одинаковые переменные, одну a sampler2D, а другую a samplerCube и установить обе в 0 (для обозначения GL_TEXTURE0)?

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

1 Ответ

8 голосов
/ 27 июня 2012

Я не нашел ничего, что описывает, если вы можете связать 2D-текстуру и текстуру карты куба в одном и том же текстурном блоке, но (или так ) Я думаю, это вполне возможно. Имеет смысл разрешить это, так как все функции модификации текстуры требуют, чтобы вы в любом случае указали цель текстуры для работы.

Но спецификация OpenGL ES 2 явно запрещает использовать оба в шейдере одновременно, как говорится в главе 2.10:

Нельзя иметь переменные разных типов сэмплера. указывая на один и тот же текстурный блок изображения внутри программного объекта. это ситуация может быть обнаружена только при следующей команде рендеринга, и тогда будет сгенерирована ошибка INVALID_OPERATION.

Таким образом, вы не можете использовать и sampler2D, и samplerCube, относящиеся к одному и тому же текстурному блоку, чтобы изменить пределы текстурных блоков вашей реализации.

...