【发布时间】:2018-01-13 19:42:00
【问题描述】:
我一直在使用 Xcode 项目,但现在我正在启动一个我希望将来在其他平台上运行的项目,所以我正在使用 Swift Package Manager 来生成项目,但我遇到了一个问题,我的库需要包含一个金属着色器文件(也是一个 openGL 着色器文件),但我不知道如何做到这一点。
我的项目有 2 个部分,包含图形内容的库和我的实际应用程序的可执行文件,所以我想将我的图形库导入到我的应用程序中,但问题是金属着色器文件不包含在Xcode 项目似乎也没有编译/包含在库的捆绑文件中,因此我可以在运行时加载并在需要时使用它。
另外,如果您认为我做的事情完全错误,请指出我。
问候
【问题讨论】:
-
我不确定我是否理解您的问题 - 我从未使用过 Swift 包管理器。 (1) 你的 Swift “库” 是框架目标吗? (2) 这些着色器是您需要访问的“文件”吗? (3) 你能把这些文件变成一个bundle,然后手动将它们包含在Xcode项目中吗?如果您对这三个问题的回答都是“是”,我相信我可以帮助您。
-
(1) Swift库是默认类型的(我觉得只能是动态的也可以是静态的,所以必须是dylib之类的。(2)我认为必须直接编译的metal文件进入metallib,你不需要直接在你的代码中引用它,只需将顶点函数和片段函数设置到金属初始化(MTLLibrary)中。(3)我不太确定如果我捆绑文件是否会保留重新创建 Xcode 项目(添加一些新的依赖项时我需要重新创建 Xcode 项目(或者至少我这样做)
-
是的……总而言之,我对你正在做的事情表现出我的缺乏经验。我以为是不一样的。我有使用
CIKernels的项目(和我import的框架)是GLSL 代码文件。当它是一个框架时,应用程序只需要import。听起来我对你没有帮助,对不起。 -
你写的“我认为金属文件必须直接编译成metallib,你不需要在你的代码中直接引用它,只需将顶点函数和片段函数设置到金属初始化(MTLLibrary ”。那么哪个代码引用了它?是可执行文件中的代码必须执行金属初始化吗?
-
它是一个库(游戏引擎),我想通过 SPM 分发它,因此着色器位于游戏引擎上。我刚刚发现金属着色器被编译为 metallib 文件,所以我最终创建了一个 bash 脚本,查看我的答案以获取更多信息,但我仍然对结果不满意,但现在我仍然可以处理项目而无需为此担心太多,以后肯定我会找到解决方案或其他人会提供更好的方法。
标签: swift metal swift-package-manager