Первый шаг - создание двух пустых шейдерных объектов, одного для вершинного шейдера и одного для фрагментного шейдера:

brickVS - glCreateShaderObjectARB(GL_VERTEX_SHADER ARB); brickFS = glCreateShaderObjectARB(GLJRAGMENT_SHADER_ARB):

Исходный код можно загружать в шейдерные объекты после их создания, когда они пустые и код их состоит из пустой строки с нуль-символом. Например, так:

glShaderSourceARB(brickVS. 1. SbrickVertex. NULL): glShaderSourceARB(brickFS. 1, SbrickFragment. NULL):

Теперь шейдеры можно компилировать. Для каждого шейдера вызывается функция gl Compi 1 eShaderARB, а потом glGetObjectParameterARB, чтобы видеть, что происходит. Функция gl Compi 1 eShaderARB установит параметр GL_ÛBJECT_COMPILE_ STATUS_ARB шейдерного объекта в значение GL_TRUE при успешном завершении операции или в GL_FALSE - в противном случае. Вне зависимости от результата

API языка шейдеров OpenGL

операции на экран будет выведен информационный журнал шейдера. Если компиляция была неудачной, он будет содержать сообщения об ошибках компиляции. Если компиляция завершилась нормально, журнал все равно может содержать полезную информацию, которая поможет совершенствовать шейдер. Проверка компиляционного журнала необходима только во время разработки программы либо при первом запуске шейдера на новой платформе. Если компиляция не выполнена либо шейдер не запускается, приложение должно завершить работу: glCompi1eShâ de rARB CbrickVS):

pr1nt0penGLError(); // проверка на ошибки OpenGL

gl GetObject Ра rameteri vARB(bri ck VS.

GL_OBJECT_COMPILE_STATUS_ARB. SvertCompiled): printlnfoLog(brickVS) :
glCorapileShaderARB(brickFS);

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

glGetObjectParatneterivARBCbrickFS.
GL_ÛBJECT_C0MPIL E_STATUS_ARB. ifragCompiled): pri ntlnfoLog(bric.kFS) :
if (IvertCompiled || IfragCompiled) return 0:

Эта часть кода использует определенную ранее функцию printlnfoLog.

К этому моменту шейдеры уже успешно скомпилированы и почти готовы к работе. Теперь следует присоединить шейдерные объекты к программному объекту для компоновки:


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