Add source files, commit before reverting pictures to lists
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
module Shaders
|
||||
(setupBasicShader
|
||||
,setupFadeShader
|
||||
,setupShaders
|
||||
,makeTextureShader
|
||||
,makeBasicShader
|
||||
,makeFadeShader
|
||||
)
|
||||
where
|
||||
import Graphics.Rendering.OpenGL
|
||||
import Control.Monad (when)
|
||||
import Text.RawString.QQ
|
||||
import qualified Data.ByteString as BS
|
||||
|
||||
setupShaders :: IO [Program]
|
||||
setupShaders = do
|
||||
basicShader <- makeBasicShader
|
||||
fadeShader <- makeFadeShader
|
||||
textureShader <- makeTextureShader
|
||||
return [basicShader,fadeShader,textureShader]
|
||||
|
||||
makeBasicShader :: IO Program
|
||||
makeBasicShader = do
|
||||
vsSource <- BS.readFile "shader/basic.vert"
|
||||
fsSource <- BS.readFile "shader/basic.frag"
|
||||
|
||||
makeShaderProgram [(VertexShader, vsSource)
|
||||
,(FragmentShader, fsSource)
|
||||
]
|
||||
|
||||
setupBasicShader :: IO ()
|
||||
setupBasicShader = do
|
||||
shaderProgram <- makeBasicShader
|
||||
currentProgram $= (Just shaderProgram)
|
||||
|
||||
makeFadeShader :: IO Program
|
||||
makeFadeShader = do
|
||||
vsSource <- BS.readFile "shader/fadeCircle.vert"
|
||||
gsSource <- BS.readFile "shader/fadeCircle.geom"
|
||||
fsSource <- BS.readFile "shader/fadeCircle.frag"
|
||||
|
||||
makeShaderProgram [(VertexShader, vsSource )
|
||||
,(GeometryShader, gsSource )
|
||||
,(FragmentShader, fsSource )
|
||||
]
|
||||
|
||||
setupFadeShader :: IO Program
|
||||
setupFadeShader = do
|
||||
shaderProgram <- makeFadeShader
|
||||
currentProgram $= (Just shaderProgram)
|
||||
return shaderProgram
|
||||
|
||||
makeTextureShader :: IO Program
|
||||
makeTextureShader = do
|
||||
vsSource <- BS.readFile "shader/basicTexture.vert"
|
||||
fsSource <- BS.readFile "shader/basicTexture.frag"
|
||||
|
||||
makeShaderProgram [(VertexShader, vsSource )
|
||||
,(FragmentShader, fsSource )
|
||||
]
|
||||
|
||||
makeShaderProgram :: [(ShaderType,BS.ByteString)] -> IO Program
|
||||
makeShaderProgram sources = do
|
||||
shaderProgram <- createProgram
|
||||
shaders <- mapM compileAndCheckShader sources
|
||||
mapM_ (attachShader shaderProgram) shaders
|
||||
|
||||
linkProgram shaderProgram
|
||||
linkingSuccess <- linkStatus shaderProgram
|
||||
when (not linkingSuccess) $ do
|
||||
infoLog <- get (programInfoLog shaderProgram)
|
||||
putStrLn $ "Program Linking" ++ infoLog
|
||||
|
||||
return shaderProgram
|
||||
|
||||
compileAndCheckShader :: (ShaderType,BS.ByteString) -> IO Shader
|
||||
compileAndCheckShader (shaderType,sourceCode) = do
|
||||
theShader <- createShader shaderType
|
||||
shaderSourceBS theShader $= sourceCode
|
||||
compileShader theShader
|
||||
success <- compileStatus theShader
|
||||
when (not success) $ do
|
||||
infoLog <- get (shaderInfoLog theShader)
|
||||
putStrLn $ "Shader compile: " ++ show shaderType ++ " : " ++ show infoLog
|
||||
return theShader
|
||||
Reference in New Issue
Block a user