首页 > 解决方案 > 如何将 OpenGLES 着色器转换为与 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 be used in CIFilter,如果它回答了我的问题,我不明白怎么做。

我认为这也不能回答:OpenGL ES and OpenGL compatible shaders

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

标签: objective-cswiftopengl-esmetal

解决方案


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

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

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


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


推荐阅读