我一直在调整我的游戏的渲染器,用于我的笔记本电脑,它具有Radeon HD 3850.该芯片具有相当大的处理能力,但内存带宽有限,所以我一直试图移动更多着色器进入更少的传球。着色器限制
以前,我使用的是简单的多路径模型:
- 绑定和清晰FP16共混物缓冲液(随深度缓冲器)
- 深度仅通过
- 对于每个光,做添加剂光通过
- 绑定后备缓冲,使用混合缓冲作为纹理
- 色调映射通过
在试图改善这种方法的性能,我写计数灯动态构建自定义GLSL着色器的数目和类型的新渲染路径。这些着色器接受所有灯光参数作为制服,并在一次通过中完成所有照明。我期望遇到某种限制,所以我先用一盏灯测试它。然后三个。那么二十一,没有错误或文物,并且表现很好。这导致我到我的实际问题:
是可回收的制服的最大数量?
这种方法在旧硬件上是可行的,还是更受限制的制服?
如果我把它推得太远,我会在什么时候得到一个错误?着色器编译?程序链接?使用该程序?
请注意,对于GL2.0,您保证至少有512个顶点制服和64个片段制服。 – 2009-11-24 21:02:18
哦,我的部分没有RTFM。 想到更多的问题: 浮动和整数是否每个都消耗一个组件? 包装有限制吗?四个花车相对于一个vec4?一个浮动和一个vec3? – mvanbem 2009-11-24 21:19:51
@ mvanbem:一件制服至少占用一个4D矢量。所以,如果你对统一存储非常紧张,可以考虑将多个标量打包成一个4D矢量。 – 2009-11-25 18:11:49