我正在研究着色器管理器架构,我有几个问题需要更高级的人员.我目前的选择反对两种设计:
1.每个材质着色器程序
=>为程序中使用的每种材质创建一个着色器程序.
潜在的缺点:
- 考虑到每个对象可能都有自己的材质,它涉及很多glUseProgram调用.
- 意味着创建了许多着色器程序对象.
- 更复杂的架构#2.
优点:
- 可以专门为材料中使用的每个"选项"生成着色器代码.
- 如果我没错,制服必须只设置一次(创建着色器程序时).
2.全局着色器程序
=>为每个着色器功能(闪电,反射,视差映射......)创建一个着色器程序,并根据要渲染的材质使用配置变量启用或放弃选项.
潜在的缺点:
优点:
- 较低的着色器程序计数.
- 减少SP swich(glUseProgram).
您可能会注意到我目前的趋势是#1,但我想知道您对此的看法.
- 初始制服设置是否会抵消glUseProgram呼叫开销(我不是特别速度怪胎)?
- 在#1的情况下,对于任何内存或性能考虑,我应该在创建SP时只调用一次glLinkProgram,还是每次调用glUseProgram时都必须取消链接/链接?
- 有更好的解决方案吗?
谢谢!