Несколько недель я изучаю OpenGL на знаменитом http://learnopengl.com и задаю вопрос об организации нескольких материалов (шейдеров). В этом уроке используется класс Shader, который сочинить программу Shader из списка верт/осколочных шейдеры:Лучший способ использования нескольких шейдеров
Shader shader("vert.glsl", "frag.glsl");
После этого для шейдерного создать форму:
glUniformMatrix4fv(glGetUniformLocation(shader.Program, "model"), 1, GL_FALSE, glm::value_ptr(model));
glUniformMatrix4fv(glGetUniformLocation(shader.Program, "view"), 1, GL_FALSE, glm::value_ptr(view));
etc.
И в конце мы получаем один Shader программа. Как в этом случае я могу сделать несколько шейдеров? я пытаюсь сделать:
Shader shader("vertDiff.glsl", "fragDiff.glsl");
Shader shaderGlass ("vertGlass.glsl", "fragGlass.glsl");
Shader shaderLight("vertLight.glsl", "fragLight.glsl")
И после этого я сделать форму для .glsl для каждого шейдера:
glUniformMatrix4fv(glGetUniformLocation(shader.Program, "model"), 1, GL_FALSE, glm::value_ptr(model));
glUniformMatrix4fv(glGetUniformLocation(shaderGlass.Program, "model"), 1, GL_FALSE, glm::value_ptr(model));
Но затенение не работает правильно. Те же униформы должны быть объявлены несколько раз для каждого шейдера и сделать программу неправильной. Как правильно сделать эту часть? Спасибо и извините за мой глупый вопрос. :)
Большое спасибо за glProgramUniform * !!! Он отлично работает! : D – OpenglNoob