chrisbatt / AndroidFastImageProcessing

A framework for speeding up image processing on android devices by taking advantage of shaders on the GPU.
MIT License
285 stars 118 forks source link

MultiInputFilter not working for 3 inputs #33

Open soham24 opened 6 years ago

soham24 commented 6 years ago

I am trying to run filters in parallel like we do in iOS GPUIMAGE library, but I am having issues while adding 3 inputs to one filter which extends MultiInputFilter. I am trying to combine

1>BasicCameraInputFilter 2>CannyEdgeDetectionFilter 3>SobelEdgeDetectionFilter

where BasicCameraInputFilter is direct camera input .

    BasicCameraInputFilter cameraInput=new BasicCameraInputFilter();
    CannyEdgeDetectionFilter cannyEdgeDetectionFilter =
            new CannyEdgeDetectionFilter(1.0f,0.3f,0.6f);
    SobelEdgeDetectionFilter sobelEdgeDetectionFilter=new SobelEdgeDetectionFilter();

    CombinationFilter combinationFilter=new CombinationFilter();

    cameraInput.addTarget(combinationFilter);
    cannyEdgeDetectionFilter.addTarget(combinationFilter);
    sobelEdgeDetectionFilter.addTarget(combinationFilter);
    combinationFilter.registerFilterLocation(cameraInput,0);
    combinationFilter.registerFilterLocation(cannyEdgeDetectionFilter,1);
    combinationFilter.registerFilterLocation(sobelEdgeDetectionFilter,2);
    combinationFilter.addTarget(this);

    registerInitialFilter(cameraInput);
    registerFilter(cannyEdgeDetectionFilter);
    registerFilter(sobelEdgeDetectionFilter);
    registerTerminalFilter(combinationFilter);

Here is my fragment shader

"precision mediump float;\n"
                        +"uniform sampler2D "+UNIFORM_TEXTURE0+";\n"
                        +"uniform sampler2D "+UNIFORM_TEXTUREBASE+1+";\n"
                        +"uniform sampler2D "+UNIFORM_TEXTUREBASE+2+";\n"
                        +"varying vec2 "+VARYING_TEXCOORD+";\n"

                        +"void main(){\n"
                        +"   vec4 color1 = texture2D("+UNIFORM_TEXTURE0+","+VARYING_TEXCOORD+");\n"
                        +"   vec4 color2 = texture2D("+UNIFORM_TEXTUREBASE+1+","+VARYING_TEXCOORD+");\n"
                        +"   vec4 color3 = texture2D("+UNIFORM_TEXTUREBASE+2+","+VARYING_TEXCOORD+");\n"

                        +"   vec4 whiteColor = vec4(1.0);\n"
                        +"      whiteColor.r=color1.r*color2.r*color3.r;\n  "
                        +"      whiteColor.g=color1.g*color2.g*color3.g;\n  "
                        +"      whiteColor.b=color1.b*color2.b*color3.b;\n  "
                        +"   gl_FragColor =  whiteColor;\n"
                        +"}\n";