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