Alexandr Dorofeev
Alexandr Dorofeev

Reputation: 480

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()

Upvotes: 0

Views: 306

Answers (1)

Columbo
Columbo

Reputation: 6766

If your wrap mode is GL_REPEAT, try using GL_CLAMP_TO_EDGE.

Upvotes: 1

Related Questions