7.8. Семплеры
Для установки uniform-переменных типа семплер (то есть sampler ID, sampl er2D, sampl егЗО, sampl erCube, sampl erlDShadow или sampl er2DShadow) используются функции gl Uni formliARB ид! Uni formlivARB. Эти переменные могут быть объявлены как в вершинном, так и во фрагментном шейдере.
Семплер используется, когда какой-то шейдер обращается к конкретной текстурной карте. Значение, записанное в семплер приложением, - это номер текстурного модуля для обращения к текстуре. Для вершинных шейдеров оно должно быть меньше константы GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, которую можно получить с помощью функции gl Get и значение которой зависит от реализации. Для фрагментных шейдеров это значение должно быть меньше константы GL_MAX_ TEXTURE_IMAGE_UNITS_ARB.
Суффикс в имени типа семплера обозначает тип текстуры: 1D - одномерная, 2D - двухмерная, 3D - трехмерная, кубическая, ID с глубиной, 2D с глубиной. В OpenGL текстурный объект каждого из первых четырех типов может быть связан с отдельным текстурным модулем, и этот суффикс позволяет выбрать весь текстурный объект. Текстура 1D с глубиной используется для доступа к одномерной текстуре с включенной проверкой глубины, а текстура 2D с глубиной используется для доступа к двухмерной текстуре с включенной проверкой глубины. Если две uniform-переменные различных типов семплера содержат одно и то же значение, при выполнении следующей команды рендеринга возникнет ошибка. Попытка установить значение семплера функциями, отличающимися от gl Uni f ormli ARB или gl Uni formli vARB, также влечет за собой ошибку.
7.9. Средства диагностики Шейдер не знает, как именно устроены семллеры. Современное API задает номер текстурного модуля, в будущем, возможно, семплер будет ссылаться непосредственно на текстурный объект.
Семплеры, обращение к которым может происходить при выполнении программы, называются активными семплерами. Если количество активных семплеров превысит ограничение, компоновка будет неуспешной. Максимальное количество активных семплеров для вершинного процессора определяется константой GL_MAX_ VERTEX_TEXTURE_IMAGE_UNITS_ARB, а для фрагментного процессора - константой GL_MAX__ TEXTURE_IMAGE_UN ITS_ARB. Максимальное количество активных семплеров для обоих процессоров вместе определяется константой GL_COMBINED_TEXTURE_IMAGE_UNITS_ARB.