Начиная с iOS 12, CIColorKernel (источник: «строка ядра») устарел. Кто-нибудь из вас знает, что для этого является заменой Apple?
Я ищу собственный фильтр CIFilter в Swift. Может есть библиотека с открытым исходным кодом?
Спасибо, это был правильный путь. На мой взгляд, это: developer.apple.com/documentation/coreimage/cikernel мне помогает
Предупреждаем, если вы поддерживаете iOS 12: iPad Air 1 работает под управлением iOS 12, но не может использовать MSL (язык металлического затенения), поскольку для MSL, очевидно, требуется процессор A8 или новее (iPad Air 1 имеет A7). Источник: WWDC 2017 510 - asciiwwdc.com/2017/sessions/510





Еще на 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/…
Застрял где именно?
Пока я пытаюсь изменить файл .air на .metallib, я просто получаю: Metallib: Модуль чтения ошибок: Неверная подпись битового кода
Посмотрите здесь: medium.com/@shu223/core-image-filters-with-metal-71afd6377f4 и developer.apple.com/metal/MetalCIKLReference6.pdf Page 9 Я выполнил эти шаги, и команды такие же, как параметр сборки. С CIKernel мне нужен .metal для ядра, чтобы построить мой собственный CIFilter.
Я до сих пор не разбираюсь в части .air. Очевидно, его формат отличается от .metallib. Если у вас есть фильтр, написанный на Core Image Kernel Language, вам нужно будет переписать его на Metal Shading Language с нуля.
Я написал .metal файл с ядром. Я скомпилировал его в воздушный файл, и следующим шагом будет его компиляция в Metallib для использования в проекте. Для создания CIKernel мне нужен файл Metallib. Именованные флаги делают то же самое, но сначала я хочу протестировать через терминал, где я получаю сообщение об ошибке.
Понятно. Я никогда не использовал CLI для этой цели, только настройки сборки проекта Xcode. В проекте все работает нормально. Что касается CLI, я прокомментировал ваш другой вопрос - stackoverflow.com/questions/52992783/…
Я пытался следить за этими сообщениями в блоге и документами по 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:

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