一、开场:Draw Call 的「隐形税」
假设你在做一款 2D 游戏,屏幕上有 100 个小图标。如果每个图标都用独立纹理(以下为帮助理解的数量级示意值,并非实测数据):
- Draw Call:100 次(每次都要 CPU 提交渲染命令,并可能引发状态切换);
- 提交 + 状态切换开销(示意值):100 × ~0.1 ms = 10 ms;
- 实际像素绘制(GPU 端):100 个小图标像素量很少、绘制很快,且与 Draw Call 次数无关(示意值:~0.2 ms);
- 总耗时(示意值):≈ 10.2 ms / 帧,已逼近 16.67 ms 的 60 FPS 预算。
瓶颈往往不在「绘制本身」,而在「提交与状态切换」。GPU 切换纹理、shader、混合模式等渲染状态时,CPU 需要为每个 Draw Call 做驱动级提交,并等待 GPU 完成上一次绘制。这笔开销就是「Draw Call 的隐形税」。
图集(Atlas)就是解决这个问题:
- 把 100 个小纹理合并为 1 个大纹理;
- Draw Call 降至 1 次(共享渲染状态);
- 提交开销(示意值):1 × ~0.1 ms ≈ 0.1 ms;
- 实际像素绘制不变(示意值:~0.2 ms);
- 总耗时(示意值):≈ 0.3 ms / 帧。
需要强调:图集省掉的是「提交与状态切换」这笔 CPU 开销,而不是让 GPU 变快——真正的像素绘
网硕互联帮助中心


评论前必须登录!
注册