GL_OBJЕСТ COMP1LE_STATU5_ARB, SvertCompiled); printlnfoLog(brickVS); И Компиляция фрагментного шейдера кирпичной стены // и вывод на экран информационного журнала

glCompileShaderARB(brickFS);

printOpenGLErrorO: // проверка на ошибки OpenGL

glGetObjectParameterivARB(brickFS.

GL_0BJЕСТ_С0МРILE_STATUS_ARB, SfragCompiled): printlnfoLog(brickFS):

if (!vertCompiled || IfragCompiled) return 0:

// Создание программного объекта

// и присоединение к нему шейдерных объектов

brickProg = glCreateProgramObjectARBO: продолжение & Листинг 7.2 (продолжение)

glAttachObjectARBCbrickprog. brickVS): glAttachObjectARB(brickProg. brickFS);

// Компоновка программного объекта

// и вывод на зкран информационного журнала

gl LinkProgramARB(brickProg):

printOpenGLErrorO; // проверка на ошибки OpenGL

glGetObjectParameteri vARB{brickProg.

GL J)BJECT_LINK_STATUS_ARB. &1inked); printlnfoLog(brickPr.og);

if (!linked) return 0:

// Установка программного объекта как текущего

glUseProgramObjectARBCbrickProg);

// Установка начальных значений uniform-переменных

glUniform3fARB(getLJniLoc(bric'kProg, "BrickCplor"). 1.0, 0.3. 0.2): glUniform3fARB(getUniLoc(brickProg. "MortarColor"), 0.85. 0.86, 0.84): glUnifor[n2fARB(getUniloc(brickProg. "BrickSize"). 0.30. 0.15); glUnifor(n2fARB{getUniLoc(bnckProg, "BrickPct").. 0.90. 0.85): glUnifonn3fARB(getUniLoc(bnckProg. "LightPosition"). 0.0, 0.0, 4.0) :

return 1:

}

7.12. Итоги

Набор функций для создания шейдеров и управления ими в OpenGL невелик. При создании интерфейса все было сделано для того, чтобы процесс разработки такого программного обеспечения походил на обычное программирование на С и C++. Чтобы установить OpenGL-шейдеры, необходимо выполнить следующее:

1. Создать один или несколько пустых шейдерных объектов функцией gl Create-ShaderObjectARB.

2. Передать в эти шейдеры их исходный код функцией gl ShaderSourceARB.

3. Скомпилировать каждый шейдер функцией gl Compi 1 eShaderARB.

4. Создать программный объект с помощью glCreateProgramObjectARB.

5. Присоединить шейдерные объекты к программному функцией glAttach -GbjectARB.

6. Скомпоновать программный объект функцией gl Li nkProgramARB.

7. Установить выполняемую программу в качестве текущей (активной) функцией glUseProgramObjectARB.

Адреса определенных разработчиком uniform-переменных можно получить пйсле компоновки функцией glGetUni formLocati onARB, а значения затем устанавливаются функцией gl Uni formARB.

Определенные разработчиком attribute-переменные могут быть явно связаны с каким-либо индексом дополнительных атрибутов вершин функцией gl Bi ndAtt ri b-Lpcati onARB или такое соответствие устанавливается автоматически при компоновке и может быть получено функцией gl GetAttri bLseati onARB. Значения дополнительных атрибутов вершин можно впоследствии задавать из приложения для каждой вершины отдельно одной из версий функции glVertexAttribARB или для массива йершин - функциями gl EnableVertexAttribArrayARB и gl VertexAttribPolnterARB.


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