oculus1

annotate src/vr_sdr.h @ 23:0c76f70fb7e9

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