Подтвердить что ты не робот

Узнайте, активен ли GL_TEXTURE_2D в шейдере

Я хотел бы знать, активна ли GL_TEXTURE_2D в шейдере.

Я привязываю цвет к шейдеру, а также к активной текстуре (если установлен GL_TEXTURE_2D) и нужно объединить эти два.

Итак, если текстура связана, смешайте цвет и текстуру (цвет sampler2D *), и если текстуры не связаны, используйте цвет.

Или я должен пойти другим путем?

4b9b3361

Ответ 1

Не совсем понятно, что вы подразумеваете под "GL_TEXTURE_2D is active" или "GL_TEXTURE_2D установлен".

Обратите внимание на следующее:

  • glEnable(GL_TEXTURE_2D) не влияет на ваш (фрагмент) шейдер. Он параметризует часть фиксированной функции вашего конвейера, которую вы только что заменили, используя фрагментарный шейдер.
  • Внутри шейдера GLSL нет "прямого" / "чистого" способа, существует ли достоверная текстура, связанная с блоком текстур, связанным с вашим сэмплером текстур (насколько мне известно).
  • Начиная с GLSL 1.3 вам может понадобиться использовать textureSize(sampler, 0).x > 0 для обнаружения наличия допустимой текстуры, связанной с семплером, но это может привести к поведению undefined.
  • Расширение ARB_texture_query_levels действительно явно указывает, что textureQueryLevels(gsampler2D sampler) возвращает 0, если нет текстуры, связанной с семплером.

Должен ли ты пойти другим путем? Я так думаю: вместо того, чтобы принимать решение внутри шейдера, просто привяжите текстуру 1x1 пикселя "белый" и безоговорочно попробуйте эту текстуру и умножьте результат на цвет, который, очевидно, вернет 1.0 * color. Это будет более портативным и быстрым.