小编Kai*_*ini的帖子

为什么Sprite Batcher更快?

我正在阅读Beginning Android Games(Mario Zechner).

在阅读使用OpenGL ES 1.0的2D游戏时,作者介绍了SpriteBatcher的概念,它采用每个精灵来渲染坐标和角度.然后SpriteBatcher计算精灵矩形的最终坐标并将其放入一个大缓冲区.

render方法中,SpriteBatcher设置所有sprite的状态一次(纹理,混合,顶点缓冲区,纹理坐标缓冲区).所有精灵都使用相同的纹理但不是相同的纹理坐标.

这种行为的好处是:

  • 渲染管道不会停止,因为渲染所有精灵时没有状态更改.
  • OpenGL调用较少.(=减少JNI开销)

但我看到一个主要的缺点:

  • 为了旋转,CPU必须计算正弦和余弦,并为每个精灵执行16次乘法运算.据我所知,计算正弦和余弦是非常昂贵和缓慢的.

但SpriteBatcher方法比使用大量glRotate/glTranslate逐个渲染精灵要快得多.

最后我的问题:

  • 为什么它更快?OpenGL状态变化真的那么贵吗?
  • GPU针对向量乘法和旋转进行了优化,而CPU则不是.为什么不重要?
  • 人们会在桌面上使用SpriteBatcher并使用专用的GFX卡吗?
  • 是否存在SpriteBatcher效率低下的问题?

opengl-es

2
推荐指数
1
解决办法
1683
查看次数

标签 统计

opengl-es ×1