将核心图像着色器语言转换为具有模拟器支持的金属

问题描述 投票:3回答:1

我的应用程序有一些用Core Image Shader语言编写的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)

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

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

因此,您可以在模拟器中运行不建议使用任何不建议使用的方式来编写着色器的建议吗?如果不是这样,我可能会尝试在iOS 13之前使警告消失,并希望SIM卡获得更好的支持。我不知道如何Define CI_SILENCE_GL_DEPRECATION to silence these warnings。我尝试添加CI_SILENCE_GL_DEPRECATION构建设置。

更新既然是今年年底,我就用了我们2张DTS票中的一张来问苹果如何使它静音。他们的响应是在Objective-C文件中使用#pragma GCC diagnostic ignored "-Wdeprecated-declarations”禁用所有不推荐使用的警告,或提交一个有关无法使该警告静音的错误。 :(我想现在我现在只需要将该框架的部署目标留在iOS 11上,希望以后不需要某些功能/错误就可以升级到12。主要应用的部署目标仍然可以是12不过,因此目前它不会影响用户。

ios swift metal core-image
1个回答
2
投票

要使警告静音,请添加到您的构建配置CI_SILENCE_GL_DEPRECATION CI_SILENCE_GL_DEPRECATION的GCC_PREPROCESSOR_DEFINITIONS中>

© www.soinside.com 2019 - 2024. All rights reserved.