如何将OpenGLES着色器转换为适用于Metal的着色器?

7
我有一个项目,使用大约2打的.vsh和.fsh文件来使用OpenGLES绘制2D瓷砖。由于这已经被弃用,我想将我的项目转换为Metal。现在我的脑子里充满了这两个系统涉及的词汇和技术 - 图形不是我的强项。
我能否使用OpenGLES编译.vsh/.fsh文件,然后以与Metal兼容的格式保存它们?目标是在以Metal为中心的世界中使用保存的信息,并从项目中删除所有的OpenGLES代码。我已经花了几天时间在这上面,但我还不理解这些过程足够去完全尝试转换到Metal。对任何帮助都表示感谢。
我看到这样一段话:“在支持的设备上,您提供给SKShader的GLSL代码会自动转换为Metal着色语言并在Metal渲染器上运行”,这让我相信有一种方法可以完成这个任务。只是我不知道从哪里开始。iOS 12中OpenGL ES已弃用和SKShader 我看到了这个链接:将OpenGL着色器转换为Metal(Swift)以在CIFilter中使用,如果它回答了我的问题,我不明白是如何回答的。
我认为这个链接也没有回答我的问题:OpenGL ES和OpenGL兼容的着色器
回答/技术可以使用Objective-C或Swift - 现有代码是Objective-C,项目的其余部分已转换为Swift 5。
编辑(20230年6月) 看看这个令人惊叹的链接,以及这个家伙的其他视频。他还提供了一个GitHub演示项目的链接。这是关于使用着色器进行编程基础的(对于那些缺乏基础知识的人来说)。

https://www.youtube.com/watch?v=f4s1h2YETNY

1个回答

7

有很多方法可以实现你想要的:

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

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


我想指出,根据我的经验,从性能方面考虑,你最好尝试自己重写着色器。

谢谢。我会先研究开源着色器交叉编译器。如果时间允许,我会尝试重写我现有的代码。 - Mozahler
1
这是另一个跨编译器选项,支持将GLSL-ES转换为Metal。 - Columbo
3
作为这两个工具的设计者,我建议您使用MoltenVK中的转换器工具,它比MoltenGL中的转换器工具更强大,并且可以处理GLSL和GLSL-ES。 - Bill Hollings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接