Android Open Source - FxCameraApp Gl Bilateral Shader






From Project

Back to project page FxCameraApp.

License

The source code is released under:

MIT License

If you think the Android project FxCameraApp listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.af.experiments.FxCameraApp.shaders;
import static android.opengl.GLES20.glUniform1f;
//  ww  w.  ja v  a 2 s  .c om
public class GlBilateralShader extends GlShader {

  private static final String VERTEX_SHADER =
    "attribute vec4 aPosition;" +
    "attribute vec4 aTextureCoord;" +

    "const lowp int GAUSSIAN_SAMPLES = 9;" +

    "uniform highp float texelWidthOffset;" +
    "uniform highp float texelHeightOffset;" +
    "uniform highp float blurSize;" +

    "varying highp vec2 vTextureCoord;" +
    "varying highp vec2 blurCoordinates[GAUSSIAN_SAMPLES];" +

    "void main() {" +
      "gl_Position = aPosition;" +
      "vTextureCoord = aTextureCoord.xy;" +

      // Calculate the positions for the blur
      "int multiplier = 0;" +
      "highp vec2 blurStep;" +
      "highp vec2 singleStepOffset = vec2(texelHeightOffset, texelWidthOffset) * blurSize;" +

      "for (lowp int i = 0; i < GAUSSIAN_SAMPLES; i++) {" +
        "multiplier = (i - ((GAUSSIAN_SAMPLES - 1) / 2));" +
        // Blur in x (horizontal)
        "blurStep = float(multiplier) * singleStepOffset;" +
        "blurCoordinates[i] = vTextureCoord.xy + blurStep;" +
      "}" +
    "}";

  private static final String FRAGMENT_SHADER =
      "precision mediump float;" +  // ?????????????????

      "uniform lowp sampler2D sTexture;" +

      "const lowp int GAUSSIAN_SAMPLES = 9;" +
      "varying highp vec2 vTextureCoord;" +
      "varying highp vec2 blurCoordinates[GAUSSIAN_SAMPLES];" +

      //"const mediump float distanceNormalizationFactor = 0.6933613;" +
      "const mediump float distanceNormalizationFactor = 1.5;" +

      "void main() {" +
        "lowp vec4 centralColor = texture2D(sTexture, blurCoordinates[4]);" +
        "lowp float gaussianWeightTotal = 0.18;" +
        "lowp vec4 sum = centralColor * 0.18;" +

        "lowp vec4 sampleColor = texture2D(sTexture, blurCoordinates[0]);" +
        "lowp float distanceFromCentralColor;" +
        //"distanceFromCentralColor = abs(centralColor.g - sampleColor.g);" +
        //"distanceFromCentralColor = smoothstep(0.0, 1.0, abs(centralColor.g - sampleColor.g));" +
        //"distanceFromCentralColor = smoothstep(0.0, 1.0, distance(centralColor, sampleColor) * distanceNormalizationFactor);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +

        "lowp float gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "sampleColor = texture2D(sTexture, blurCoordinates[1]);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +
        "gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "sampleColor = texture2D(sTexture, blurCoordinates[2]);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +
        "gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "sampleColor = texture2D(sTexture, blurCoordinates[3]);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +
        "gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "sampleColor = texture2D(sTexture, blurCoordinates[5]);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +
        "gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "sampleColor = texture2D(sTexture, blurCoordinates[6]);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +
        "gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "sampleColor = texture2D(sTexture, blurCoordinates[7]);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +
        "gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "sampleColor = texture2D(sTexture, blurCoordinates[8]);" +
        "distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);" +
        "gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor);" +
        "gaussianWeightTotal += gaussianWeight;" +
        "sum += sampleColor * gaussianWeight;" +

        "gl_FragColor = sum / gaussianWeightTotal;" +
      "}";

  private float mTexelWidthOffset = 0.004f;
  private float mTexelHeightOffset = 0.004f;
  private float mBlurSize = 1.0f;

  public GlBilateralShader() {
    super(VERTEX_SHADER, FRAGMENT_SHADER);
  }


  public float getTexelWidthOffset() {
    return mTexelWidthOffset;
  }

