我正在尝试构建一个自定义过滤器,它会实时混淆图像的几何体。我做了一个非常简单的扭曲内核,它将当前圆圈中的每个像素映射到中心像素。经过55次迭代后,程序崩溃说程序超过GLES统一限制。我还注意到崩溃前的迭代次数总是接近55。 那些限制是什么以及如何克服这个问题? 当内核接收参数时会出现问题,没有参数它可以正常工作。有什么想法吗?
内核代码
"kernel vec2 simpleWarp(vec2 center) " +
"{ " +
" vec2 p = destCoord(); " +
" float dist = sqrt (dot( p - center, p - center) ); " +
" return dist < 50.0 ? center : p; " +
"} " ;
答案 0 :(得分:1)
请就此问题提出雷达错误。
解决方法是在warp内核组之间插入pass-through内核,以防止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]];
}