用swift+Metal shader文件编译framework动态库

来源:互联网 发布:魔术笔软件下载 编辑:程序博客网 时间:2024/05/21 06:18

若想用swift语言生成库则只能生成动态库,若是纯swift代码脚本,问题不大,按一般流程就行。
若是编译的库中有shader文件则需要先编译出Metal库。具体方法可采用如下的方式。

  1. 把shader文件和swift文件放在一起进行framework库的编译。编译成功后会自动生成一个default.metallib文件,该文件为shader生成的库文件。
  2. 把生成的framework导入需要调用的地方,注意使用库时需要单独把default.metallib取出来放到工程中的Resource下面。
  3. 使用let library = device.newDefaultLibrary()直接加载Metal库。

上面的方式是最简单的,另外,对shader文件,也可以不在xcode中编译库,而是采取手动的编译方式。参考苹果官方文档:https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Dev-Technique/Dev-Technique.html
手动编译Metal库后,加载库不能采用上面步骤3中的方式,需要采用如下的方式:

guard let metallibpath = Bundle(for: type(of: self)).path(forResource: "YourShader", ofType: "metallib") else {                fatalError("Metal library not found")            }let library = try device.makeLibrary(filepath: metallibpath)if library == nil{                print("metal library is null")            }
原创粉丝点击