【问题标题】:How do you pass a CISampler to a Metal-based CIColorKernel?如何将 CISampler 传递给基于 Metal 的 CIColorKernel?
【发布时间】:2019-01-31 12:11:02
【问题描述】:

我正在尝试制作基于金属的 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

就好像采样器在内核函数中被视为四个单独的参数,但我只能将它们作为一个传递。我是否使用正确的类将图像传递到内核?内核声明有问题吗?我是否可以使用其他方法为我的各种图像获取归一化坐标和采样器?

【问题讨论】:

    标签: ios metal cifilter


    【解决方案1】:

    好吧,我不知道为什么我无法从文档中找到这一点,但原因似乎是filter 类型与CIColorKernel 不兼容。我敢说这是有充分理由的,但我不知道为什么没有更明确地说明。解决方法是改用普通的CIKernel

    【讨论】:

    • 是的,CIColorKernels 是用于处理单个样本(即像素)而不是整个采样器(即纹理)的专用内核。
    猜你喜欢
    • 2021-06-17
    • 2017-06-15
    • 2018-10-24
    • 2017-09-28
    • 2016-02-06
    • 1970-01-01
    • 2016-05-08
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多