具有模拟器支持的 Core Image 着色器语言转换为金属

Core Image shader language conversion to metal with simulator support

我的应用程序有一些用 Core Image Shader Language 编写的 Core Image 着色器。我像 CIColorKernel(source: <kernel string here>) 一样加载它们。我刚刚将我的应用程序的部署目标从 iOS 11.0 提高到 12.0。现在我收到以下警告。

'init(source:)' was deprecated in iOS 12.0: Core Image Kernel Language API deprecated. (Define CI_SILENCE_GL_DEPRECATION to silence these warnings)

因为我们的应用构建时将警告视为错误,所以我必须隐藏或修复此警告。

我可以用金属着色器语言重写着色器,这样我就可以使用 CIColorKernel(functionName: <name>, fromMetalLibraryData: <data>),但是模拟器不支持金属。所以如果我那样做,那么我们将无法从模拟器中获取我们需要的所有设备的屏幕截图。我可以用金属重写着色器,并且只在 运行 在设备上加载金属着色器,回落到模拟器上的当前着色器。然而,这似乎并不理想,因为我们需要维护 2 组函数。这也需要我以某种方式隐藏弃用警告。

那么,关于在模拟器中可以 运行 编写着色器的非弃用方式的任何建议?如果不是,我可能会尝试将警告静音,直到 iOS 13 并希望 sim 卡获得更好的支持。我不知道如何 Define CI_SILENCE_GL_DEPRECATION to silence these warnings。我试过添加 CI_SILENCE_GL_DEPRECATION 构建设置。

更新 因为是年底,我用我们的 2 个 DTS 票中的一个来询问 Apple 如何将其静音。他们的回应是在 Objective-C 文件中使用 #pragma GCC diagnostic ignored "-Wdeprecated-declarations” 来禁用所有已弃用的警告,或者提交一个关于无法消除此警告的错误。 :( 我想现在我只需要将该框架的部署目标暂时保留在 iOS 11,并希望我将来不需要升级到 12 feature/bug。主应用程序的部署目标仍然可以是 12,所以现在它不会影响用户。

要消除警告,请添加到构建配置的 GCC_PREPROCESSOR_DEFINITIONS CI_SILENCE_GL_DEPRECATION