gpt4 book ai didi

iOS 在 CIKernel 中使用 OpenGL 着色器

转载 作者:行者123 更新时间:2023-11-29 11:58:48 25 4
gpt4 key购买 nike

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

示例 OpenGL 着色器

 #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 和 Android 使用相同的过滤器。 Android 已经使用 OpenGL 着色器,所以我想在我的 iOS 应用程序中使用相同的着色器。

最佳答案

您可以,但需要进行一些调整。

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

如果你想逐字使用你的代码,你可以(一口气)考虑一个 Sprite Kit SKShader 来生成一个 SKTexture ,它可以呈现为一个 CGImage

西蒙

关于iOS 在 CIKernel 中使用 OpenGL 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37921660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com