2016-06-20 6 views
1

Ist es möglich, OpenGL-Shader in iOS mit CIKernel zu verwenden? Wenn nicht, gibt es eine Möglichkeit, zwischen den beiden zu konvertieren?iOS mit OpenGL-Shadern in CIKernel

Beispiel OpenGL Shader

#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; 

Ich versuche, die gleichen Filter für iOS und Android zu verwenden. Android verwendet bereits OpenGL-Shader, daher möchte ich dieselben Shader in meiner iOS-App verwenden.

+0

Ich denke, eine richtige Antwort würden Sie sagen, wie nicht buchstäblich die Frage zu beantworten, aber die Zeit zu sein, was es ist, alles, was ich Zeit habe zu sagen: Ja, das ist genau das, was CIKernel für ist. So können Sie GLSL verwenden, um eine Bildmodifikation durchzuführen, ohne dass Sie Ihre Benutzeroberfläche in OpenGL anders reproduzieren müssten. Also ja. Ja, du kannst. – Tommy

Antwort

1

Sie können, aber mit ein paar Verbesserungen.

  • vTextureCoord und samplerExternalOES würden in eine Kernel-Funktion als Argumente übergeben werden.
  • Der sTexture Typ __sample (vorausgesetzt, Sie ein CIColorKernel verwenden, das die Kernel bedeutet, dass nur die Pixel zur Zeit zugreifen kann berechnet wird) wäre
  • Für einen Farbkern, würde die Funktionsdeklaration kernel vec4 xyzzy(__sample pixel) - Sie nicht benennen können es main.
  • Sie brauchen nicht texture2D in einem Farbkernel. Im obigen Beispiel enthält pixel die Farbe des aktuellen Pixels.
  • Anstatt den Wert gl_FragColor festzulegen, muss Ihre Kernelfunktion die Farbe vec4 zurückgeben.

Wenn Sie Ihren Code verwenden, wörtlich wollen, könnten Sie (am Stück) betrachten einen Sprit Kit SKShader ein SKTexture zu erzeugen, die als CGImage gemacht werden können.

simon