Я проверял, действительно ли glUniform1fv копирует все значения в UniformLocation, поскольку мой окончательный результат был не таким, как ожидалось, и я заметил, что копировалось только первое значение, когда я получал значения с помощью glGetUniformfv. Метод копирования значений был получен из этого ответа SO .
Код:
Код FragmentShader: для целей отладки я использую только Uniform float Aarr.
precision highp float;
uniform float Aarr[1000];
uniform float Barr[1000];
void main() {
int my_index = int(gl_FragCoord[0]);
float result = Aarr[my_index] + Barr[my_index];
gl_FragColor = vec4(Aarr[my_index],0,0,1);
}
Установка и чтение Uniform Value: prog_array [0] содержит значение glCreateProrgam
A = np.random.uniform(0,1,[1000])
A = A.astype(np.single)
n = 1000
vec_A = glGetUniformLocation(prog_array[0], 'Aarr')
vec_B = glGetUniformLocation(prog_array[0], 'Barr')
glUniform1fv(vec_A, n, A)
glUniform1fv(vec_B, n, B) #B was created same way as A elsewhere
test_val = np.empty(1000, np.single)
glGetUniformfv(prog_array[0], vec_A, test_val)
print("A ", A[:20])
print("Test ", test_val[:20])
Вывод: совпадают только первые значения
A [0.75577396 0.58859587 0.06011201 0.8692806 0.37496442 0.13160175
0.04769203 0.37221003 0.9820622 0.22139452 0.2419593 0.0775761
0.54191273 0.31821933 0.93001217 0.8580101 0.5001719 0.57158923
0.44154036 0.8569853 ]
Test [ 7.5577396e-01 -5.5181044e-06 4.9826586e-39 4.9826586e-39
-1.7268412e-26 1.2894386e+00 3.0203145e-36 1.4590179e+00
1.4088103e-32 1.6301323e+00 7.4551874e-23 1.5980355e+00
-4.0251036e+34 1.8355457e+00 2.2099859e+13 1.7237316e+00
3.2525057e+24 1.5265300e+00 1.9442064e+11 1.7575052e+00]