Войти
ПрограммированиеФорумГрафика

glUniform и location без glGetUniformLocation

#0
17:39, 21 авг. 2019

Прошу объяснить такую вещь:
Если я пишу в шейдере :

layout (location = 10) uniform mat4 model;

то я ожидаю, что model будет на 10-ом слое.
И в коде я могу написать код, не исп. glGetUniformLocation:

glUniformMatrix4fv(10, 1, GL_FALSE, glm::value_ptr(transform.getTransformationMatrix()));

Но почему то данный код не работает. При этом если я пишу полностью :

glUniformMatrix4fv(glGetUniformLocation(shader.getShaderProgramID(), "model"), 1, GL_FALSE, glm::value_ptr(transform.getTransformationMatrix()));

То всё работает. При этом glGetUniformLocation возвращает именно число 10. Помогите понять, что я упускаю.


#1
17:46, 21 авг. 2019

Помощь

#2
(Правка: 20:38) 20:35, 21 авг. 2019

Nublin1
  Это одно и то же. Ошибка видимо где-то в другом месте и оба варианта должны одинаково не работать.
  То, что второй вариант все же работает скорее всего означает что glGetUniformLocation имеет какой-то сайд-эффект внутри драйвера, из-за которого ошибка не проявляется. Или getShaderProgramID() делает еще что-то кроме возвращения id программы.
  Можно только гадать что именно не так, нужен полный пример.

#3
(Правка: 21:27) 21:12, 21 авг. 2019

glUseProgram указываешь в первом варианте перед glUniform* ?
Униформы устанавливаются в активную программу. Если активная программа другая или 0, то все понятно..

#4
1:40, 22 авг. 2019

Nublin1
glGetUniformLocation достаточно сделать один раз, лучше сделать это еще на этапе загрузки шейдера.

#5
4:28, 22 авг. 2019

Aroch
удивительно, когда так не делают

#6
9:58, 22 авг. 2019

Aroch
> glGetUniformLocation достаточно сделать один раз, лучше сделать это еще на
> этапе загрузки шейдера.

да, я так и поступил.

#7
10:40, 24 авг. 2019

а в шейдере

#extension GL_ARB_explicit_attrib_location : enable
делали?

#8
11:53, 24 авг. 2019

barnes
> GL_ARB_explicit_attrib_location : enable

На самом деле проблема была банальней. Шейдер с которым я работал, был в др. папке и имел такое же название файла. (Фейспалм)

ПрограммированиеФорумГрафика