4. OpenGL Architecture Review Board: спецификация расширения ARB_vertex_ shader, реестр расширений OpenGL (http://oss.sgi.com/projects/ogL-sampLe/registry).
5. OpenGL Architecture Review Board: спецификация расширения ARB_fragment_ shader, реестр расширений OpenGL (http://oss.sgi.com/projects/ogl-sampie/registry).
’6. OpenGL Architecture Review Board: спецификация расширения ARB_shader_ objects, реестр расширений OpenGL (http://oss.sgi.com/projects/ogL-sampLe/ registry).
API языка шейдеров OpenGL
Расширения OpenGL, которые называются ARB_shader_objects, ARB_vertex_shader и ARB_fragment_shader, представляют новые функции и возможности для поддержки шейдеров, написанных на языке шейдеров OpenGL. Этот набор функций в данной книге называется API языка шейдеров OpenGL. Чтобы определить, поддерживает ли данная реализация OpenGL язык шейдеров, достаточно вызвать функцию gl GetStri ng с аргументом GL_EXTENSIQNS и проверить, содержит ли возвращаемая строка подстроки GL_ARB_shader_objects, GL_ARB_vertex_shader и GL_ARB_f ragment_shader. Таким образом можно определить и версию языка. Если возвращаемая строка содержит GL_ARB_shading_language_100, значит, версия языка шейдеров - 1.00.
В этой главе будут обсуждаться функции для создания, загрузки, компиляции и компоновки шейдеров, а также функции для передачи атрибутов вершины и uniform-переменных шейдерам. Все эти функции перечислены в приложении Б.
В конце главы будет обсуждаться код приложения, необходимый для создания и использования шейдера кирпичной стены, рассмотренного в главе 6. Читатель может просмотреть список функций, приведенный в разделе 7.11, а затем вернуться к описаниям функций в деталях.
Вот приблизительный сценарий создания и использования шейдеров OpenGL.
□ Создать один или несколько пустых шейдерных объектов функцией gl Create-ShaderOb jectARB,
□ Задать исходный код для этих шейдеров функцией gl SbaderSourceARB.
□ Скомпилировать каждый шейдер функцией gl Compi 1 eShaderARB.
□ Создать программный объект функцией gl СгеаteProgramObjectARB,
□ Присоединить все шейдерные объекты к программному объекту функцией glAttachObjectARB.
□ Скомпоновать программный объект функцией gl Li nkProgramARB.
□ Установить выполняемую программу как часть текущего состояния OpenGL функцией glUseProgramObjectARB.
□ Если шейдеры используют uniform-переменные, место их расположения запрашивается функцией gl Get Uni formLocati onARB уже после того, как отработала функция gl Li nkProgramARB. Значения uniform-переменных задаются функцией gl UniformARB.
□ Если вершинный шейдер использует определенные разработчиком attribute-переменные, их индексы можно устанавливать до компоновки функцией gl Bi ndAttn bLocati onARB либо они будут назначаться автоматически во время компоновки и тогда узнать их можно с помощью функции gl GetAtt ri bLocati onARB. Произвольные атрибуты вершин могут быть переданы в вершинный шейдер функцией gl VertexAttri bARB или совместным использованием функций gl Vertex Attri bPoi nterARB и gl Enabl eVertexArrayPoi nter для массивов вершин.