我正在使用示例代码:https://github.com/laanlabs/SCNTechniqueGlow。此代码使用 SCNTechnique 使 3d 模型发光。
现在我想将发光功能移至框架而不是主包中(以便我可以在不同的应用程序中重用它)。因此,我将一些创建 SCNTechnique、
plist
文件和 metal
文件的助手移至框架中。然后发光停止工作(屏幕在第一帧冻结)。
我怀疑这是因为我需要对框架中的金属文件做一些特殊的事情。例如,在这个问题中:Metal 文件作为 iOS 框架的一部分。这似乎表明我需要在框架中设置金属文件。然而,就我而言,金属代码是由
SCNTechnique
(从 plist 文件创建)调用的,并且我不直接处理金属文件。
编辑:
在此处添加了一个可重现的项目:https://drive.google.com/file/d/1h_7_gKQGmUX1YOW_tee3SJ7liY80BNtC/view?usp=drive_link
由于 Metal 文件位于框架中,该项目现在无法运行,但如果将 Metal 文件移至主二进制文件中,它将再次开始运行。
找到解决方案:我可以设置该技术的
library
属性:
let device = MTLCreateSystemDefaultDevice()
let lib = try! device!.makeDefaultLibrary(bundle: bundle)
technique.library = lib