iOS 在 CIKernel 中使用 OpenGL 着色器
iOS using OpenGL shaders in CIKernel
是否可以使用 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 应用程序中使用相同的着色器。
可以,但需要进行一些调整。
vTextureCoord
和 samplerExternalOES
将作为参数传递给内核函数。
sTexture
类型将是 __sample
(假设您使用的是 CIColorKernel
,这意味着内核只能访问当前正在计算的像素)
- 对于颜色内核,函数声明将是
kernel vec4 xyzzy(__sample pixel)
- 您不能将其命名为 main
.
- 您不需要
texture2D
颜色内核。在上面的示例中,pixel
保存当前像素的颜色。
- 您的核函数需要 return 颜色作为
vec4
,而不是设置 gl_FragColor
的值。
如果您想逐字使用您的代码,您可以(一口气)考虑使用 Sprite Kit SKShader
来生成可以呈现为 CGImage
的 SKTexture
。
西蒙
是否可以使用 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 应用程序中使用相同的着色器。
可以,但需要进行一些调整。
vTextureCoord
和samplerExternalOES
将作为参数传递给内核函数。sTexture
类型将是__sample
(假设您使用的是CIColorKernel
,这意味着内核只能访问当前正在计算的像素)- 对于颜色内核,函数声明将是
kernel vec4 xyzzy(__sample pixel)
- 您不能将其命名为main
. - 您不需要
texture2D
颜色内核。在上面的示例中,pixel
保存当前像素的颜色。 - 您的核函数需要 return 颜色作为
vec4
,而不是设置gl_FragColor
的值。
如果您想逐字使用您的代码,您可以(一口气)考虑使用 Sprite Kit SKShader
来生成可以呈现为 CGImage
的 SKTexture
。
西蒙