Глобальные переменные шейдера в OpenGL называются «униформами». Они доступны только для чтения и могут быть связаны с звонками glUniformX
. Грубо говоря, это выглядит следующим образом (это больше псевдокод):
// 1. activate the program
glUseProgram(program)
// 2. get uniform location
foo = glGetUniformLocation(program, "foo")
// 3. bind the value, e.g. a single float
glUniform1f(foo, 42.0)
В шейдеры, вам необходимо квалифицировать переменную с uniform
классификатором хранения, например,
uniform float foo;
Но тогда что, если program2 хочет получить доступ к foo? –
@KevinKostlan: Ничто не мешает вам использовать одну и ту же форму в более чем одной программе. Просто следуйте приведенной выше процедуре для каждого. –
Я надеялся, что у меня будет матрица камеры, которую я мог бы сделать glUniformX один раз, а затем каждый шейдер имел бы это (экономит время). Наверное, этого не существует. –