summaryrefslogtreecommitdiff
path: root/intermediate/sky.glsl
diff options
context:
space:
mode:
authorquou <quou@disroot.org>2025-01-04 18:41:08 +1100
committerquou <quou@disroot.org>2025-01-04 18:41:57 +1100
commit3b5a6b7665092aef6eb0cb30e7da25b6dbe8b178 (patch)
tree3c261a5fd7df40174e1cfe31d941a532cccd37bf /intermediate/sky.glsl
parentcf4c007acc6bce0aa702a39b4675ecb879b911ed (diff)
render a skybox
Diffstat (limited to 'intermediate/sky.glsl')
-rw-r--r--intermediate/sky.glsl67
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