ios - 自定义 CIKernel ,将参数传递给 cikernel 时,程序超出了 GLES 统一限制

标签 ios swift core-image cifilter

我正在尝试构建一个自定义过滤器,它会实时扰乱图像的几何形状。我制作了一个非常简单的扭曲内核,它将当前圆圈中的每个像素映射到中心像素。在恰好 55 次迭代之后,程序崩溃并提示 Program exceeds GLES uniform limits。我还注意到崩溃前的迭代次数总是接近 55。 这些限制是什么以及如何克服这个问题? 当内核接收参数时会出现问题,没有参数它工作正常。有什么想法吗?

内核代码

   "kernel vec2 simpleWarp(vec2 center)                      " +
        "{                                                        " +
        "    vec2 p = destCoord();                                " +
        "    float dist = sqrt (dot( p - center, p - center) );   " +
        "    return dist < 50.0 ? center : p;                     " +
        "}                                                        " ;

最佳答案

请就此问题提交雷达错误。

一种解决方法是在 warp 内核组之间插入一个直通内核,以防止 CI 过度连接:

    CIImage* applyPassThrough (CIImage *img)
    {
        static CIKernel *k = nil;
        static NSString * const source = 
              @"kernel vec4 passThrough (sampler s, float v)\n"
               "{ return sample(s, samplerCoord(s)+v); }\n";
        static dispatch_once_t once;
        dispatch_once(&once, ^{
            k = [[CIKernel kernelWithString:source] retain];
        });

        return [k applyWithExtent:img.extent
                      roiCallback:^(int i, CGRect r) { return r; }
                        arguments:@[img, @0.0]];
    }

关于ios - 自定义 CIKernel ,将参数传递给 cikernel 时,程序超出了 GLES 统一限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34794469/

相关文章:

ios - 仅在通过解析保存数据后执行/触发 segue

iphone - 应用商店中是否有针对 iOS 应用评论的 RSS 提要?

iphone - 具有透明背景的 OpenGL ES 2.0 GLKit

string - Swift:预期声明错误将 "Label"设置为字符串变量

ios - 将方向从垂直更改为倒置时更改 Controller 的颜色

ios - "Moving"自定义转换中跨 UIViewController 的 UIViews?

ios - 缩放包含 subview 的 UIImageView

ios - 使用 `CIFilter` 模糊图像时应用程序崩溃

swift - 添加覆盖时捕获的视频非常滞后

swift - 使用滤镜将图像保存到 Swift 3.0 中的照片库