From 7c8c7cac9816e04a622a58a45d5d7ed49ec0742f Mon Sep 17 00:00:00 2001 From: Stefan Dresselhaus Date: Tue, 20 May 2014 00:06:53 +0200 Subject: [PATCH] a bit refactoring to get the imperative stuff shorter refs #482 @2h --- src/Render/Render.hs | 74 ++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 44 deletions(-) diff --git a/src/Render/Render.hs b/src/Render/Render.hs index 773cc80..92da1ca 100644 --- a/src/Render/Render.hs +++ b/src/Render/Render.hs @@ -333,6 +333,18 @@ drawMap = do (ColorAttachment 1) --sample 1 Renderbuffer --const rb --buffer-} +mat44ToGPU :: L.M44 CFloat -> UniformLocation -> String -> IO () +mat44ToGPU mat (UniformLocation dest) name = do + with (distribute mat) $ \ptr -> + glUniformMatrix4fv dest 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) + checkError $ "copy Matrix (" ++ name ++ ")" + +mat33ToGPU :: L.M33 CFloat -> UniformLocation -> String -> IO () +mat33ToGPU mat (UniformLocation dest) name = do + with (distribute mat) $ \ptr -> + glUniformMatrix3fv dest 1 0 (castPtr (ptr :: Ptr (L.M33 CFloat))) + checkError $ "copy Matrix (" ++ name ++ ")" + render :: Pioneers () render = do @@ -347,13 +359,13 @@ render = do camPos = cam ^. camObject zDist' = cam ^. zDist d = state ^. gl.glMap.mapShaderData - (UniformLocation proj) = shdrProjMatIndex d - (UniformLocation nmat) = shdrNormalMatIndex d - (UniformLocation vmat) = shdrViewMatIndex d + proj = shdrProjMatIndex d + nmat = shdrNormalMatIndex d + vmat = shdrViewMatIndex d dmo = state ^. gl.glMap.mapObjectShaderData - (UniformLocation projmo) = shdrMOProjMatIndex dmo - (UniformLocation nmatmo) = shdrMONormalMatIndex dmo - (UniformLocation vmatmo) = shdrMOViewMatIndex dmo + projmo = shdrMOProjMatIndex dmo + nmatmo = shdrMONormalMatIndex dmo + vmatmo = shdrMOViewMatIndex dmo liftIO $ do bindFramebuffer Framebuffer $= (state ^. gl.glFramebuffer) @@ -384,16 +396,12 @@ render = do --set up projection (= copy from state) --TODO: Fix width/depth - with (distribute (createFrustumOrtho 20 20 0 100)) $ \ptr -> - glUniformMatrix4fv proj 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy shadowmap-projection" + mat44ToGPU (createFrustumOrtho 20 20 0 100) proj "shadowmap-projection" --set up camera --TODO: Fix magic constants... and camPos let ! cam = getCam camPos 1 0.7 0 - with (distribute cam) $ \ptr -> - glUniformMatrix4fv vmat 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy shadowmap-cam" + mat44ToGPU cam vmat "shadowmap-cam" --set up normal--Mat transpose((model*camera)^-1) --needed? @@ -402,10 +410,7 @@ render = do Nothing -> L.eye3) :: L.M33 CFloat nmap = collect id normal' :: L.M33 CFloat --transpose... - with (distribute nmap) $ \ptr -> - glUniformMatrix3fv nmat 1 0 (castPtr (ptr :: Ptr (L.M33 CFloat))) - - checkError "nmat" + mat33ToGPU nmap nmat "nmat" drawMap @@ -416,16 +421,12 @@ render = do --set up projection (= copy from state) --TODO: Fix width/depth - with (distribute (createFrustumOrtho 20 20 0 100)) $ \ptr -> - glUniformMatrix4fv projmo 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy shadowmap-projection" + mat44ToGPU (createFrustumOrtho 20 20 0 100) projmo "shadowmap-projection" --set up camera --TODO: Fix magic constants... and camPos let ! cam = getCam camPos 1 0.7 0 - with (distribute cam) $ \ptr -> - glUniformMatrix4fv vmatmo 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy shadowmap-cam" + mat44ToGPU cam vmatmo "shadowmap-camera" --set up normal--Mat transpose((model*camera)^-1) --needed? @@ -434,10 +435,8 @@ render = do Nothing -> L.eye3) :: L.M33 CFloat nmap = collect id normal' :: L.M33 CFloat --transpose... - with (distribute nmap) $ \ptr -> - glUniformMatrix3fv nmatmo 1 0 (castPtr (ptr :: Ptr (L.M33 CFloat))) + mat33ToGPU nmap nmatmo "nmat" - checkError "nmat" mapM_ renderObject (state ^. gl.glMap.mapObjects) checkError "draw mapobjects" @@ -465,15 +464,11 @@ render = do checkError "setting up buffer" --set up projection (= copy from state) - with (distribute frust) $ \ptr -> - glUniformMatrix4fv proj 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy projection" + mat44ToGPU frust proj "projection" --set up camera let ! cam = getCam camPos zDist' xa ya - with (distribute cam) $ \ptr -> - glUniformMatrix4fv vmat 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy cam" + mat44ToGPU cam vmat "camera" --set up normal--Mat transpose((model*camera)^-1) let normal' = (case L.inv33 (fmap (^. L._xyz) cam ^. L._xyz) of @@ -481,10 +476,7 @@ render = do Nothing -> L.eye3) :: L.M33 CFloat nmap = collect id normal' :: L.M33 CFloat --transpose... - with (distribute nmap) $ \ptr -> - glUniformMatrix3fv nmat 1 0 (castPtr (ptr :: Ptr (L.M33 CFloat))) - - checkError "nmat" + mat33ToGPU nmap nmat "nmat" drawMap --draw map -> put to another function for readability liftIO $ do @@ -494,16 +486,12 @@ render = do --set up projection (= copy from state) --TODO: Fix width/depth - with (distribute frust) $ \ptr -> - glUniformMatrix4fv projmo 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy projection" + mat44ToGPU frust projmo "mapObjects-projection" --set up camera --TODO: Fix magic constants... and camPos let ! cam = getCam camPos zDist' xa ya - with (distribute cam) $ \ptr -> - glUniformMatrix4fv vmatmo 1 0 (castPtr (ptr :: Ptr (L.M44 CFloat))) - checkError "copy shadowmap-cam" + mat44ToGPU cam vmatmo "mapObjects-cam" --set up normal--Mat transpose((model*camera)^-1) --needed? @@ -512,10 +500,8 @@ render = do Nothing -> L.eye3) :: L.M33 CFloat nmap = collect id normal' :: L.M33 CFloat --transpose... - with (distribute nmap) $ \ptr -> - glUniformMatrix3fv nmatmo 1 0 (castPtr (ptr :: Ptr (L.M33 CFloat))) + mat33ToGPU nmap nmatmo "mapObjects-nmat" - checkError "nmat" mapM_ renderObject (state ^. gl.glMap.mapObjects) checkError "draw mapobjects"