Один из вариантов - передавать информацию через однородные переменные.
* После 1003 *
glUseProgram(myShaderProgram);
вы можете использовать
GLint myUniformLocation = glGetUniformLocation(myShaderProgram, "myUniform");
и например
glUniform1f(myUniformLocation, /* some floating point value here */);
В ваш вершинный или фрагментный шейдер вам нужно добавить следующее объявление:
uniform float myUniform;
Вот и все, теперь в вашем шейдере вы можете получить доступ (только для чтения) к значению, которое вы передали ранее через glUniform1f
.
Конечно, однородными переменными может быть любой допустимый тип GLSL, включая сложные типы, такие как
как массивы, структуры или матрицы. OpenGL предоставляет функцию glUniform
с обычными суффиксами,
подходит для каждого типа. Например, чтобы присвоить переменной типа vec3
, можно
используйте glUniform3f
или glUniform3fv
.
Примечание: значение не может быть изменено во время выполнения шейдера, то есть в блоке glBegin
/ glEnd
. Он доступен только для чтения и одинаков для каждого обработанного фрагмента / вершины.
Есть также несколько учебных пособий, использующих униформу, вы можете найти их, прибегая к помощи "glsliform variable".
Надеюсь, это поможет.