Замена кастомного CIFilter в iOS 12

Начиная с iOS 12, CIColorKernel (источник: «строка ядра») устарел. Кто-нибудь из вас знает, что для этого является заменой Apple?

Я ищу собственный фильтр CIFilter в Swift. Может есть библиотека с открытым исходным кодом?

Начиная с iOS 12, CIColorKernel обновляется с помощью CIKernel и CIWarpKernel, подробности вы можете проверить в документации. developer.apple.com/metal/…

Rahul 25.10.2018 14:57

Спасибо, это был правильный путь. На мой взгляд, это: developer.apple.com/documentation/coreimage/cikernel мне помогает

Terus 25.10.2018 15:08

Предупреждаем, если вы поддерживаете iOS 12: iPad Air 1 работает под управлением iOS 12, но не может использовать MSL (язык металлического затенения), поскольку для MSL, очевидно, требуется процессор A8 или новее (iPad Air 1 имеет A7). Источник: WWDC 2017 510 - asciiwwdc.com/2017/sessions/510

xaphod 25.10.2019 19:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
2 683
3

Ответы 3

Еще на WWDC 2017 было объявлено, что пользовательские фильтры также могут быть написаны с помощью Metal Shading Language - https://developer.apple.com/documentation/coreimage/writing_custom_kernels

Итак, теперь очевидно, что они полностью избавляются от Core Image Kernel Language.

Вот краткое введение в создание CIColorKernel с помощью Metal - https://medium.com/@shu223/core-image-filters-with-metal-71afd6377f4

На самом деле писать ядра с помощью Metal проще, единственная проблема заключается в том, что вам нужно указать 2 флага компилятора в проекте (см. Статью выше).

Спасибо, я нашел и этот учебник. Но я застрял с: xcrun metal -fcikernel Filter.metal -o Filter.air xcrun metallib -cikernel Filter.air -o Filter.metallib stackoverflow.com/questions/52992783/…

Terus 28.10.2018 13:40

Застрял где именно?

Maxim Volgin 28.10.2018 13:41

Пока я пытаюсь изменить файл .air на .metallib, я просто получаю: Metallib: Модуль чтения ошибок: Неверная подпись битового кода

Terus 28.10.2018 14:03

Посмотрите здесь: medium.com/@shu223/core-image-filters-with-metal-71afd6377f4 и developer.apple.com/metal/MetalCIKLReference6.pdf Page 9 Я выполнил эти шаги, и команды такие же, как параметр сборки. С CIKernel мне нужен .metal для ядра, чтобы построить мой собственный CIFilter.

Terus 28.10.2018 17:24

Я до сих пор не разбираюсь в части .air. Очевидно, его формат отличается от .metallib. Если у вас есть фильтр, написанный на Core Image Kernel Language, вам нужно будет переписать его на Metal Shading Language с нуля.

Maxim Volgin 28.10.2018 17:36

Я написал .metal файл с ядром. Я скомпилировал его в воздушный файл, и следующим шагом будет его компиляция в Metallib для использования в проекте. Для создания CIKernel мне нужен файл Metallib. Именованные флаги делают то же самое, но сначала я хочу протестировать через терминал, где я получаю сообщение об ошибке.

Terus 28.10.2018 19:49

Понятно. Я никогда не использовал CLI для этой цели, только настройки сборки проекта Xcode. В проекте все работает нормально. Что касается CLI, я прокомментировал ваш другой вопрос - stackoverflow.com/questions/52992783/…

Maxim Volgin 28.10.2018 20:16

Я пытался следить за этими сообщениями в блоге и документами по Apple, но эта интеграция между CoreImage и Metal довольно запутывала. После долгих поисков я закончил тем, что создал реально работающий пример приложения для iOS, который демонстрирует, как написать функцию оттенков серого ядра Metal и заставить ее обрабатывать конвейер CoreImage.

Вы можете использовать это так:

 let url = Bundle.main.url(forResource: "default", withExtension: "metallib")!
 let data = try! Data(contentsOf: url)
 let kernel = try! CIKernel(functionName: "monochrome", fromMetalLibraryData: data)
 let sampler = CISampler(image: inputImage)
 let outputImage = kernel.apply(extent: image.extent, roiCallback: { _, rect in rect }, arguments: [sampler])

Согласно яблоко: «Вам необходимо установить эти флаги, чтобы использовать MSL в качестве языка шейдеров для CIKernel. Вы должны указать некоторые параметры в Xcode на вкладке« Параметры сборки »целевой цели вашего проекта. Первым параметром, который вам нужно указать, является флаг -fcikernel в разделе« Другое ». Параметр Metal Compiler Flags. Второй - добавить определяемую пользователем настройку с ключом MTLLINKER_FLAGS со значением -cikernel:

Другие вопросы по теме