Remove unnecessary uniforms

This commit is contained in:
2021-06-10 17:00:53 +02:00
parent 79d2c73dcf
commit 95f8e57e45
2 changed files with 11 additions and 16 deletions
+9 -14
View File
@@ -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
View File
@@ -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