OpenGL ES устарела в iOS 12 и SKShader - PullRequest
0 голосов
/ 18 декабря 2018

Я очень новичок в концепции и использовании шейдеров в SpriteKit.

Я нашел этот урок о том, как визуализировать фрактал Мандельброта с помощью пользовательского файла шейдера - Fractal.fsh, прикрепленного к Custom Color Color Sprite.Свойство шейдера.

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

Мой вопрос такой:

Означает ли это, что пользовательские шейдеры для использования в SpriteKit должныбыть написанным на металле на данный момент?

Я попытался выяснить, как переписать код шейдера fractal.fsh, упомянутый в первой ссылке, на металле, но я пока не смог найтилюбые ресурсы о том, как конвертировать существующие пользовательские SKShader из OpenGL ES в Metal.Тем не менее, я НЕ ищу кого-то, чтобы переписать этот код для использования металла, только указатель в правильном направлении.

ОБНОВЛЕНИЕ: Основываясь на ответе @ Knight0fDragon, я постараюсь уточнитьмой вопрос:

Документация по классу SKShader гласит:

"Объект SKShader содержит пользовательский фрагментный шейдер OpenGL ES."

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

Так что, если объект SKShader содержит пользовательский фрагментный шейдер OpenGL ES, что он будет содержать после того, как поддержка OpenGL ES устареет?

Как можно продолжить создание пользовательского фрагментного шейдера для использования в SpriteKit, еслинельзя использовать OpenGL ES с iOS 12?Сначала я подумал, что файл * .fsh, содержащий код GLSL, можно заменить файлом * .metal, содержащим эквивалентный металлический код, но эта оценка была явно слишком наивной (потому что я пытался и не мог назначить файл * .metalСвойство «Цветной спрайт» для пользовательского шейдера)

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Из документации по "Выполнение шейдеров в металле и OpenGL" :

На устройствах, которые поддерживают его, код GLSL, который вы предоставляете SKShader, автоматически преобразуется в затенение металлаи запускаем на рендере Metal.

Итак, насколько я понимаю, SpriteKit будет использовать Metal как бэкэнд, где он доступен, и конвертировать ваши шейдеры для вас при их компиляции.Я не нашел возможности напрямую написать шейдеры в металле.

0 голосов
/ 22 декабря 2018

Согласно Apple ( см. В нижней части страницы по этой ссылке ) ...

Приложения, созданные с использованием OpenGL ES, продолжат работать в iOS 12, но OpenGLES устарела в iOS 12. Игры и приложения с интенсивной графикой, которые ранее использовали OpenGL ES, теперь должны использовать Metal [выделение добавлено].

Если вы начинаете с нуля, яПредлагаю вам написать шейдеры в металле.

...