Обычные установки для текстур (SL TEXTURE_CUBE_HAP, GL_T£XTURE_3D, GL_TEXTURE_2D MIJHTURE^ID) шейдерами игнорируются. Например, даже если для какого-либо 'текстурного модуля установлено GL_TEXTURE 10f шейдер все равно может использовать семплер типа GL_TEXTIIRE_2D для доступа к этому текстурному модулю.
Семплеры типов sampl erlDShadow или sampler2DShadow обычно используются для доступа к текстурам глубины (тем, у которых установлен параметр GL_DEPTH_ EOMPQNENT). Режим сравнения текстур требует от шейдера использования встроенной функции shadowlD либо sbadow2D для доступа к текстуре (см. раздел 5.7). При попытке использовать эти функции с форматом, отличающимся от GL J)EPTB_ ■COMPONENT, результат будет непредсказуем.
Если шейдер использует семплер для ссылки на неполный текстурный объект {например, одну из mipmap-текстур, имеющую внутренний формат, отличающийся от формата прочих текстур, или рамку, см. спецификацию), текстурный модуль возвратит значения (R, G, В, А) = = (0, 0, 0, 1).
46. Итоги
В OpenGL были добавлены два новых программируемых модуля: вершинный и фрагментный процессоры. Для написания программ, выполняемых на этих процессорах, используется один и тот же язык, но с небольшими различиями. Вершинный процессор заменяет стандартные операции над вершинами в OpenGL, и шейдер, который будет выполняться на этом процессоре, называется вершинным шейдером. Вершинный шейдер будет выполняться для каждой вершины отдельно. Фрагментный процессор заменяет стандартные операции над фрагментами, и шейдер, выполняющийся на нем, называется фрагментным шейдером. Фрагментный шейдер выполняется для каждого фрагмента отдельно.
Огромное внимание было уделено созданию интерфейса между программируемыми и стандартными операциями, и теперь можно программировать обработку вершин при стандартной обработке фрагментов, и наоборот. Встроенные переменные предоставляют доступ к стандартным атрибутам OpenGL, зависящим от реализации константам и другим параметрам состояния OpenGL. Также эти переменные позволяют шейдеру сообщаться с предыдущими и последующими этапами обработки.
4.7. Ссылки
Встроенные переменные, описанные в этой главе, будут упоминаться во многих примерах этой книги.
За подробностями следует обращаться к стандартам OpenGl и OpertGl Shading Language. Литература по OpenGL, упомянутая в конце главы 1, может быть использована для того, чтобы лучше разобраться в способах использования встроенных переменных. Элементы статьи [2] после адаптации включены в данную книгу. Полный ее текст доступен на веб-сайте 3Dlabs.
1. Kessenich J., Baldwin D.t Rost R. The OpenGL Shading Language, Version 1.051/ 3Dlabs, 2003 (http://www.3dlabs.com/support/developer/ogl2),
2. Lichtenbelt B. Integrating the OpenGL Shading Language/SDlabs. 2003.
3. Segal М., Akeley K. The OpenGL Graphics System: A Specification (Version 1.5)/ Ed.: Ch. Frazier (v. 1.1), J. Leech (v. 1.2-1.5). 2003 (http://opengL.org).
Встроенные функции
В Этой главе читатель найдет подробности о функциях, определенных как часть языка шейдеров OpenGL. Ее можно пропустить, торопясь перейти к написанию собственных шейдеров, так как это в основном справочник функций. Тем не менее он может быть очень полезным при написании шейдеров.