首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS在CIKernel中使用OpenGL着色器

iOS在CIKernel中使用OpenGL着色器
EN

Stack Overflow用户
提问于 2016-06-20 11:42:37
回答 1查看 584关注 0票数 1

是否可以使用OpenGL着色器在iOS中使用CIKernel?如果没有,是否有办法在两者之间进行转换?

示例OpenGL着色器

代码语言:javascript
复制
 #extension GL_OES_EGL_image_external : require
precision mediump float;
varying vec2 vTextureCoord;
uniform samplerExternalOES sTexture;
void main() {
    vec4 textureColor = texture2D(sTexture, vTextureCoord);
    vec4 outputColor;
    outputColor.r = (textureColor.r * 0.393) + (textureColor.g * 0.769) + (textureColor.b * 0.189);
    outputColor.g = (textureColor.r * 0.349) + (textureColor.g * 0.686) + (textureColor.b * 0.168);
    outputColor.b = (textureColor.r * 0.272) + (textureColor.g * 0.534) + (textureColor.b * 0.131);
    outputColor.a = 1.0;
    gl_FragColor = outputColor;

我正试图为iOS和安卓使用相同的过滤器。安卓已经使用了OpenGL着色器,所以我想在我的iOS应用程序中使用相同的着色器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-25 11:05:17

你可以但只要稍微调整一下就行了。

  • vTextureCoordsamplerExternalOES将作为参数传递到内核函数中。
  • sTexture类型为__sample (假设您使用的是CIColorKernel,这意味着内核只能访问当前正在计算的像素)
  • 对于颜色内核,函数声明将是kernel vec4 xyzzy(__sample pixel) --您不能将它命名为main
  • 在彩色内核中不需要texture2D。在上面的示例中,pixel保存当前像素的颜色。
  • 内核函数不需要设置gl_FragColor的值,而是需要以vec4的形式返回颜色。

如果您想逐字使用代码,可以考虑使用Sprite Kit SKShader来生成SKTexture,该SKTexture可以呈现为CGImage

西蒙

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37921660

复制
相关文章

相似问题

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