MetalPerformanceShadersProxy
一个代理 MetalPerformanceShaders(及其依赖项),它将模拟器上的 存根 导向到 设备的实际实现。它适用于 Swift 和 Objective-C。
当使用 Metal 着色器时,通常不能为模拟器目标进行编译是一个问题。通过使用此代理,您可以在模拟器上编译和运行。请注意,尝试在模拟器上运行 Metal 着色器将失败。尽管如此,它允许实现 Metal 着色器的项目
- 上传到 CocoaPods。
- 创建框架以与 Carthage 一起使用。
- 在模拟器上运行应用程序以使用不依赖于 Metal 着色器的功能。
- 编译单元测试。
- 自动测试(可能使用 CI 服务器)不依赖于 Metal 着色器的应用程序的部分。
用法
如果您使用 Metal,您可能使用来自 CoreVideo
的 CVMetalTexture.h
和 CVMetalTextureCache.h
或来自 QuartzCore
的 CAMetalDrawable.h
。但当针对模拟器时,它们不可用。为了使它们可用,只需这样做
import MetalPerformanceShadersProxy
此 pod 将不会在设备上添加 存根(无足迹!),因为代理使用预处理器宏来决定使用哪个实现。
请注意,如果调用存根方法,将会抛出异常。
从MTK视图中获取currentDrawable
MTKView
的currentDrawable
属性在设备上为CAMetalDrawable
类型,但在模拟器中为MTLDrawable
类型。因此,您需要在代码中对其进行强制类型转换以正确使用。例如,如果您有
let texture = view.currentDrawable.texture
将其更改为
let texture = (view.currentDrawable as? CAMetalDrawable)?.texture
这是我们想出的最佳解决方案。如果您有更好的想法,请提出问题。
高级:何时使用占位符的控制
如果出于某种原因您想控制何时使用占位符,请按如下方式导入占位符:
#if condition
import MetalPerformanceShadersStub
#endif
创建的方式
参见CREATION以获取解释。
要求
- iOS 9.0+
- Xcode 9.0+
要使用之前的Xcode版本,请参阅早期版本。
参与进来
- 如果您想贡献代码,请随时提交拉取请求。
- 如果您有功能请求,请提出问题。
- 如果您找到了错误或需要帮助,请提出问题前先查看旧问题。
特别是,如果您发现缺少Metal依赖框架,请提出问题,或更好的是提交一个拉取请求
在贡献之前,请仔细阅读CONTRIBUTING文件以获取更多信息。
如果您已在您的应用程序中使用MetalPerformanceShadersProxy,我们非常愿意了解!请在Twitter上与我们联系。
示例
按照以下3个步骤运行示例项目:克隆MetalPerformanceShadersProxy仓库,打开MetalPerformanceShadersProxy工作区并运行示例项目。
作为一个实际示例,您可以查看Bender库。
安装
CocoaPods
CocoaPods是Cocoa项目的依赖管理工具。
要安装MetalPerformanceShadersProxy,只需在您的Podfile中添加以下行
pod 'MetalPerformanceShadersProxy', '~> 0.3'
如果您只需要占位符
pod 'MetalPerformanceShadersProxy/Stub', '~> 0.3'
Carthage
Carthage是一个简单的、去中心化的Cocoa依赖管理工具。
要安装MetalPerformanceShadersProxy,只需在您的Cartfile中添加以下行
github "xmartlabs/MetalPerformanceShadersProxy" ~> 0.2
作者
变更记录
可以在变更记录文件中找到。