androidopengl-esglslopengl-es-2.0glsurfaceview

How to remove horizontal stripe artifact from GLSL shader?


I'm working on custom photo with depth effect view.I am passing touch coordinates to GLSurfaceView renderer to "change perspective".But there are horizontal stripes between texture and it's mirrow when doing this.

enter image description here

My fragment shader code:

#ifdef GL_ES
precision highp float;
#endif

varying vec2 texcoordVarying;
uniform sampler2D texture;
uniform sampler2D depth;

uniform float time;
uniform vec2 touch;
uniform vec2 limit;
uniform vec4 resolution;

vec2 mirrored(vec2 v) {
  vec2 m = mod(v,2.);
  return mix(m,2.0 - m, step(1.0 ,m));
}

void main(void) {

      vec2 uv = 1.0 * gl_FragCoord.xy / resolution.xy ;
      vec2 vUv = (uv - vec2(0.5))*resolution.zw + vec2(0.5);
      vUv.y = 1. - vUv.y;
      vec4 tex1 = texture2D(depth,mirrored(vUv));
      vec2 fake3d = vec2(vUv.x + (tex1.r - 0.5)* touch.x/limit.x, vUv.y + (tex1.r - 0.5)* touch.y/limit.y );
      gl_FragColor = texture2D(texture,mirrored(fake3d));
}

I am passing coordinates like this:

queueEvent {
            renderer.touchTargetX = event.rawX / renderer.width
            renderer.touchTargetY = event.rawY / renderer.height
        }

        requestRender()

Solution

  • If your wrap mode is GL_REPEAT, try using GL_CLAMP_TO_EDGE.