□ GL_MAX_FRAGM£NT_UNIFORH_COMPONEWTS_ARB - определяет максимальное количество компонентов (являющихся числами с плавающей запятой) для uniform-переменных фрагментного шейдера. Минимальное предусмотренное стандартом значение - 64.

7.11. Код приложения для шейдеров кирпичной стены

Каждый шейдер хотя бы немного отличается от других. Например, вершинные шейдеры могут использовать различные наборы атрибутов или uniform-переменных, атрибуты могут быть связаны с различными адресами и т. д. Один из примеров программы, исходный код которой доступен для загрузки с веб-сайта компании 3Dlabs, - ogL2exampLe. В этой программе есть функция install для каждого Ш. Код приложения для шейдеров кирпичной стены

набора шейдеров, которые предполагается установить и использовать. Приведенный далее пример похож, хотя и более прост, и определяет функцию установки шейдеров кирпичной стены. Функция установит шейдеры кирпичной стены, представленные в главе 6. Но сначала нужно определить простую функцию, которая сможет задавать значения uniform-переменным:

GLint getUriiLocCGLhandleARB program, const GLcharARB *name)
{
GLint loc:
loc = glGetUniformLocaticnARBtprograrn. name): if (loc - -1)

printf("Uniform-переменной с именем \"%s\" не существуете". name);

printOpenGLError(): // проверка на ошибки OpenGL return loc:

}

Шейдеры передаются в OpenGL как строки. Для создаваемой функции установки шейдера предположим, что каждый шейдер определен одной строкой и указатели на эти строки передаются в функцию. Приведем определение функции и ее локальные переменные:

int installBrickShaderstGLcharARB *brickVertex, GLcharARB *bnckFragnient)
f

GLhandleARB brickVS. brickFS. brickProg; // идентификаторы объектов GLint vertCompiled, fragCompiled; // статусы

GLint linked;

Аргумент brickVertex содержит указатель на исходный код вершинного шейдера кирпичной стены, а аргумент bri ckFragment содержит указатель на исходный код фрагментного шейдера кирпичной стены. Далее определяются переменные для хранения идентификаторов трех объектов OpenGL: шейдерный объект, который будет использоваться для хранения и компиляции вершинного шейдера, второй шейдерный объект, который будет использоваться для хранения и компиляции фрагментного шейдера, и программный объект, к которому будут присоединены шейдерные объекты. Потом определяются флаги, показывающие результат компиляции и компоновки.


⇐ Предыдущая| |Следующая ⇒