Тип семплера показывает тип соответствующей текстуры. Переменная типа samplerlD используется для доступа к ID-текстуре, переменная типа sampler2D - для доступа к 2Б-текстуре, переменная типа sampl егЗО - для доступа к ЗО-тексту-ре, переменная типа sampl erCube - для доступа к кубической текстуре, а переменные типов samplerShadowlD и samplerShadow2D - для доступа к ID- и 20-текстурам глубины. Например, если приложение предполагает использовать текстурный модуль 4, чтобы хранить 20-текстуру, шейдер. должен объявить uniform-переменную типа sampler2D, а приложение должно установить значение 4 в эту переменную перед выполнением шейдера.

Встроенные функции texturelD, texture2D, texture3D, textureCube, shadowlD и др. обращаются к текстуре из шейдера. Первый аргумент в каждой из этих встроенных функций - семплер, и тип семплера должен совпадать с именем функции. Например, семплер.типа samplerlD должен быть первым аргументом функции texturelD, семплер типа.sampler2D - первым аргументом функции texture2D и т. д. Несовпадения приведут к ошибкам компилятора.

Каждая из этих встроенных функций доступа к текстурам также получает в качестве аргумента текстурные координаты, которые затем используются аппаратным обеспечением для того, чтобы определить, к какой части текстурной карты происходит обращение. Аргумент для 2D-TeKCTypbu будет тина vec2, для 3D-TeK10.2. Простой пример текстурирования ётуры - типа vec3. Существуют также проекционные версии функций доступа к текстурам. В этих функциях компоненты текстурных координат делятся на последний компонент, а результат используется при обращении к текстуре.

Существуют различия между доступом к текстуре из вершинного и из фраг-/ментного шейдеров (язык шейдеров OpenGL позволяет делать и то ""и другое). Уровень детализации при доступе к множественной текстуре вычисляется стандартной функциональностью между вершинным и фрагментным процессорами. Поэтому это значение известно фрагментному процессору, но неизвестно вершинному. По этой причине в языке шейдеров OpenGL определены специальные встроенные функции, которые можно вызывать только из вершинного шейдера. Эти функции позволяют получить уровень детализации текстуры и подставить его в качестве аргумента. Язык шейдеров OpenGL содержит также встроенные функции, предназначенные только для фрагментного шейдера, которые принимают значение сдвига уровня детализации текстуры, и это значение добавляется к автоматически вычисляемому уровню детализации. Таким образом, автор шейдера может сделать изображение более резким или размытым. Если эти функции применяются к текстуре, не являющейся множественной, значение уровня детализации игнорируется.


⇐ Предыдущая| |Следующая ⇒