SinfologLength): printOpenGLErrorO; it Проверка на ошибки OpenGL

if {infalogLength > 0)

{

infoLog = (GLcharARB*)[nallocCinfologLength); if (infoLog == NULL)

{

printf("ОШИБКА: Невозможно выделить память для InfoLog\n"): exit(l):

')

glGetInfoLogAR.B(obj, infologLength. teharsWritten. infoLog): printf("InfoLog:\nSi's\.n\n", infoLog): free(infoLog):

}

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

}

Получить текущий программный объект можно с помощью функции GLhandleARB glGetHandleARBtG.Lenum pname)

Она возвращает идентификатор текущего объекта состояния. Аргумент рпате определяет запрашиваемое состояние. Чтобы получить идентификатор программного объекта, следует передать GL_PROGRAM_OBJECT ARB.

И наконец, список шейдерных объектов, присоединенных к конкретному программному объекту, можно получить функцией

v.Qid glGetAttaehedObjectsARB(SLhandleARB program.

GLsizei maxCount.

GLsizei *count.

GLhandleARB *objects)

Эта функция возвращает идентификаторы шейдерных объектов, присоединенных к program. Максимальное количество возвращаемых объектов - maxCount. Количество реально возвращенных идентификаторов заносится в count, а если эта информация не нужна (например, перед этим количество присоединенных объектов уже было получено е помощью функции glGetObjectParameterARB), можно передавать NULL. Чтобы получить количество присоединенных объектов, нужно вызвать функцию glGetObjectParameterARB с параметром GL_QBJECT_ATTACHED_

; OBJECTS J\RB.

.6. Установка атрибутов вершин

■Один из способов передать данные о вершинах в OpenGL - вызвать glBegi п, затем «нужной последовательности функции gl Col ог/gl Normal /gl Vertex и т. д., завершив :эту последовательность вызовом функции gl End.

Все эти вызовы продолжают работать и в программируемой среде OpenGL. Как и раньше, функция gl Vertex позволяет сообщить, что данные для некоторой тэчки переданы и должны быть обработаны. Однако если функцией. glUsePro-SremObjectARB в среде установлен правильный вершинный шейдер, данные о вершинах будут обрабатываться этим шейдером. Вершинный шейдер работает с данными о вершине через встроенные переменные

attribute vec4 gl_Color: attribute vec4 gl^SecondaryColor; attribute vec3 gl_Normal; attribute vec4 gl_Vertex: attribute vec4 glJiultiTexCoordO; attribute vec4 gl_Mu1tiTexCoordl: attribute vec4 gl_MultiTexCoord2;

attribute vec4 gl_FogCoord: Интерфейс OpenGL «вершина за раз» простой и действенный, но в современных системах является не самым лучшим решением, поскольку требует больших затрат времени для передачи данных графическому ускорителю. Лучше вместо него использовать массивы вершин. Этот интерфейс позволяет заносить данные о вершинах в массивы и затем сообщать OpenGL указатели на эти массивы. Вместо того чтобы посылать OpenGL данные для одной вершины, можно передать за один раз целый набор примитивов. Возможно, в целях увеличения производительности массивы для хранения данных о вершинах будут располагаться даже в видеокарте.


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