我一直在为我的笔记本电脑调整我的游戏渲染器,它有一个 Radeon HD 3850。这个芯片具有相当大的处理能力,但内存带宽相当有限,所以我一直在尝试将更多的着色器工作转移到更少的通道中。
以前,我使用的是简单的多通道模型:
-
绑定并清除 FP16 混合缓冲区(带深度缓冲区)
- 仅深度通行证
- 对于每个灯光,做一个附加的灯光通道
-
绑定后台缓冲区,使用混合缓冲区作为纹理
- 色调映射通道
为了提高这种方法的性能,我编写了一个新的渲染路径,它计算灯光的数量和类型,以动态构建自定义 GLSL 着色器。这些着色器接受所有光照参数作为制服,并在一次通过中完成所有光照。我预计会遇到某种限制,所以我先用一盏灯对其进行了测试。然后三个。然后是 21 个,没有错误或伪像,并且表现出色。这引出了我的实际问题:
制服的最大数量是可取的吗?
这种方法在旧硬件上是否可行,还是制服更受限制?
如果我把它推得太远,我会在什么时候收到错误?着色器编译?程序链接?使用程序?