Как передать CISampler в CIColorKernel на основе металлов? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь сделать CIFilter на основе металла, поскольку Apple, кажется, предпочитает использовать это, но у меня возникают проблемы, потому что мне нужно объединить несколько изображений, которые могут быть разных размеров.Это означает, что я должен использовать нормализованные координаты и сэмплеры, чтобы «растянуть» различные входные изображения.

Вот пример ядра:

extern "C" { namespace coreimage {
    float4 stretchKernel(
                         sampler image
                         ) {
        return image.sample(image.coord());
    }
}}

... и я реализую его так:

    let arguments: [Any] = [
        CISampler(image: startingImage, options: samplerOptions)
    ]

    return kernel.apply(extent: startingImage.extent, arguments: arguments)

Теперь странный бит.Если я запускаю это, я получаю следующую ошибку:

Argument info count 1 for function composition does not match argument count 4 in declaration of function

Это как если бы сэмплеры обрабатывались как четыре отдельных аргумента в функции ядра, но я могу передать их только какодин.Я использую правильный класс для передачи изображения в ядро?Что-то не так с объявлением ядра?Могу ли я использовать какой-нибудь другой метод для получения нормализованных координат и сэмплеров для моих различных изображений?

1 Ответ

0 голосов
/ 01 февраля 2019

Ну, я не знаю, почему я не смог выяснить это из документации, но, похоже, причина в том, что тип filter не совместим с CIColorKernel.Я полагаю, что есть веская причина, но я не знаю, почему это не было сделано более ясно.Решение состоит в том, чтобы использовать обычный CIKernel вместо.

...