首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个着色器的最佳方法

使用多个着色器的最佳方法
EN

Stack Overflow用户
提问于 2016-06-01 23:53:16
回答 1查看 2.7K关注 0票数 3

几周后,我在著名的OpenGL网站上学到了http://learnopengl.com,并对一个组织的多种材质(着色器)提出了疑问。在本教程中,我们将使用Shader类,该类从from /frag着色器列表中编写Shader程序:

代码语言:javascript
复制
Shader shader("vert.glsl", "frag.glsl");

在那之后,我为着色器创造了制服:

代码语言:javascript
复制
    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.

最后,我们收到了一个着色程序。在这种情况下,我如何制作多个着色器?我试着做:

代码语言:javascript
复制
Shader shader("vertDiff.glsl", "fragDiff.glsl");
Shader shaderGlass ("vertGlass.glsl", "fragGlass.glsl");
Shader shaderLight("vertLight.glsl", "fragLight.glsl")

在此之后,我为每个着色器的.glsl制作制服:

代码语言:javascript
复制
glUniformMatrix4fv(glGetUniformLocation(shader.Program, "model"), 1, GL_FALSE, glm::value_ptr(model));
glUniformMatrix4fv(glGetUniformLocation(shaderGlass.Program, "model"), 1, GL_FALSE, glm::value_ptr(model));

但是阴影不能正常工作。相同的制服需要为每个着色器声明几次,这使得程序不正确。怎样才能正确地制作这个部分?谢谢,为我愚蠢的问题道歉。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-02 00:24:13

当然不管用了。glUniform*调用更改当前绑定程序的统一状态。所以,最近传递给glUseProgram的任何程序。

如果你想修改另一个程序中的制服,你必须切换到另一个程序。或glProgramUniform*.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37580597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档