void g7GetStiaderSourceARB(GLh.andleARB shader,

GLsizei maxLengtft.

GLsizei * length.

GLcharARB *source)

Функция возвращает полный исходный код шейдера из шейдерного объекта shdder. Этот исходный код - результат предшествующего вызова glShaderSourceARB. Возвращаемая строка заканчивается нуль-символом.

Для функции gl GetShaderSourceARB существует ограничение на количество символов возвращаемой строки, задаваемое maxLength. Количество символов в реально возвращенной строке находится в параметре length, а если ограничивать их количество не требуется, можно передавать в этот параметр N U LL. Необходимый размер буфера для сохранения возвращаемого кода можно узнать с помощью функции glGetObjectParameterARB со значением GL J)BJECT_SHADER_SOURCE_LENGTHj\RB.

Результат компиляции будет сохранен в информационном журнале шейдерного объекта; а результат компоновки - в информационном журнале программного объекта. Информационный журнал - это строка, содержащая диагностические сообщения, предупреждения и другую информацию о последней компиляции (для шейдерных объектов) или компоновке и проверке (для программных объектов). Сразу после создания шейдерного или программного объекта его информационный журнал представляет собой строку длиной 0. Он может содержать полезную информацию даже в случае успешного завершения компиляции или компоновки, нужен в основном только во время разработки графического приложения, и разработчик не должен ожидать от различных реализаций OpenGL одинаковых сообщений об ошибках. Получить информационный журнал для шейдерного или программного объекта позволяет функция

void glGetlrtfoLogARBCGLhandleARB object.

GLsizei maxLength.

GLsizei * length.

GLcharARB *1nfoLog)

Эта функция возвращает информационный журнал для указанно го объекта object. Журнал обновляется каждый раз после компиляции шейдера, а для программного объекта - каждый раз при компановке или проверке программы. Возвращаемая строка заканчивается нуль-символом.

Функция gIGetlnfoLogARB возвращает в infoiog такую часть журнала, которая туда поместится, до maxLength символов. Количество реально возвращенных символов записывается в length; если же эта информация не нужна, следует просто передавать NULL. Размер буфера, способного вместить весь журнал, можно определить с помощью функции glGetObjectParameterARB, передав ей значение GL_0BJECT_INFGJ_0G_-LENGTH_ARB.

Сначала нужно выполнять запрос, чтобы определить длину информационного журнала (количество символов в строке). После выделения буфера нужного размера вызывается функция gIGetlnfoLogARB, для того чтобы поместить строку информационного журнала в предоставленный буфер. Потом можно эту строку, например, напечатать (листинг 7.1).

Листинг 7.1. Функция на языке С, печатающая информационный журнал объекта

void printInfoLog(GLhandleARB obj)

{

int infologLength = 0; int charsWritten =■ 0:

GLcharARB *infoLog:

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

gl.GetQbjectParameterivARB(obj, GL_OBJECTJNFO_LOG_LENGTH_ARB,


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