From 3b5a6b7665092aef6eb0cb30e7da25b6dbe8b178 Mon Sep 17 00:00:00 2001 From: quou Date: Sat, 4 Jan 2025 18:41:08 +1100 Subject: render a skybox --- intermediate/sky.glsl | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 intermediate/sky.glsl (limited to 'intermediate/sky.glsl') 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 -- cgit v1.2.3-54-g00ecf