我正在玩iOS游戏,并希望使用此方法进行碰撞检测。
由于每帧都有大量(50+)点检查,我想知道这种方法是否在iDevice的图形硬件上运行。
答案 0 :(得分:4)
关注@DavidRönnqvist观点:它是否“硬件加速”并不重要。重要的是它是否足够快以达到您的目的,然后您可以使用仪器来检查它的吃饭时间并尝试改进。
将代码移动到GPU并不会自动使代码更快;它实际上可以使它慢得多,因为你必须将所有数据传输到GPU内存,这是昂贵的。理想情况下,要在GPU上运行,您需要移动所有数据一次,然后执行大量昂贵的矢量操作,然后将数据移回(或者只是将其放在屏幕上)。如果你不能让问题看起来像那样,那么GPU就不是正确的工具。
它可能是NEON加速,但这又是一种无关紧要的;编译器NEON加速了许多事情(并且在NEON上运行并不总是意味着它运行得更快)。也就是说,如果你可以针对相同的曲线测试很多点(数百或数千),我敢打赌这种问题在NEON上运行得最好。
对于“我有一条随机曲线和一个随机点”的一般情况,您应该假设CGPathContainsPoint()
写得非常快。如果您的问题看起来像这样,您似乎不太可能在自己的硬件上击败Apple工程师(50分不超过1分)。例如,我假设他们已经为您检查了边界框,并且您的重新检查是浪费时间(但我确定它的形象)。
但是如果你可以把问题改成别的东西,比如“我有一条已知的曲线和成千上万的点”,那么你可以手工编写一个更好的解决方案,并且应该看一下Accelerate甚至是手写的NEON攻击它。
首先配置文件,然后进行优化。即使你的问题是“肮脏的”,也不要认为“矢量处理器”完全等同于“快速”。图形处理器更是如此。