Remove unnecessary uniforms
This commit is contained in:
+9
-14
@@ -36,8 +36,8 @@ import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight)
|
|||||||
import Linear.Matrix
|
import Linear.Matrix
|
||||||
import Linear.V4
|
import Linear.V4
|
||||||
|
|
||||||
extractProgAndUnis :: FullShader a -> (Program,[UniformLocation])
|
extractProgAndUnis :: FullShader a -> (Program,UniformLocation)
|
||||||
extractProgAndUnis s = (_shaderProgram s, _shaderUniforms s)
|
extractProgAndUnis s = (_shaderProgram s, _shaderUniform s)
|
||||||
|
|
||||||
pokeShaders :: [FullShader a] -> F.FoldM IO a [Int]
|
pokeShaders :: [FullShader a] -> F.FoldM IO a [Int]
|
||||||
pokeShaders = traverse pokeShader
|
pokeShaders = traverse pokeShader
|
||||||
@@ -124,7 +124,7 @@ makeShader s shaderlist alocs pm renStrat = do
|
|||||||
(prog,unis) <- makeSourcedShader s shaderlist
|
(prog,unis) <- makeSourcedShader s shaderlist
|
||||||
vaob <- setupVAO alocs
|
vaob <- setupVAO alocs
|
||||||
return $ FullShader { _shaderProgram = prog
|
return $ FullShader { _shaderProgram = prog
|
||||||
, _shaderUniforms = unis
|
, _shaderUniform = unis
|
||||||
, _shaderVAO = vaob
|
, _shaderVAO = vaob
|
||||||
, _shaderPokeStrategy = renStrat
|
, _shaderPokeStrategy = renStrat
|
||||||
, _shaderDrawPrimitive = pm
|
, _shaderDrawPrimitive = pm
|
||||||
@@ -172,12 +172,11 @@ setupArrayBuffer (aloc,i) = do
|
|||||||
-- | Compile shader and get its uniform locations.
|
-- | Compile shader and get its uniform locations.
|
||||||
-- supposes the shader code is in the shader folder, with the string names
|
-- supposes the shader code is in the shader folder, with the string names
|
||||||
-- followed by .vert/.geom/.frag.
|
-- followed by .vert/.geom/.frag.
|
||||||
makeSourcedShader :: String -> [ShaderType] -> IO (Program, [UniformLocation])
|
makeSourcedShader :: String -> [ShaderType] -> IO (Program, UniformLocation)
|
||||||
makeSourcedShader s sts = do
|
makeSourcedShader s sts = do
|
||||||
sources <- forM sts $ \st -> BS.readFile ("shader/" ++ s ++ shaderTypeExt st)
|
sources <- forM sts $ \st -> BS.readFile ("shader/" ++ s ++ shaderTypeExt st)
|
||||||
prog <- makeShaderProgram s $ zip sts sources
|
prog <- makeShaderProgram s $ zip sts sources
|
||||||
uniformLocations <- forM ["winSize","zoom","rotation","translation","worldMat"]
|
uniformLocations <- uniformLocation prog "worldMat"
|
||||||
$ \uniString -> uniformLocation prog uniString
|
|
||||||
return (prog,uniformLocations)
|
return (prog,uniformLocations)
|
||||||
|
|
||||||
addUniforms :: [String] -> FullShader a -> IO (FullShader a)
|
addUniforms :: [String] -> FullShader a -> IO (FullShader a)
|
||||||
@@ -217,11 +216,11 @@ compileAndCheckShader str (theShaderType,sourceCode) = do
|
|||||||
putStrLn $ str ++ ": Shader compile: " ++ show theShaderType ++ " : " ++ show infoLog
|
putStrLn $ str ++ ": Shader compile: " ++ show theShaderType ++ " : " ++ show infoLog
|
||||||
return theShader
|
return theShader
|
||||||
|
|
||||||
resetShaderUniforms :: [(Program, [UniformLocation])] -> IO ()
|
resetShaderUniforms :: [(Program, UniformLocation)] -> IO ()
|
||||||
resetShaderUniforms = setShaderUniforms 0 1 (0,0) (2,2)
|
resetShaderUniforms = setShaderUniforms 0 1 (0,0) (2,2)
|
||||||
{-# INLINE resetShaderUniforms #-}
|
{-# INLINE resetShaderUniforms #-}
|
||||||
|
|
||||||
setShaderUniforms :: Float -> Float -> Point2 -> Point2 -> [(Program,[UniformLocation])] -> IO ()
|
setShaderUniforms :: Float -> Float -> Point2 -> Point2 -> [(Program,UniformLocation)] -> IO ()
|
||||||
{-# INLINE setShaderUniforms #-}
|
{-# INLINE setShaderUniforms #-}
|
||||||
setShaderUniforms rot czoom (tranx,trany) (winx,winy) fss = do
|
setShaderUniforms rot czoom (tranx,trany) (winx,winy) fss = do
|
||||||
let scalMat = Linear.Matrix.transpose $
|
let scalMat = Linear.Matrix.transpose $
|
||||||
@@ -245,11 +244,7 @@ setShaderUniforms rot czoom (tranx,trany) (winx,winy) fss = do
|
|||||||
-- set common uniforms
|
-- set common uniforms
|
||||||
forM_ fss $ \shad -> do
|
forM_ fss $ \shad -> do
|
||||||
currentProgram $= Just (fst shad)
|
currentProgram $= Just (fst shad)
|
||||||
uniform (snd shad !! 0) $= Vector2 winx winy
|
uniform (snd shad) $= wmata
|
||||||
uniform (snd shad !! 1) $= czoom
|
|
||||||
uniform (snd shad !! 2) $= rot
|
|
||||||
uniform (snd shad !! 3) $= Vector2 tranx trany
|
|
||||||
uniform (snd shad !! 4) $= wmata
|
|
||||||
|
|
||||||
setPerpMatUniform
|
setPerpMatUniform
|
||||||
:: Float -- ^ rotation
|
:: Float -- ^ rotation
|
||||||
@@ -262,7 +257,7 @@ setPerpMatUniform
|
|||||||
setPerpMatUniform rot czoom trans wins vFrom shad = do
|
setPerpMatUniform rot czoom trans wins vFrom shad = do
|
||||||
pmat <- (newMatrix RowMajor $ perspectiveMatrix rot czoom trans wins vFrom) :: IO (GLmatrix GLfloat)
|
pmat <- (newMatrix RowMajor $ perspectiveMatrix rot czoom trans wins vFrom) :: IO (GLmatrix GLfloat)
|
||||||
currentProgram $= Just (_shaderProgram shad)
|
currentProgram $= Just (_shaderProgram shad)
|
||||||
uniform (_shaderUniforms shad !! 4) $= pmat
|
uniform (_shaderUniform shad) $= pmat
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
freeShaderPointers :: FullShader a -> IO ()
|
freeShaderPointers :: FullShader a -> IO ()
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ module Shader.Data
|
|||||||
, vaoBufferTargets
|
, vaoBufferTargets
|
||||||
|
|
||||||
, shaderProgram
|
, shaderProgram
|
||||||
, shaderUniforms
|
, shaderUniform
|
||||||
, shaderVAO
|
, shaderVAO
|
||||||
, shaderPokeStrategy
|
, shaderPokeStrategy
|
||||||
, shaderDrawPrimitive
|
, shaderDrawPrimitive
|
||||||
@@ -32,7 +32,7 @@ data VAO = VAO
|
|||||||
{- | Datatype containing the necessary information for a single shader. -}
|
{- | Datatype containing the necessary information for a single shader. -}
|
||||||
data FullShader a = FullShader
|
data FullShader a = FullShader
|
||||||
{ _shaderProgram :: Program
|
{ _shaderProgram :: Program
|
||||||
, _shaderUniforms :: [UniformLocation]
|
, _shaderUniform :: UniformLocation
|
||||||
, _shaderVAO :: VAO
|
, _shaderVAO :: VAO
|
||||||
, _shaderPokeStrategy :: a -> [[[Float]]]-- -> F.FoldM IO RenderType Int
|
, _shaderPokeStrategy :: a -> [[[Float]]]-- -> F.FoldM IO RenderType Int
|
||||||
, _shaderDrawPrimitive :: PrimitiveMode
|
, _shaderDrawPrimitive :: PrimitiveMode
|
||||||
|
|||||||
Reference in New Issue
Block a user