一、开场: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 变快——真正的像素绘
