А код вершинного шейдера gl_Pos1t1on = gl_ModelViewProjectMatrix * gl_Vertex может и не привести к инвариантности из-за возможных оптимизаций компилятора и потенциальных различий в аппаратном обеспечении.

4.5.6. Тексгурирование

С возникновением языка шейдеров OpenGL появилось одно из самых значительных усовершенствований в OpenGL - в области текстурирования. Операции тек-стурирования, в принципе, могут выполняться в вершинном шейдере. Однако при обработке фрагментов также могут выполняться некоторые операции. Фрагментный шейдер потенциально может получить доступ к большему количеству текстурных модулей, чем это возможно при стандартных операциях. Это означает, что за один проход рендеринга молено выполнить больше текстурных преобразований, Разработчик шейдера может запрограммировать, чтобы эти преобразования выполнялись так, как ему представляется удобным.

Изменения в процессе обработки изображения в целом требуют разъяснения новых возможностей текстурирования. Термин «текстурный модуль» ранее использовался в OpenGL для обозначения разных понятий. Так могла называться и совокупность текстурных координат, которые можно задать для каждой вершины (сейчас это называется набором текстурных координат), и совокупность аппаратных модулей, которые можно было использовать для одновременного доступа к текстурным картам (сейчас их называют модулями текстурных изображений). Набор текстурных координат включает в себя параметры текстурных координат, такие как набор текстурных матриц и режим создания текстур. Чтобы получить количество этих параметров, нужно вызвать функцию gl Get с констан-to£i'gL_MAX_TEXTUREJJNITS.

Если реализация поддерживает язык шейдеров OpenGL, количество доступных наборов текстурных координат может отличаться от количества доступных модулей текстурных изображений, и это нормально, так как новые текстурные координаты могут, например, вычисляться из текстурных координат, переданных текстурной картой или просто содержащихся в ней.

Существует пять различных ограничений, связанных с отображением текстур.

1. Максимальное количество доступных модулей текстурных изображений для вершинного шейдера - GL_MAX_VERTEX_TEXTURE_IMAGE_L)NITS_ARB.

2. Максимальное количество доступных модулей текстурных изображений для фрагментного шейдера - GL_MAX_TEXTURE_IMAGE_UNITS_ARB.

3. Общее количество модулей текстурных изображений и для обработки вершин, и для обработки фрагментов (фрагментным шейдером или в OpenGL) не должно превышать значения GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB. Если и вершинный, и фрагментный шейдеры используют один и тот же модуль, считается, что модулей два.

4. OpenGL может выполнять множественное текстурирование даже без фрагмент-ного шейдера. В этом случае максимально доступное количество ступеней текстуры определяется константой GL_MAX_TEXTURE_UNITS.

5. Количество поддерживаемых наборов текстурных координат задается константой GL_MAX_TEXTllRE_COORDS_ARB. Это ограничение действует независимо от наличия или отсутствия вершинного шейдера.


⇐ вернуться назад | | далее ⇒