我对 SpriteKit 中着色器的概念和使用非常陌生。
我发现本教程介绍了如何使用附加到 Color Sprite 的自定义着色器属性的自定义着色器文件 - Fractal.fsh 渲染 Mandelbrot 分形。
https://www.weheartswift.com/fractals-Xcode-6/ https://www.weheartswift.com/fractals-Xcode-6/
它工作得很好,我认为学习 OpenGL ES 和 SpriteKit 中的自定义着色器将是一个有趣的练习。
不过,根据 Apple 的说法,OpenGL ES 自 iOS 12 起已被弃用。
https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html
我的问题是这样的:
这是否意味着 SpriteKit 中使用的自定义着色器现在应该用 Metal 编写?
我试图弄清楚如何在 Metal 中重写第一个链接中提到的 fractal.fsh 着色器代码,但我还没有找到任何有关如何将现有自定义 SKShader 从 OpenGL ES 转换为 Metal 的资源。然而,我并不是在寻找有人重写该代码以使用 Metal,而只是寻找一个指向正确方向的指针。
UPDATE:根据@Knight0fDragon 的回答,我将尝试澄清我的问题:
SKShader 类的文档指出:
“SKShader 对象包含自定义 OpenGL ES 片段着色器。”
https://developer.apple.com/documentation/spritekit/skshader https://developer.apple.com/documentation/spritekit/skshader
那么,如果 SKShader 对象拥有自定义的 OpenGL ES 片段着色器,那么在对 OpenGL ES 的支持被弃用后,它将拥有什么?
如果从 iOS 12 开始无法使用 OpenGL ES,那么如何继续创建一个在 SpriteKit 中使用的自定义片段着色器呢?
首先,我认为包含 GLSL 代码的 *.fsh 文件可以替换为包含等效金属代码的 *.metal 文件,但这种评估显然太天真了(因为我尝试过,但无法将 *.metal 文件分配给Color Sprite 的 Custom Shader 属性)