使用多个着色器的最佳方式
Best way to use multiple shaders
几个星期我在著名的 http://learnopengl.com 上学习了 OpenGL,并且对组织多种材质(着色器)有疑问。
在本教程中使用着色器 class,它从 vert/frag 个着色器列表中组成着色器程序:
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));
但是阴影无法正常工作。相同的制服需要为每个着色器声明几次,这会使程序不正确。
如何正确制作这部分?谢谢你,对不起我的愚蠢问题。:)
当然不行。 glUniform*
调用更改了 当前绑定的 程序的统一状态。因此,最近传递给 glUseProgram
的任何程序。
如果你想在另一个程序中修改制服,你必须切换到另一个程序。或者 use glProgramUniform*
.
几个星期我在著名的 http://learnopengl.com 上学习了 OpenGL,并且对组织多种材质(着色器)有疑问。 在本教程中使用着色器 class,它从 vert/frag 个着色器列表中组成着色器程序:
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));
但是阴影无法正常工作。相同的制服需要为每个着色器声明几次,这会使程序不正确。 如何正确制作这部分?谢谢你,对不起我的愚蠢问题。:)
当然不行。 glUniform*
调用更改了 当前绑定的 程序的统一状态。因此,最近传递给 glUseProgram
的任何程序。
如果你想在另一个程序中修改制服,你必须切换到另一个程序。或者 use glProgramUniform*
.