У меня есть эта функция:glGetProgramIv() не изменяет указатель посланный на него
void GetAllUniforms(unsigned int prog) {
int total = -1;
glGetProgramiv(prog, GL_LINK_STATUS, &total);
printf("total & prog: %d %d\n", total, prog);
for(int i=0; i<total; ++i) {
int name_len=-1, num=-1;
GLenum type = GL_ZERO;
char name[100];
glGetActiveUniform(prog, i, sizeof(name)-1,
&name_len, &num, &type, name);
name[name_len] = 0;
unsigned int location = glGetUniformLocation(prog, name);
printf("Name: %s/Number: %d/Location: %d\n", name, num, location);
}
}
Его цель проста, получить все формы и печатать их, однако, скажем, я запустил эту функцию, право ? Это дало бы мне:
Running newpmo/build/out
total & prog: -1 1
Это не ясно, нет никаких активных униформа в моих GLSL шейдеры, это смешно, потому что я есть WorldMatrix умножая вектор положения, чтобы получить gl_Position, и при дальнейшей отладки я обнаружил, что если Я поставил всего на другой номер, скажем, 5, я получаю это:
Running newpmo/build/out
total & prog: 5 1
Name: /Number: -1/Location: -1
Name: /Number: -1/Location: -1
Name: /Number: -1/Location: -1
Name: /Number: -1/Location: -1
Name: /Number: -1/Location: -1
Это довольно странно, потому что это показывает, что glGetProgramiv на самом деле не влияет на общее в любом случае, даже если я послал ему свой адрес и программа скомпилирована и связана правильно!
Как это возможно?
Мой плохой fot Gl_Link_Status, я поставил его там, чтобы попробовать отладки, но в итоге я оставил его, он делает. То же самое для glactiveuniiforms ... – Whiteclaws
Я нашел ошибку, чтобы напомнить мне :) – Whiteclaws