iOS 12 CIKernel 过滤器崩溃



我正在使用以下CIColorKernel Code来生成customFilter。

kernel vec4 customFilter(__sample image, __sample noise, float time, float inputNoise) { 
vec2 uv = destCoord() / 1280.0; 
float d = length(uv - vec2(0.5,0.5));
float blur = inputNoise; 
float myTime = time * 1.0;
vec2 myuv =  vec2(uv.x + sin( (uv.y + sin(myTime)) * abs(sin(myTime) + sin(2.0 * myTime) + sin(0.3 * myTime) + sin(1.4 * myTime) + cos(0.7 * myTime) + cos(1.3 * myTime)) * 4.0 ) * 0.02,uv.y) ;
vec2 finalUV = myuv * 1280.0; 
vec3 col; col.r = sample(image, samplerTransform(image, finalUV)).r; col.g = sample(image, samplerTransform(image, finalUV)).g; col.b = sample(image, samplerTransform(image, finalUV)).b;
float scanline = sin(uv.y * 1280.0 *400.0)*0.08; col -= scanline;
// vignette
col *= 1.0 - d * 0.5;
return vec4(col, 1.0); 
}

但是,这段代码适用于iOS 10/iOS 11设备。它使用iOS 12设备产生奇怪的崩溃

[CIKernelPool] 16:40:错误:参数具有意外的类型"vec4"(应该是采样器类型( col.r = sample(image, samplerTransform(image, finalUV((.r;

[CIKernelPool] 17:40:错误:参数具有意外的类型"vec4"(应该是采样器类型( col.g = sample(image, samplerTransform(image, finalUV((.g;

[CIKernelPool] 18:40:错误:参数具有意外的类型"vec4"(应该是采样器类型( col.b = sample(image, samplerTransform(image, finalUV((.b;

这似乎发生在所有使用__sample的 CIColorKernel 中。但是,使用sampler代替__sample并将 CIColorKernel 覆盖到 CIKernel 可以解决崩溃问题,但它不会生成预期的结果。

如错误所述,您向

sample(image, samplerTransform(image, finalUV((.r

这里的图像是类型__sample.但它实际上需要sampler类型。

CIColorKernel确实希望在其参数中输入__sample类型。因此,您需要的是使用CIKernel而不是CIColorKernel。然后,您可以在内核中提供采样器。

kernel vec4 customFilter(sampler image, sampler noise, float time, float inputNoise) {

相关内容

  • 没有找到相关文章

最新更新