首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 12 CIKernel过滤器崩溃

iOS 12 CIKernel过滤器崩溃
EN

Stack Overflow用户
提问于 2018-10-03 08:55:14
回答 1查看 419关注 0票数 4

我使用下面的CIColorKernel代码来生成customFilter。

代码语言:javascript
复制
 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 =samplerTransform(samplerTransform,finalUV).r; CIKernelPool 17:40:错误:参数有意想不到的类型'vec4‘(应该是取样类型) col.g =samplerTransform(图像,finalUV).g; CIKernelPool 18:40:错误:参数有意想不到的类型'vec4‘(应该是取样类型) col.b =samplerTransform(samplerTransform,finalUV).b;

在所有使用CIColorKernel的__sample中,似乎都会发生这种情况。然而,使用sampler代替__sample并将CIColorKernel转换到CIKernel解决了崩溃问题,但并没有产生预期的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 05:32:16

正如错误声明的那样,您向

样本(图像,samplerTransform(图像,finalUV)).r

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

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

代码语言:javascript
复制
 kernel vec4 customFilter(sampler image, sampler noise, float time, float inputNoise) {
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52623246

复制
相关文章

相似问题

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