summaryrefslogtreecommitdiff
path: root/VkTest/Shaders.hs
diff options
context:
space:
mode:
authorandromeda <andromeda@lenovo>2026-08-20 23:30:29 +0200
committerandromeda <andromeda@lenovo>2026-08-21 03:36:29 +0200
commita91ac16c11f4a2fe7fef6abfe5d29436280d2252 (patch)
treef88f574184f064a9d2cced0279d879b2e553ba7d /VkTest/Shaders.hs
parenteee13566610e714f3e00982c6793a867c87be4f5 (diff)
it draws!
Diffstat (limited to 'VkTest/Shaders.hs')
-rw-r--r--VkTest/Shaders.hs43
1 files changed, 43 insertions, 0 deletions
diff --git a/VkTest/Shaders.hs b/VkTest/Shaders.hs
new file mode 100644
index 0000000..0d88325
--- /dev/null
+++ b/VkTest/Shaders.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE PartialTypeSignatures #-}
+{-# LANGUAGE RebindableSyntax #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE TypeOperators #-}
+
+module VkTest.Shaders where
+
+import FIR
+import Math.Linear
+
+vertices = Vec3 (Vec2 0 (-0.5))
+ (Vec2 0.5 0.5)
+ (Vec2 (-0.5) 0.5)
+
+vertPath = "assets/shaders/vert.spv"
+fragPath = "assets/shaders/frag.spv"
+
+type VertexDefs =
+ '[ "main" ':-> EntryPoint '[] Vertex ]
+
+vertex :: ShaderModule "main" VertexShader VertexDefs _
+vertex = shader do
+ i <- get @"gl_VertexIndex"
+ (Vec2 x y) <- let' $ atv3v2f vertices i (Vec2 0 0)
+ put @"gl_Position" (Vec4 x y 0 1)
+
+type FragmentDefs =
+ '[ "main" ':-> EntryPoint '[ OriginUpperLeft ] Fragment
+ , "out_color" ':-> Output '[ Location 0 ] (V 4 Float)
+ ]
+
+fragment :: ShaderModule "main" FragmentShader FragmentDefs _
+fragment = shader do
+ put @"out_color" (Vec4 1.0 0.0 1.0 1.0)
+
+atv3v2f :: Code (V 3 (V 2 Float)) -> Code Word32 -> Code (V 2 Float) -> Code (V 2 Float)
+atv3v2f (Vec3 x y z) i d =
+ if i == 0 then x
+ else if i == 1 then y
+ else if i == 2 then z
+ else d \ No newline at end of file