首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当将参数传递给CIKernel时,自定义cikernel,程序超出了GLES统一限制

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

Stack Overflow用户
提问于 2016-01-15 00:18:57
回答 1查看 273关注 0票数 0

我正在尝试建立一个自定义过滤器,这将扰乱图像的几何实时。我做了一个非常简单的warp内核,它将当前圆圈中的每个像素映射到中心像素。在恰好55次迭代之后,程序崩溃,说程序超出了GLES统一限制。我还注意到在崩溃之前的迭代次数总是接近55次。这些限制是关于什么以及如何克服这个问题?这个问题发生在内核接收参数的时候,没有参数它就能正常工作。有什么想法吗?

内核代码

代码语言:javascript
复制
   "kernel vec2 simpleWarp(vec2 center)                      " +
        "{                                                        " +
        "    vec2 p = destCoord();                                " +
        "    float dist = sqrt (dot( p - center, p - center) );   " +
        "    return dist < 50.0 ? center : p;                     " +
        "}                                                        " ;
EN

回答 1

Stack Overflow用户

发布于 2016-05-18 01:21:37

请在这个问题上提交一个雷达错误。

一种解决方法是在扭曲核心组之间插入传递核,以防止CI过度连接:

代码语言:javascript
复制
    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]];
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34794469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档