diff options
Diffstat (limited to 'src/Vivant/Shader.hs')
-rw-r--r-- | src/Vivant/Shader.hs | 82 |
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 |