gl Uni forn)2fARB.( loci. 1. Of. 2. Of): // правильно

glUniform2iARB(1ocl. 1. 2); // неправильно

glUniformlfARBOocl, l.Of); // неправильно

glUniformlfvARB(loc3. 10. floatPtr): // правильно

glUniforailfvARB(loc4. 10. floatPtr): // неправильно

glUniformlfvARB{loc4, 8, floatPtr); II правильно Вторая строка неправильная, так как loci ссылается на uniform-переменную типа vec2, а не i vec2. Третья строка неправильная из-за того, что 1 ocl ссылается на vec2, а не на float. Пятая строка неправильная, так как количество заданных элементов таково, что получится выход за конец массива.

Uniform-переменные, и определенные разработчиком, и встроенные, которые могут считываться в процессе работы шейдера, называются активными uniform-Шременными. Предполагается, что компилятор и компоновщик распознают объявленные, но нигде не используемые uniform-переменные. Это позволяет делать код более гибким и модульным - объявлять много uniform-переменных, а те из них, ято небудут использоваться в работе, выбрасывать при компиляции и компоновке.

Чтобы получить список активных uniform-переменных из программного объекта, используется функция gl GetActi veUni formARB. Приложение может запрашивать значения uniform-переменных программного объекта и предоставлять конечному пользователю элементы интерфейса для непосредственной работы со значениями определенных разработчиком uniform-переменных:

Void glGetActiveUniformARBCGLhandleARB program.

GLuint index.

GLsizei maxLength.

GLsizei * length.

GLirit *size,

GLenum Hype.

GLcharARB *name)

Эта функция возвращает информацию о uniform-переменной. указанной по индексу index, из программного объекта program. Размер символьного буфера, выделенного приложением, указывается в maxLength, а указатель на буфер - в пате. Uniform-переменная (встроенная или определенная разработчиком) считается активной в шейдере, если при компоновке было определено, чтр шейдер может обращаться к ней. Это означает, что program уже должен быть скомпонован функцией gl LinkProgramARB, но не обязательно успешно. Список активных uniform-ne-ременных может включать как имена встроенных переменных (начинающихся с префикса gl_), так и имена переменных, определенных разработчиком.

Функция gl GetActi veUni formARB возвращает имя uniform-переменной, указанной index, сохраняя его в пате. Возвращаемая строка будет заканчиваться нуль-символом. Количество реально записанных в буфер символов, не считая нуль-символа, возвращается в length, а если эта информация не нужна, вместо параметра можно передать NULL.

Количество активных uniform-переменных можно получить с помощью функции glGetObjectParameterARB со значением GL_OBJECT_ACTIVEJJNI F0RMS_ARB. Значение О для index означает, что будет возвращаться первая активная uniform-переменная, а значение GLj3BJECT_A0TIVE_UNIFQRMS_ARB -1 для индекса выберет последнюю активную uniform-переменную. Размер символьного буфера, способного вместить самое длинное имя переменной, можно получить функцией gl GetOb jectParameterARB со значением GL_QBJECT_ACTIVE_L!NIFORM_MAX_LENGTH_ARB.


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