  public void setTexelWidthOffset(final float texelWidthOffset) {
    mTexelWidthOffset = texelWidthOffset;
  }

  public float getTexelHeightOffset() {
    return mTexelHeightOffset;
  }

  public void setTexelHeightOffset(final float texelHeightOffset) {
    mTexelHeightOffset = texelHeightOffset;
  }

  public float getBlurSize() {
    return mBlurSize;
  }

  public void setBlurSize(final float blurSize) {
    mBlurSize = blurSize;
  }

  @Override
  public String getName() {
    return "Bilateral";
  }

  @Override
  public void onDraw() {
    glUniform1f(getHandle("texelWidthOffset"), mTexelWidthOffset);
    glUniform1f(getHandle("texelHeightOffset"), mTexelHeightOffset);
    glUniform1f(getHandle("blurSize"), mBlurSize);
  }

}




Java Source Code List

com.af.experiments.FxCameraApp.FilterAdapter.java
com.af.experiments.FxCameraApp.MyActivity.java
com.af.experiments.FxCameraApp.Utils.BitmapFactoryUtils.java
com.af.experiments.FxCameraApp.Utils.ExifUtils.java
com.af.experiments.FxCameraApp.Utils.Fps.java
com.af.experiments.FxCameraApp.Utils.LogWriter.java
com.af.experiments.FxCameraApp.Utils.OpenGlUtils.java
com.af.experiments.FxCameraApp.View.CameraView.java
com.af.experiments.FxCameraApp.View.DefaultPreview.java
com.af.experiments.FxCameraApp.View.GlPreview.java
com.af.experiments.FxCameraApp.View.PreviewTexture.java
com.af.experiments.FxCameraApp.camera.CameraHelperBase.java
com.af.experiments.FxCameraApp.camera.CameraHelperCupcake.java
com.af.experiments.FxCameraApp.camera.CameraHelperDonut.java
com.af.experiments.FxCameraApp.camera.CameraHelperEclair.java
com.af.experiments.FxCameraApp.camera.CameraHelperFactory.java
com.af.experiments.FxCameraApp.camera.CameraHelperFroyo.java
com.af.experiments.FxCameraApp.camera.CameraHelperGingerbread.java
com.af.experiments.FxCameraApp.camera.CameraHelperHonycomb.java
com.af.experiments.FxCameraApp.camera.CameraHelperICS.java
com.af.experiments.FxCameraApp.camera.CameraHelper.java
com.af.experiments.FxCameraApp.display.DisplayHelperBase.java
com.af.experiments.FxCameraApp.display.DisplayHelperFactory.java
com.af.experiments.FxCameraApp.display.DisplayHelperFroyo.java
com.af.experiments.FxCameraApp.display.DisplayHelperHoneycombMR2.java
com.af.experiments.FxCameraApp.display.DisplayHelperHoneycomb.java
com.af.experiments.FxCameraApp.display.DisplayHelper.java
com.af.experiments.FxCameraApp.ogles.DefaultConfigChooser.java
com.af.experiments.FxCameraApp.ogles.DefaultContextFactory.java
com.af.experiments.FxCameraApp.ogles.DefaultWindowSurfaceFactory.java
com.af.experiments.FxCameraApp.ogles.EGLLogWrapper.java
com.af.experiments.FxCameraApp.ogles.GLES20ConfigChooser.java
com.af.experiments.FxCameraApp.ogles.GLES20ContextFactory.java
com.af.experiments.FxCameraApp.ogles.GlImageBitmapTexture.java
com.af.experiments.FxCameraApp.ogles.GlImageResourceTexture.java
com.af.experiments.FxCameraApp.ogles.GlImageTexture.java
com.af.experiments.FxCameraApp.ogles.GlPreviewTextureFactory.java
com.af.experiments.FxCameraApp.ogles.GlSurfaceTexture.java
com.af.experiments.FxCameraApp.ogles.GlTextureView.java
com.af.experiments.FxCameraApp.ogles.PixelBuffer.java
com.af.experiments.FxCameraApp.ogles.PreviewSurfaceHelperBase.java
com.af.experiments.FxCameraApp.ogles.PreviewSurfaceHelperFactory.java
com.af.experiments.FxCameraApp.ogles.PreviewSurfaceHelper.java
com.af.experiments.FxCameraApp.ogles.Texture.java
com.af.experiments.FxCameraApp.renderer.GLES20FramebufferObject.java
com.af.experiments.FxCameraApp.renderer.GlFrameBufferObjectRenderer.java
com.af.experiments.FxCameraApp.renderer.MainRenderer.java
com.af.experiments.FxCameraApp.shaders.GlBilateralShader.java
com.af.experiments.FxCameraApp.shaders.GlBoxBlurShader.java
com.af.experiments.FxCameraApp.shaders.GlBulgeDistortionShader.java
com.af.experiments.FxCameraApp.shaders.GlCGAColorspaceShader.java
com.af.experiments.FxCameraApp.shaders.GlColorInvertShader.java
com.af.experiments.FxCameraApp.shaders.GlColorMatrixShader.java
com.af.experiments.FxCameraApp.shaders.GlColorPackingShader.java
com.af.experiments.FxCameraApp.shaders.GlConvolutionShader.java
com.af.experiments.FxCameraApp.shaders.GlEmbossShader.java
com.af.experiments.FxCameraApp.shaders.GlFalseColorShader.java
com.af.experiments.FxCameraApp.shaders.GlFastBlurShader.java
com.af.experiments.FxCameraApp.shaders.GlGaussianBlurShader.java
com.af.experiments.FxCameraApp.shaders.GlGlassSphereShader.java
com.af.experiments.FxCameraApp.shaders.GlGrayScaleShader.java
com.af.experiments.FxCameraApp.shaders.GlHarrisCornerDetectionShader.java
com.af.experiments.FxCameraApp.shaders.GlHazeShader.java
com.af.experiments.FxCameraApp.shaders.GlMonochromeShader.java
com.af.experiments.FxCameraApp.shaders.GlNobleCornerDetectionShader.java
com.af.experiments.FxCameraApp.shaders.GlPerlinNoiseShader.java
com.af.experiments.FxCameraApp.shaders.GlPinchDistortionShader.java
com.af.experiments.FxCameraApp.shaders.GlPixellateShader.java
com.af.experiments.FxCameraApp.shaders.GlPolarPixellateShader.java
com.af.experiments.FxCameraApp.shaders.GlPolkaDotShader.java
com.af.experiments.FxCameraApp.shaders.GlPosterizeShader.java
com.af.experiments.FxCameraApp.shaders.GlPreviewShader.java
com.af.experiments.FxCameraApp.shaders.GlSepiaShader.java
com.af.experiments.FxCameraApp.shaders.GlShaderGroup.java
com.af.experiments.FxCameraApp.shaders.GlShader.java
com.af.experiments.FxCameraApp.shaders.GlSharpenShader.java
com.af.experiments.FxCameraApp.shaders.GlShiTomasiFeatureDetectionShader.java
com.af.experiments.FxCameraApp.shaders.GlSobelEdgeDetectionShader.java
com.af.experiments.FxCameraApp.shaders.GlSphereRefractionShader.java
com.af.experiments.FxCameraApp.shaders.GlStretchDistortionShader.java
com.af.experiments.FxCameraApp.shaders.GlThreex3ConvolutionShader.java
com.af.experiments.FxCameraApp.shaders.GlThreex3TextureSamplingShader.java
com.af.experiments.FxCameraApp.shaders.GlToneShader.java
com.af.experiments.FxCameraApp.shaders.GlTwoInputShader.java
com.af.experiments.FxCameraApp.shaders.GlVignetteShader.java
com.af.experiments.FxCameraApp.shaders.GlWeakPixelInclusionShader.java
com.af.experiments.FxCameraApp.shaders.GlWhiteBalanceShader.java
com.af.experiments.FxCameraApp.shaders.GlXRayShader.java
com.af.experiments.FxCameraApp.shaders.GlXYDerivativeShader.java
com.af.experiments.FxCameraApp.shaders.fx.GlLutShader.java