blob: c4461ec3e56562ed995629c0ca2070597a710fb2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
//Copyright 2014 JogAmp Community. All rights reserved.
#if __VERSION__ >= 130
#define attribute in
#define varying out
#endif
uniform vec2 svr_EyeToSourceUVScale;
uniform vec2 svr_EyeToSourceUVOffset;
uniform mat4 svr_EyeRotationStart;
uniform mat4 svr_EyeRotationEnd;
attribute vec2 svr_Position;
attribute vec2 svr_Params;
attribute vec2 svr_TexCoordR;
varying vec3 svv_Fade;
varying vec2 svv_TexCoordR;
void main(void)
{
gl_Position = vec4(svr_Position.xy, 0.0, 1.0);
svv_Fade = vec3(svr_Params.r); // vignetteFade
// Vertex inputs are in TanEyeAngle space for the R,G,B channels (i.e. after chromatic aberration and distortion).
// These are now "real world" vectors in direction (x,y,1) relative to the eye of the HMD.
vec3 TanEyeAngle = vec3 ( svr_TexCoordR, 1.0 );
// Accurate time warp lerp vs. faster
// Apply the two 3x3 timewarp rotations to these vectors.
vec3 TransformedStart = (svr_EyeRotationStart * vec4(TanEyeAngle, 0)).xyz;
vec3 TransformedEnd = (svr_EyeRotationEnd * vec4(TanEyeAngle, 0)).xyz;
// And blend between them.
vec3 Transformed = mix ( TransformedStart, TransformedEnd, svr_Params.g /* timewarpLerpFactor */ );
// Project them back onto the Z=1 plane of the rendered images.
float RecipZ = 1.0 / Transformed.z;
vec2 Flattened = vec2 ( Transformed.x * RecipZ, Transformed.y * RecipZ );
// These are now still in TanEyeAngle space.
// Scale them into the correct [0-1],[0-1] UV lookup space (depending on eye)
svv_TexCoordR = Flattened * svr_EyeToSourceUVScale + svr_EyeToSourceUVOffset;
svv_TexCoordR.y = 1.0-svv_TexCoordR.y;
}
|