□ создание вершинных шейдеров;
□ блокирование/разблокирование вершинных шейдеров;
□ определение того, какая стандартная функциональность OpenGL недоступна при активном вершинном шейдере;
□ передачу значений, предназначавшихся для стандартной обработки, в вершинный шейдер;
□ обработку настраиваемых атрибутов вершин;
□ взаимодействие вершинного шейдера со стандартной функциональностью - сборка примитивов, отсечение, растеризация.
В ARB_vertex_shader определены следующие функции:
□ glVertexAttribARB - установка настраиваемых атрибутов вершин, вершина за раз;
□ gl VertexAttri bPoi nterARB - формирование вершинных массивов, установка расположения и структуры настраиваемых атрибутов вершин;
□ gl Bi ndAttri bLocati onARB - установка индекса настраиваемого атрибута вершины для определенной разработчиком переменной-атрибута в вершинном шейдере;
□ gl ЕпаЫ eVertexAttri bArrayARB - включение режима вершинных массивов для передачи настраиваемых атрибутов вершин OpenGL;
□ gl Di sabl eVertexAttri bArrayARB - выключение режима вершинных массивов для передачи настраиваемых атрибутов вершин OpenGL;
□ gl GetVertexAttri bARB - возврат текущего состояния заданного настраиваемого атрибута вершины;
□ gl Get VertexAttri bLocati onARB - возврат индекса настраиваемого атрибута вершины, связанного с определенной разработчиком переменной атрибута;
□ gl Get VertexAtt ri bPoi nterARB - возврат значения указателя вершинного массива для определенного настраиваемого атрибута вершины;
□ gl Get Act i veAttri bARB - получение имени, размера и типа активного атрибута программного объекта.
Третье и последнее расширение, поддерживающее язык шейдеров OpenGL, - ARB_fragment_shader. Оно похоже на ARB_vertex_shader, за исключением того, что определяет возможности нового программируемого фрагментного, а не вершинного процессора и его место в процессе обработки изображения в OpenGL. Это расширение не предоставляет дополнительного API, так как построено на настраиваемых возможностях расширения ARB_shader_objects. Тем не менее оно предоставляет следующую функциональность:
□ создание фрагментных шейдеров;
□ блокирование/разблокирование фрагментных шейдеров;
□ определение того, какая стандартная функциональность OpenGL недоступна при активном фрагментном шейдере;
□ передача значений, полученных при растеризации, фрагментному шейдеру;
□ взаимодействие фрагментного шейдера со стандартной функциональностью - окончательной обработкой изображения.
Все новые функции более подробно описаны в главе 7. Полный список функций этих расширений представлен в приложении Б в конце книги.