iOS 12和SKShader中不推荐使用OpenGL ES

时间:2018-12-18 07:51:45

标签: ios opengl-es sprite-kit fragment-shader metalkit

我对SpriteKit中的着色器的概念和用法非常陌生。

我发现了本教程,该教程介绍了如何使用附加到Color Sprite的Custom Shader属性的自定义着色器文件Fractal.fsh渲染Mandelbrot分形。

https://www.weheartswift.com/fractals-Xcode-6/

一切正常,我自以为是,在SpriteKit中学习OpenGL ES和自定义着色器将是一个有趣的练习。

不过,根据Apple的说法,从iOS 12开始不推荐使用OpenGL ES。

https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html

我的问题是这个:

这是否意味着到目前为止,SpriteKit中使用的自定义着色器应该用Metal编写?

我试图找出如何重写Metal中第一个链接中提到的fractal.fsh着色器代码,但我尚未-能够找到有关如何从OpenGL转换现有自定义SKShader的资源。 ES转换为金属。但是,我并不是要找人重写该代码以使用Metal,而只是指向正确方向的指针。

更新: 根据@ Knight0fDragon的回答,我将尝试阐明我的问题:

SKShader类的文档指出:

“ SKShader对象包含一个自定义OpenGL ES片段着色器。”

https://developer.apple.com/documentation/spritekit/skshader

因此,如果SKShader对象包含自定义的OpenGL ES片段着色器,则在弃用OpenGL ES支持后它将保留什么?

如果从iOS 12开始不能使用OpenGL ES,如何创建自定义片段着色器以在SpriteKit中使用呢? 首先,我认为可以将包含GLSL代码的* .fsh文件替换为包含等效金属代码的* .metal文件,但是这种评估显然太幼稚了(因为我尝试过并且无法将* .metal文件分配给Color Sprite的“自定义着色器”属性)

2 个答案:

答案 0 :(得分:0)

根据Apple(see near bottom of the page at this link)...

  

使用OpenGL ES构建的应用将继续在iOS 12中运行,但OpenGL   在iOS 12中不推荐使用ES。游戏和图形密集型应用程序   以前使用的OpenGL ES现在应该采用Metal [强调了]。

如果您是从头开始的,建议您使用Metal编写着色器。

答案 1 :(得分:0)

摘自"Executing Shaders in Metal and OpenGL "上的文档:

  

在支持该功能的设备上,您提供给SKShader的GLSL代码会自动转换为Metal着色语言并在Metal渲染器上运行。

因此,据我所知,SpriteKit将使用Metal作为可用的后端,并在编译它们时为您转换着色器。我没有找到直接在Metal中编写着色器的选项。