Все активные uniform-переменные программного объекта инициализируются в 0 после его успешной компоновки. Все значения, установленные функцией gl Uni formARB, сохраняются до следующей успешной компоновки, где они опять сбрасываются в 0.
С помощью функций glUmform{lj2|3|4}{f|i}vARB можно менять значения одной uniform-переменной или целого массива. В эти функции передаются количество и указатель на список значений для uniform-переменной или массива переменных. Значение 1 в count соответствует одной uniform-переменной, а значение 1 или больше - целому массиву или части массива. Номер, присутствующий в имени функции, должен совпадать с количеством компонентов типа данных указанной uniform-переменной (то есть 1 для fl oat, i nt, bool; 2 для vec2, i vec2, bvec2 и т. д.). Тип данных, присутствующий в имени функции, должен совпадать с типом соответствующей uniform-переменной, как и в функции glUmform{l|2|3|4}{f|i}ARB.
В массивах uniform-переменных каждый элемент считается того типа, что указан в имени функции (например, функция gl Uni form3f или gl Uni form3fv может работать с массивом uniform-переменных типа vec3). Количество элементов массива указано в count.
Функции gl Uni formFl oatMat ri x{2|3|4}fvARB используются для матриц или массивов матриц. Номер в имени функции означает размерность матрицы. Номер 2 означает матрицу 2x2 (4 значения), номер 3 - матрицу 3x3 (9 значений), номер 4 - матрицу 4x4 (16 значений). Если параметр transpose равен GL_FALSE, функция считает, что матрицы передаются по столбцам. Если параметр transpose равен GL_TRUE, функция считает, что матрицы передаются по строкам. Аргумент count содержит количество передаваемых матриц: 1 - для изменения значения одной матрицы и большее количество - для изменения значений массива матриц.
Примечания
Для установки значения в uniform-переменную типа семплера годятся только функции gl Uni formli ARB и glUniformlivARB. При попытке использования любой другой функции возникает ошибка GL_INVALID_OPERATION.
Если число значений, заданное в count, превышает величину указанной uniform-переменной, возникает ошибка GL_INVALID_VALUE, а значение uniform-переменной не меняется.
Если тип и размер uniform-переменной шейдера отличаются от типа и размера, указанных в имени функции, возникает ошибка GL_INVALID_OPERATION, а значение uniform-переменной не меняется.
Если location не указывает на uniform-переменную текущего программного объекта, возникает ошибка и значение uniform-переменной не меняется.
Ошибки
GL_INVALID_OPERATION возникает в следующих случаях:
□ текущий программный объект не задан;
□ размер uniform-переменной, объявленной в шейдере, не совпадает с размером, указанным в вызове функции gl Uni formARB;
□ один из целочисленных вариантов этой функции используется для установки значения float, vec2, vec3, vec4 или массивов из них, или один из f-вариантов (с плавающей запятой) этой функции используется для установки значения
i nt, i vec2, i vec3, i vec4 или массивов из них;