Типы доступных дискретизаторов:
□ sampl erlD - предоставляет доступ к одномерной текстуре;
□ sampl er2D - предоставляет доступ к двухмерной текстуре;
□ sampl er3D - предоставляет доступ к трехмерной текстуре;
□ sampl erCube - предоставляет доступ к кубической текстуре;
□ sampl erlDShadow - предоставляет доступ к одномерной текстуре глубины со сравнением;
купить принтер штрихкодов и этикеток.
□ sampl er2DShadow - предоставляет доступ к двухмерной текстуре глубины со сравнением.
При инициализации дискретизатора реализация OpenGL записывает в него все необходимое для поиска текстур. Сами шейдеры не могут ничего туда записывать. Они могут только получить доступ к семплерам через соответствующую uniform-переменную или передать их пользователю или во встроенные функции. Семплер как входной параметр не может быть изменен, так что шейдеры не могут их редактировать.
Объявить семплер можно, например, таким образом:
uniform sampler20 Grass: (О модификаторе uniform подробно рассказывается в разделе 3.5.)
Эту переменную затем можно передать в соответствующую функцию поиска текстур:
vec4 color - texture2D(Grass. coord):
Здесь coord - переменная типа vec2, в которой содержится двухмерная координата текстуры Grass, и color - результат выполнения поиска по текстурам. И компилятор, и OpenGL API проверят, что Grass действительно двухмерная текстура и что она передается только двухмерным семплерам.
Шейдеры не могут сами работать со значениями семплеров. Например, нельзя написать выражение Grass + 1. Если в шейдере нужно совместить несколько текстур по какому-то особому правилу, используется массив семплеров, как в примере:
const int NumTextures = 4;
uni form sampler2D textures[NumTextures];
Потом их можно поместить в цикл:
for (int i = 0: i < NumTextures; ++i) … = texture2D(textures[i]. …);
После этого необходимое, но недоступное выражение Grass + 1 может выглядеть как вполне доступное [Grassindex + 1].
3.2. Типы данных
3.2.5. Структуры
Ётруктуры. в языке шейдеров OpenGL похожи на структуры языка С: struct light