oculus1

annotate sdr/sdr.glsl @ 20:ff3bfd4da86b

removed unnecessary check for framebuffer resizing when not using vr mode
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 01 Oct 2013 12:51:20 +0300
parents f3672317e5c2
children
rev   line source
nuclear@13 1 uniform sampler2D tex;
nuclear@13 2 uniform float aspect, scale;
nuclear@13 3 uniform float lens_center_offset;
nuclear@13 4 uniform vec4 dist_factors;
nuclear@18 5 uniform vec2 tex_scale;
nuclear@13 6
nuclear@14 7 vec2 distort_texcoords(in vec2 tc);
nuclear@13 8 float barrel_scale(float x, in vec4 k);
nuclear@13 9
nuclear@13 10 void main()
nuclear@13 11 {
nuclear@14 12 vec2 tc = distort_texcoords(gl_TexCoord[0].xy);
nuclear@13 13
nuclear@18 14 float vis = any(greaterThan(tc, vec2(1.0))) || any(lessThan(tc, vec2(0.0))) ? 0.0 : 1.0;
nuclear@14 15
nuclear@18 16 gl_FragColor.rgb = texture2D(tex, tc * tex_scale).rgb * vis;
nuclear@13 17 gl_FragColor.a = 1.0;
nuclear@13 18 }
nuclear@13 19
nuclear@14 20 vec2 distort_texcoords(in vec2 tc)
nuclear@13 21 {
nuclear@13 22 // map tc [0, 1] -> [-1, 1]
nuclear@13 23 vec2 pt = tc * 2.0 - 1.0;
nuclear@13 24
nuclear@13 25 pt.x += lens_center_offset * 2.0;
nuclear@13 26 pt.y /= aspect; // correct for aspect ratio
nuclear@13 27
nuclear@13 28 float rad = barrel_scale(dot(pt, pt), dist_factors);
nuclear@13 29 pt *= rad; // scale the point by the computer distortion radius
nuclear@13 30
nuclear@14 31 pt /= scale;
nuclear@13 32 pt.y *= aspect;
nuclear@13 33 pt.x -= lens_center_offset * 2.0;
nuclear@13 34
nuclear@13 35 // map back to range [0, 1]
nuclear@13 36 return pt * 0.5 + 0.5;
nuclear@13 37 }
nuclear@13 38
nuclear@13 39 float barrel_scale(float rad, in vec4 k)
nuclear@13 40 {
nuclear@13 41 float radsq = rad * rad;
nuclear@13 42 float radquad = radsq * radsq;
nuclear@13 43 return k.x + k.y * radsq + k.z * radquad + k.w * radquad * radsq;
nuclear@13 44 }