2015-07-03 02:07:41 +00:00
|
|
|
!!cvarf ffov
|
2018-11-27 16:48:19 +00:00
|
|
|
!!samps screen:samplerCube=0
|
2015-07-03 02:07:41 +00:00
|
|
|
|
|
|
|
//my attempt at lambert azimuthal equal-area view rendering, because you'll remember that name easily.
|
|
|
|
|
|
|
|
#ifdef VERTEX_SHADER
|
|
|
|
attribute vec2 v_texcoord;
|
|
|
|
varying vec2 texcoord;
|
|
|
|
uniform float cvar_ffov;
|
|
|
|
void main()
|
|
|
|
{
|
|
|
|
texcoord = v_texcoord.xy;
|
|
|
|
|
|
|
|
//make sure the ffov cvar actually does something meaningful
|
|
|
|
texcoord *= cvar_ffov / 90.0;
|
|
|
|
|
|
|
|
gl_Position = ftetransform();
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifdef FRAGMENT_SHADER
|
|
|
|
varying vec2 texcoord;
|
|
|
|
void main()
|
|
|
|
{
|
|
|
|
vec3 tc;
|
|
|
|
vec2 d;
|
|
|
|
vec2 ang;
|
|
|
|
d = texcoord;
|
|
|
|
|
|
|
|
//compute the 2d->3d projection
|
|
|
|
float sq = d.x*d.x+d.y*d.y;
|
|
|
|
if (sq > 4.0)
|
|
|
|
gl_FragColor = vec4(0,0,0,1);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
tc.x = sqrt(1.0-(sq/4.0))*d.x;
|
|
|
|
tc.y = sqrt(1.0-(sq/4.0))*d.y;
|
|
|
|
tc.z = -1.0 + (sq/2.0);
|
|
|
|
|
|
|
|
tc.y *= -1.0;
|
|
|
|
tc.z *= -1.0;
|
|
|
|
|
2018-11-27 16:48:19 +00:00
|
|
|
gl_FragColor = textureCube(s_screen, tc);
|
2015-07-03 02:07:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|