News:Starling 1.1在iPad1代性能提升的原因

来自Starling中文站
跳转到: 导航, 搜索

翻译:郭少瑞

Starling 1.1在iPad 1代上取得了明显的性能提升,背后的原因是什么呢?


plonkman 说:

老兄. 如果你看到了这个类 "QuadBatch", 你就会看到一个变量叫做mbTinted.

如果你看到在什么地方用到了这个变量,你就会注意到它简化了着色器代码(当四边形批次等于!mbTinted的时候)。所以如果你的四边形的透明度是1.0并且没有应用着色,你就得到了一个快速的着色路径。


Daniel 说:

没错!

发生的事情可以总结如下:

在之前的Starling版本中,片段着色器从一个顶点着色器获取一个色值,乘以来自活动纹理的texel色值,然后返回该值。

这似乎是个超级简单的操作,是不是?但是在iPad 1上,我们发现在混合模式下,这突然变的很慢。只有两件事可以让我们保持快速:

  • a)停止混合模式
  • b)避免相乘

很显然,a)是个只有不得已而为之的选择。但是我们可以在大部分时间里避免相乘,这是因为大多数对象是白色的而且完全不透明的。删除这个简单的相乘,可以在iPad上得到500%的速度提升。

缺点:改变透明度或任何顶点的颜色,现在都会导致一个状态改变。这就意味着,通常情况下,会更加频繁的调用“drawTriangle”方法。

有趣的是,这种情况不会在OpenGL ES1上发生。在Sparrow(Starling的姐妹框架),我可以为对象着色而且没有任何损失。这不是Stage3D的错误:我直接用Obj-C和OpenGL ES 2.0写了一个例子,然后反馈的结果就像Stage3D的结果一样。

因此,我猜测这是OpenGL ES 2.0在iPad上的实施的一个Bug,或者更确切的说是对GPU/驱动器的限制,因为这个问题也发生在一些Android设备上。

因此,我完全明白,你在这个地方有疑问。实际上我也有很大的疑问,因此我花了很多时间来证明这个事情。如果你发现了什么不同的东西,欢迎告诉我!

个人工具
名字空间

变换
操作
导航
Starling中文资料
Starling原创教程
论坛
友链
工具箱