Основы

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

После прочтения данной главы читатель способен изз^чать в подробностях API, которое поддерживает язык шейдеров, и пробовать выполнять примеры.

2,1. Введение в язык шейдеров OpenGL

Цель данной книги - помочь читателю изучить и использовать высокоуровневый язык программирования, который формально называется языком шейдеров OpenGL. Этот язык и расширения OpenGL, которые его поддерживают, были утверждены как ARB-расширения еще в июне 2003 г. Ожидается, что они будут добавлены в базовый стандарт OpenGL в версии 2,0.

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

Целостный фрагмент кода на языке шейдеров, предназначенный для выполнения на одном из программируемых OpenGL-npoueccopoe, называется шейдером. Иногда термин «OpenGL-шейдер» используется для того, чтобы отличить шейдеры, написанные на языке шейдеров OpenGL, от шейдеров, написанных на другом языке, например RenderMan. Так как в OpenGL определены два программируемых процессора, существует два типа шейдеров: вершинные шейдеры и фрагментные шейдеры. В OpenGL есть механизм для компиляции шейдеров и линкования их в выполняемый код (программу). Программа содержит один или несколько выполняемых модулей, которые могут запускаться на программируемых модулях обработки графической информации.

Язык шейдеров OpenGL корнями уходит в язык С и имеет практически такие же возможности, как RenderMan и другие шейдерные языки. В языке содержится обширный набор типов, включая вектор и матрицу, которые позволяют сделать код шейдерных программ для обычных ЗО-графических операций более лаконичным. Существует в нем и специальный набор типов, каждый из которых спреде-ляет уникальную форму данных ввода или вывода для шейдеров. В языке есть заимствованные из C++ механизмы: перегрузка функций по типу аргумента и объявление переменных непосредственно перед использованием вместо начала блока. Язык поддерживает циклы, подпрограммы и условные выражения. Богатый набор встроенных функций обеспечивает много возможностей, необходимых для создания шейдерных алгоритмов. Об этом языке можно сказать следующее:


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