简体   繁体   中英

Xamarin.iOS GPUImage : How can i create GPUImageTwoInputFilter with custom shader file in Xamarin.iOS

I want to create a GPUImageTwoInputFilter with custom shader file in xamarin.iOS. I am using GPUImage component.

var stillCamera = new GPUImageStillCamera ();
var filter1 = new GPUImageTwoInputFilter();
stillCamera.AddTarget(filter1);
var internalSourcePicture1 = new GPUImagePicture(UIImage.FromFile("image.png").CGImage,true);
internalSourcePicture1.AddTarget(filter1);
internalSourcePicture1.ProcessImage();

but don't know how do we pass shader file in GPUImageTwoInputFilter

Add your custom fragment shader ( .fsh ) to your Xamarin.iOS app bundle as a build type of BundleResource .

Then load it via GPUImageFilter.FromFragmentShaderFile :

Note: Do not include the file extension or you will get a "Failed to load vertex shader" in the app output/log

var filter = GPUImageFilter.FromFragmentShaderFile ("StackOverflowShader");

or embed the fragment shader as a string:

    fragShaderString = @"
 varying highp vec2 textureCoordinate;
 varying highp vec2 textureCoordinate2;

 uniform sampler2D inputImageTexture;
 uniform sampler2D inputImageTexture2;

 void main()
 {
    lowp vec4 base = texture2D(inputImageTexture, textureCoordinate);
    lowp vec4 overlayer = texture2D(inputImageTexture2, textureCoordinate2);

    gl_FragColor = vec4(min(overlayer.rgb * base.a, base.rgb * overlayer.a) + overlayer.rgb * (1.0 - base.a) + base.rgb * (1.0 - overlayer.a), 1.0);
 }

";

And load it via FromFragmentShaderString :

var filter = GPUImageFilter.FromFragmentShaderString(fragShaderString);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM