如何检测Core Image的硬件加速?

时间:2014-04-10 13:44:31

标签: macos cocoa core-animation core-image cifilter

在我的应用中,我使用了" CIMotionBlur" CALayer动画期间的CIFilter。问题是当硬件加速不可用时,过滤器无法正常工作:

  • 在OS X安全模式下,图层在动画期间变为不可见;
  • 使用VMWare Fusion时,动画速度难以忍受,让测试应用更加困难;

没有过滤器,动画工作正常。我想在硬件加速可用时才应用过滤器。

什么是允许我知道何时禁用过滤器的最高级API? 我将在IOKit中寻找线索。

3 个答案:

答案 0 :(得分:3)

我在技术Q& A QA1218 中找到了答案 "如何判断特定显示器是否由Quartz Extreme进行硬件加速?"

这很简单:

NSNumber* curScreenNum = [self.window.screen.deviceDescription objectForKey:@"NSScreenNumber"];
if (CGDisplayUsesOpenGLAcceleration(curScreenNum.integerValue))
{
    // Do accelerated stuff
}

在我的案例中按预期工作。

答案 1 :(得分:0)

https://developer.apple.com/library/ios/documentation/graphicsimaging/Conceptual/CoreImaging/ci_concepts/ci_concepts.html#//apple_ref/doc/uid/TP30001185-CH2-TPXREF101

我想你可以用它来确定你想要的过滤器是否可用。如果Core Image不可用,它们可能不可用。

答案 2 :(得分:0)

如果filterNamesInCategory返回CIMotionBlur过滤器的名称,即使它不可用,那么您应该向Apple的bug报告者提交错误报告。

作为进一步的测试,您可以调用filterWithName并检查非零结果。如果你回来没有,你知道过滤器是可用的。

或者你是说在没有硬件加速的平台上,你会找回过滤器,但它不起作用?如果情况如此,则再次提交错误报告。

或者,你是说在非硬件加速的平台上,你会找到一个有效的过滤器,但它太慢而无法使用?

在文档中探讨我没有看到任何方法来判断Core Image是否为某个特定平台加硬件。

然而,CI过滤器是建立在OpenGL之上的,您可以查询OpenGL驱动程序以查看它是否硬件加密。我的猜测是,这样一个查询的结果也会告诉你CIFilters是否是硬件加速的。