Continue transfer to mutable vectors
This commit is contained in:
+23
-17
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user