objective-c - 如何将 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。
解决方案
有很多方法可以做你想做的事:
1) 您可以使用MoltenGL将您的GLSL着色器无缝转换为MSL。
2) 您可以使用开源着色器交叉编译器,例如:krafix、pmfx-shader等。
我想指出,根据我的经验,您尝试自己重写着色器在性能方面会更好。
推荐阅读
- php - Laravel 根据数据透视表从表中获取标题
- hashtable - TLB 与哈希表有何不同?
- spring - 重置生成 jwt 令牌并更新 spring 安全上下文
- mysql - 不允许 LOAD DATA LOCAL INFILE
- arrays - 这是预期的 Delphi 动态数组行为吗
- java - SLF4J - 基于标签记录到不同的文件
- image - 带有光标图标的 Puppeteer 屏幕截图
- angular - 无法使用任何模拟框架在 Angular 游乐场模拟 ngrx 商店
- python - 如何找到使用 ctypes 从 DLL 文件导入的函数所需的参数?
- r - 颜色在 3D 散点图 (R) 上显示不正确