如何将 OpenGLES 着色器转换为 Metal 兼容的着色器?

Moz*_*ler 5 opengl-es objective-c swift metal

我有一个项目,它使用大约 2 打.vsh.fsh文件使用 OpenGLES 绘制 2D 图块。由于已弃用,我想将我的项目转换为 Metal。我现在脑子里充斥着两个系统中涉及的词汇和技术——图形不是我的强项。

我可以使用 OpenGLES 编译 .vsh/.fsh 文件,然后将它们保存为与金属兼容的格式吗?目标是然后在以金属为中心的世界中使用保存的信息并从项目中删除所有 OpenGLES 代码。我已经在这方面花了几天时间,但我对这些过程还不够了解,无法完全尝试过渡到 Metal。任何/所有帮助表示赞赏。

我看到了这一点:“在支持它的设备上,您提供给 SKShader 的 GLSL 代码会自动转换为 Metal 着色语言并在 Metal 渲染器上运行”,这让我相信有一种方法可以完成这项工作。我只是不知道从哪里开始。OpenGL ES 在 iOS 12 和 SKShader 中弃用

我见过这个: Convert OpenGL shader to Metal (Swift) to used in CIFilter,如果它回答了我的问题,我不明白如何。

我认为这也没有答案:OpenGL ES and OpenGL compatible shaders

答案/技术可以使用 Objective-C 或 Swift - 现有代码是 Objective-C,项目的其余部分已转换为 Swift 5。

0xB*_*1A8 5

有很多方法可以做你想做的事:

1) 您可以使用MoltenGL将您的GLSL着色器无缝转换为MSL

2) 您可以使用开源着色器交叉编译器,例如:krafixpmfx-shader等。


我想指出,根据我的经验,尝试自己重写着色器在性能方面会更好。

  • 作为这两个工具的设计者,我建议您使用 [MoltenVK](https://github.com/KhronosGroup/MoltenVK) 中的转换器工具,它比 MoltenGL 中的转换器工具更强大,并且除了处理 GLSL 之外,还可以处理 GLSL。 GLSL-ES。 (3认同)