diff options
Diffstat (limited to 'intermediate/sky.glsl')
-rw-r--r-- | intermediate/sky.glsl | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/intermediate/sky.glsl b/intermediate/sky.glsl new file mode 100644 index 0000000..c8a53c9 --- /dev/null +++ b/intermediate/sky.glsl @@ -0,0 +1,67 @@ +#ifdef DESC +[program] +type: graphics +vertex: main +fragment: main + +[binding] +name: verts +rate: vertex +[attribute] +name: position +type: vec2 +[attribute] +name: uv +type: vec2 + +[interpolator] +name: uv +type: vec2 + +[struct] +name: Config +[variable] +name: iview +type: mat4 +[variable] +name: iprojection +type: mat4 + +[cbuffer] +name: config_buffer +type: Config +stage: fragment + +[texture] +name: picture +stage: fragment +dimension: 2 + +[target] +name: colour +type: vec4 +#endif + +#ifdef VERTEX_SHADER +void main() { + interpolator.uv = uv; + gl_Position = vec4(position, 1.0, 1.0); +} +#endif + +#ifdef FRAGMENT_SHADER +void main() { + float pi = 3.14159265358979323846; + vec2 uv = interpolator.uv; + vec4 ndc = vec4(uv * 2.0 - 1.0, -1.0, 1.0); + vec4 dir = config_buffer.iprojection * ndc; + dir.w = 0.0; + dir = config_buffer.iview * dir; + dir.xyz = normalize(dir.xyz); + uv = vec2( + 0.5f + 0.5f * atan(dir.z, dir.x) / pi, + acos(dir.y) / pi + ); + colour = texture(picture, uv); +} +#endif |