Continue transfer to mutable vectors

This commit is contained in:
2021-08-11 22:02:17 +02:00
parent 0c4c83abb5
commit 1f2f5431c0
5 changed files with 50 additions and 44 deletions
+23 -17
View File
@@ -26,6 +26,7 @@ import qualified Data.IntMap.Strict as IM
import qualified SDL
import qualified Data.Vector.Unboxed.Mutable as UMV
import qualified Data.Vector.Mutable as MV
import Control.Monad.Primitive
divideSize :: Int -> Size -> Size
divideSize i (Size x y) = Size (div x $ fromIntegral i) (div y $ fromIntegral i)
@@ -145,16 +146,13 @@ drawTextureOnFramebuffer fs fbo to = do
drawShader fs 4
pokeBindFoldable
:: PicShads VShader
:: MV.MVector (PrimState IO) VShader
-> UMV.MVector (PrimState IO) Int
-> [Verx]
-> IO (PicShads Int)
pokeBindFoldable shads m = do
counts <- UMV.replicate 6 0
pokeVerxs (fmap (_vaoVBO . _vshaderVAO) shads) counts m
shads' <- picShadToMV shads
bindShader shads' counts
elist <- vToPicShad counts
return elist
-> IO ()
pokeBindFoldable shads counts m = do
pokeVerxs shads counts m
bindShader shads counts
zeroCounts :: PicShads Int
zeroCounts = PicShads 0 0 0 0 0 0
@@ -170,17 +168,14 @@ pokeBindFoldableLayer pdata m = do
return slist''
renderFoldable
:: RenderData
:: MV.MVector (PrimState IO) VShader
-> [Verx]
-> IO Word32
renderFoldable pdata struct = do
renderFoldable shads struct = do
pokeStartTicks <- SDL.ticks
let shads = _pictureShaders pdata
count <- pokeBindFoldable shads struct
s <- picShadToMV shads
c <- picShadToUMV count
MV.imapM_ (drawShaderLay' 0 c) s
--sequence_ (drawShaderLay 0 <$> shads <*> count)
counts <- UMV.replicate 6 0
pokeBindFoldable shads counts struct
MV.imapM_ (drawShaderLay' 0 counts) shads
pokeEndTicks <- SDL.ticks
return $ pokeEndTicks - pokeStartTicks
------------------------------end renderFoldable
@@ -188,6 +183,17 @@ renderFoldable pdata struct = do
renderLayer :: Int -> PicShads VShader -> IM.IntMap (PicShads Int) -> IO ()
renderLayer i shads counts = sequence_ $ drawShaderLay i <$> shads <*> counts IM.! i
renderLayer'
:: Int
-> MV.MVector (PrimState IO) VShader
-> IM.IntMap (UMV.MVector (PrimState IO) Int)
-> IO ()
renderLayer' theLayer shads counts = MV.imapM_ f shads
where
layCounts = counts IM.! theLayer
f shadIndex theShader = UMV.read layCounts shadIndex >>= drawShaderLay theLayer theShader
--undefined -- sequence_ $ drawShaderLay i <$> shads <*> counts IM.! i
pokeTwoOff
:: Ptr Float
-> Int