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