aboutsummaryrefslogtreecommitdiffstats
path: root/src/Vivant/Shader.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Vivant/Shader.hs')
-rw-r--r--src/Vivant/Shader.hs82
1 files changed, 41 insertions, 41 deletions
diff --git a/src/Vivant/Shader.hs b/src/Vivant/Shader.hs
index c2df314..aa884c6 100644
--- a/src/Vivant/Shader.hs
+++ b/src/Vivant/Shader.hs
@@ -1,50 +1,50 @@
module Vivant.Shader (createProgram) where
-import Control.Monad (unless)
-import qualified Data.ByteString as BS
+import Control.Monad (unless)
+import qualified Data.ByteString as BS
import qualified Graphics.Rendering.OpenGL as GL
-import Paths_vivant (getDataDir)
-import SDL (($=))
-import System.Exit (exitFailure)
-import System.IO (hPutStrLn, stderr)
+import Paths_vivant (getDataDir)
+import SDL (($=))
+import System.Exit (exitFailure)
+import System.IO (hPutStrLn, stderr)
createProgram :: IO GL.Program
createProgram = do
- datadir <- getDataDir
- -- compile vertex shader
- vs <- GL.createShader GL.VertexShader
- vsSource <- BS.readFile $ datadir <> "/shaders/triangle.vert"
- GL.shaderSourceBS vs $= vsSource
- GL.compileShader vs
- vsOK <- GL.get $ GL.compileStatus vs
- unless vsOK $ do
- log <- GL.shaderInfoLog vs
- hPutStrLn stderr ("Error in vertex shader\n" <> log)
- exitFailure
+ datadir <- getDataDir
+ -- compile vertex shader
+ vs <- GL.createShader GL.VertexShader
+ vsSource <- BS.readFile $ datadir <> "/shaders/triangle.vert"
+ GL.shaderSourceBS vs $= vsSource
+ GL.compileShader vs
+ vsOK <- GL.get $ GL.compileStatus vs
+ unless vsOK $ do
+ log <- GL.shaderInfoLog vs
+ hPutStrLn stderr ("Error in vertex shader\n" <> log)
+ exitFailure
- -- Do it again for the fragment shader
- fs <- GL.createShader GL.FragmentShader
- fsSource <- BS.readFile $ datadir <> "/shaders/triangle.frag"
- GL.shaderSourceBS fs $= fsSource
- GL.compileShader fs
- fsOK <- GL.get $ GL.compileStatus fs
- unless fsOK $ do
- log <- GL.shaderInfoLog fs
- hPutStrLn stderr ("Error in fragment shader\n" <> log)
- exitFailure
+ -- Do it again for the fragment shader
+ fs <- GL.createShader GL.FragmentShader
+ fsSource <- BS.readFile $ datadir <> "/shaders/triangle.frag"
+ GL.shaderSourceBS fs $= fsSource
+ GL.compileShader fs
+ fsOK <- GL.get $ GL.compileStatus fs
+ unless fsOK $ do
+ log <- GL.shaderInfoLog fs
+ hPutStrLn stderr ("Error in fragment shader\n" <> log)
+ exitFailure
- program <- GL.createProgram
- GL.attachShader program vs
- GL.attachShader program fs
- GL.linkProgram program
- linkOK <- GL.get $ GL.linkStatus program
- GL.validateProgram program
- status <- GL.get $ GL.validateStatus program
- unless (linkOK && status) $ do
- hPutStrLn stderr "GL.linkProgram error"
- plog <- GL.get $ GL.programInfoLog program
- putStrLn plog
- exitFailure
- GL.currentProgram $= Just program
+ program <- GL.createProgram
+ GL.attachShader program vs
+ GL.attachShader program fs
+ GL.linkProgram program
+ linkOK <- GL.get $ GL.linkStatus program
+ GL.validateProgram program
+ status <- GL.get $ GL.validateStatus program
+ unless (linkOK && status) $ do
+ hPutStrLn stderr "GL.linkProgram error"
+ plog <- GL.get $ GL.programInfoLog program
+ putStrLn plog
+ exitFailure
+ GL.currentProgram $= Just program
- return program
+ return program