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.
датчик давления в шинах тойота прадо 150 купить.
И наконец, список шейдерных объектов, присоединенных к конкретному программному объекту, можно получить функцией
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 данные для одной вершины, можно передать за один раз целый набор примитивов. Возможно, в целях увеличения производительности массивы для хранения данных о вершинах будут располагаться даже в видеокарте.