加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:10:40 所属栏目:百科 来源:网络整理
导读:若想用swift语言生成库则只能生成动态库,若是纯swift代码脚本,问题不大,按一般流程就行。 若是编译的库中有shader文件则需要先编译出Metal库。具体方法可采用如下的方式。 把shader文件和swift文件放在一起进行framework库的编译。编译成功后会自动生成一

若想用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")
            }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读