diff options
| author | andromeda <andromeda@lenovo> | 2026-08-21 03:34:32 +0200 |
|---|---|---|
| committer | andromeda <andromeda@lenovo> | 2026-08-21 03:34:32 +0200 |
| commit | 0464b823319a520e60f65d6ad2c5f5e5a1ac1953 (patch) | |
| tree | f88f574184f064a9d2cced0279d879b2e553ba7d /VkTest/Shaders.hs | |
| parent | 09623556859dba8d3c8681867f6f5739e153a888 (diff) | |
modularise
Diffstat (limited to 'VkTest/Shaders.hs')
| -rw-r--r-- | VkTest/Shaders.hs | 43 |
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 |
