Сначала нужно выполнять запрос, чтобы определить длину информационного журнала (количество символов в строке). После выделения буфера нужного размера вызывается функция gl Get Inf oLogARB, для того чтобы поместить строку информационного журнала в предоставленный буфер. Потом можно эту строку, например, напечатать (листинг 7.1).
Листинг 7.1. Функция на языке С, печатающая информационный журнал объекта
void printlnfoLogCGLhandleARB obj) {
int infologLength = 0; int charsWritten = 0: GLcharARB *infoLqg:
pnntOpenGLErrorO ;
// Проверка на ошибки OpenGL
7.6. Установка атрибутов вершин
glSetObjectParameteri vARBCobj . GL_OBJECTJNFO_LOG_LENGTH_ARB,
âinfologLength): printOpenGLErrorO : // Проверка на ошибки OpenGL
- if (infologLength > 0) {
infoLog = (GLcharARB*)malloc(infologLength); if (infoLog == NULL)
{
printfC'OUMBKA: Невозможно выделить память для InfoLog\n"): exit(l):
}
glGetlnfoLogARBCobj. infologLength. &charsWritten. infoLog): printf С "InfoLog: \nSis\.n\n". infoLog) ; free(infoLog):
printOpenGLErrorO: // Проверка на ошибки OpenGL
}
Получить текущий программный объект можно с помощью функции GLhandleARB glGetHandleARBtGLenum рпате)
Она возвращает идентификатор текущего объекта состояния. Аргумент рпате определяет запрашиваемое состояние. Чтобы получить идентификатор программного объекта, следует передать GL_PR0GRAM_0BJECT ARB.
И наконец, список шейдерных объектов, присоединенных к конкретному программному объекту, можно получить функцией
vend glGetAttachedObjectsARB(GLhandleARB program. GLsizei maxCount. GLsizei *count. GLhandleARB *cbjects)
Эта функция возвращает идентификаторы шейдерных объектов, присоединенных к program. Максимальное количество возвращаемых объектов - maxCount. Количество реально возвращенных идентификаторов заносится в count, а если эта информация не нужна (например, перед этим количество присоединенных объектов уже было получено е помощью функции glGetObjectParameterARB), можно передавать NULL. Чтобы получить количество присоединенных объектов, нужно вызвать функцию glGetObjectParameterARB с параметром GL_QBJECT_ATTACHED_ OBJECTS J\RB.