подвержен ошибкам. Это всего лишь объяснение ОП по поводу этих явно противоречивых предложений.
аюсь понять текстуры, текстурные блоки и сэмплеры в OpenGL 4.5. Я прилагаю картину того, что я пытаюсь выяснить. Я думаю, что в моем примере все правильно, но я не очень уверен насчет 1D Sampler на правой стороне с вопросительным знаком.
Итак, я знаю, что OpenGL предлагает несколько текстурных блоков / точек привязки, где текстуры и семплеры могут быть связаны, чтобы они работали вместе.
Каждая из этих точек привязки может поддерживать одну из целей текстур (в моем случае я привязываю целиGL_TEXTURE_2D
а такжеGL_TEXTURE_1D
до обязательной точки0
, и другойGL_TEXTURE_2D
до обязательной точки1
).
Кроме того, сэмплеры могут быть привязаны к этим точкам привязки практически таким же образом (я привязал 2D-сэмплер к точке привязки0
на картинке).
Функции для выполнения этих операций:glBindTextureUnit
а такжеglBindSampler
.
Моей первоначальной мыслью было связать 1D-сэмплер с точкой привязки 0, и на шейдерной земле выполнить сопоставление на основе точки привязки и типа сэмплера:
layout (binding = 0) uniform sampler1D tex1D;
layout (binding = 0) uniform sampler2D tex2D;
Цитирую источник:
Каждый текстурный блок изображения поддерживает привязки ко всем целям.Таким образом, 2D-текстура и текстура массива могут быть связаны с одним и тем же блоком изображения.или разные 2D текстуры могут быть связаны в двух разных единицах изображения, не влияя друг на друга. Итак, какая текстура используется при рендеринге? В GLSL это зависит от типа сэмплера, который использует эту единицу изображения текстуры.
но я нашел следующее утверждение:
[..] звучит подозрительно, будто вы можете использовать одну и ту же текстурную единицу изображения для разных сэмплеров, если они имеют разные типы текстур. Не делай это. Спецификация явно запрещает это; если два разных сэмплера GLSL имеют разные типы текстур, но связаны с одним и тем же модулем изображения текстуры, то рендеринг не удастся.Дайте каждому сэмплеру различную текстуру изображения.
Итак, мой вопрос заключается в том, какова цель связывания разных целевых текстур с одной и той же точкой привязки, если в конечном итогеОдин Сэмплер будет привязан к этой точке привязки, заставляя вас выбирать?
Информация, которую я цитирую:https://www.khronos.org/opengl/wiki/Texture#Texture_image_units