CGPathContainsPoint()硬件是否加速?

问题描述:

我正在做一个iOS游戏,并希望使用这种方法进行碰撞检测。CGPathContainsPoint()硬件是否加速?

由于有很多(50+)点来检查每一帧,我想知道这个方法是否运行在iDevice的图形硬件上。

+3

我会测量并看看它是如何执行的(在真实设备上)。如果它减慢它们,也许你可以通过首先测试路径的边界框来过滤这些点。 – 2013-05-10 14:54:13

+0

谢谢!是的,我必须先检查边界框! – bijan 2013-05-10 17:19:24

继续@DavidRönnqvist点:无论它是否是“硬件加速”或不。重要的是它是否足够快达到您的目的,然后您可以使用乐器来检查它在哪里吃东西并尝试改进。将代码移动到GPU并不会自动使其更快;它实际上可能会让速度变慢,因为你必须将所有的数据传送到GPU内存,这很昂贵。理想情况下,要在GPU上运行,您需要移动所有数据一次,然后执行大量昂贵的矢量操作,然后将数据移回(或将其放在屏幕上)。如果你不能让问题看起来像那样,那么GPU不是正确的工具。

它可能是NEON加速的,但这又是一种无关紧要的事情;编译器NEON加速了很多事情(并且在NEON上运行并不总意味着它运行得更快)。也就是说,如果您可以针对相同的曲线测试多个点(数百或数千),那么我敢打赌,这种问题在NEON上运行得最好。

你应该假设CGPathContainsPoint()写成对于“我有一个随机曲线和一个随机点”的一般情况来说相当快。如果您的问题看起来如此,您似乎不太可能在自己的硬件上击败苹果工程师(50分并不比1多)。举例来说,我假设他们已经在为你检查边界框,并且你的重新检查正在浪费时间(但我确定它是这样描述的)。

但如果你可以改变问题到别的东西,比如“我有十万点的已知曲线和十”,那么你或许可以手工编写一个更好的解决方案,应该看看加快,甚至手写NEON攻击它。

简介第一,然后优化。即使你的问题是“肮脏的”,也不要认为“矢量处理器”完全等同于“快速”。图形处理器更是如此。

+0

谢谢你的队友,你的出色答案。它帮助我真正理解了这个问题,并且我学到了一些东西! – bijan 2013-05-11 11:14:58