Continue tweaking rendering

This commit is contained in:
2021-07-28 12:25:52 +02:00
parent ae84f44824
commit 3b53570c21
5 changed files with 86 additions and 32 deletions
+29 -24
View File
@@ -1,3 +1,4 @@
{-# LANGUAGE TupleSections #-}
module Render
where
import Shader
@@ -159,33 +160,37 @@ pokeBindFoldableLayer
-> IO (IM.IntMap [(VShader,Int)])
pokeBindFoldableLayer pdata m = do
let slist = (,) <$> [0..6] <*> _pictureShaders pdata
slist' = IM.fromListWith (++) ((,) <$> [0..6] <*> map ((:[]) . (, 0)) (_pictureShaders pdata))
is <- F.foldM (traverse pokeShaderLayer slist) m
-- is <- F.foldM (traverse pokeShaderLayer slist) m
-- bindShaderLayer slist is
slist'' <- foldM pokeVX slist' m
bindShaderLay slist''
--return $ IM.fromListWith (++) $ zipWith (\(i,fs) n -> (i,[(fs,n)])) slist is
return slist''
renderFoldable
:: Foldable f
=> RenderData
-> f Verx
-> IO Word32
renderFoldable pdata struct = do
pokeStartTicks <- SDL.ticks
let slist = (,) <$> [0..6] <*> _pictureShaders pdata
-- poke data, returns list buffer sizes for each shader
is <- F.foldM (traverse pokeShaderLayer slist) struct
-- the idea of binding many buffers at once, rather than interweaving with draw
-- calls, is to prevent opengl from waiting for a draw call to finish
-- before it performs another state change
bindShaderLayer slist is
return $ IM.fromListWith (++) $ zipWith (\(i,fs) n -> (i,[(fs,n)])) slist is
--renderFoldable
-- :: Foldable f
-- => RenderData
-- -> f RenderType
-- -> IO Word32
--renderFoldable pdata struct = do
-- pokeStartTicks <- SDL.ticks
--
-- let slist = _pictureShaders pdata
--
---- poke data, returns list buffer sizes for each shader
-- is <- F.foldM (traverse pokeShader slist) struct
--
---- the idea of binding many buffers at once, rather than interweaving with draw
---- calls, is to prevent opengl from waiting for a draw call to finish
---- before it performs another state change
-- bindShaderBuffers slist is
--
-- zipWithM_ drawShader slist is
--
-- pokeEndTicks <- SDL.ticks
-- return $ pokeEndTicks - pokeStartTicks
zipWithM_ (uncurry drawShaderLay) slist is
pokeEndTicks <- SDL.ticks
return $ pokeEndTicks - pokeStartTicks
------------------------------end renderFoldable
pokeTwoOff