【发布时间】:2016-09-28 18:16:10
【问题描述】:
我正在努力解决以下问题:
我有一个对象,我希望能够使用两组不同的顶点/片段着色器进行渲染,每个着色器都有自己的制服和纹理,并在这两个设置之间来回切换。 (我知道在这种情况下,我可以只有一个着色器,它有一个统一的指令来运行哪个逻辑,但这是我无法做到的更大事情的一部分)
- 我应该使用一个还是两个 gl 程序(由
glCreateProgram()创建)? - 如果我使用两个程序,是否可以丢弃未使用的程序,并在以后需要时重新构建它?还是太慢了?
- 如果我只使用一个程序:
- 我可以在开始时只编译一次着色器吗?
- 切换时我应该分离旧着色器,附加新着色器并重新链接程序吗?
- 我应该在链接后重新计算所有制服位置吗?
- 我应该在链接后重新绑定数组缓冲区吗?
- 我应该做些什么来删除以前附加的纹理吗?
【问题讨论】:
-
创建和链接着色器通常是一个非常缓慢的操作。我建议在开始时简单地创建两个程序并在必要时使用它们。有关更多信息,您必须提供有关您的使用场景的更多详细信息。例如,必须更改着色器的频率。