diff --git a/src/Shader/Poke.hs b/src/Shader/Poke.hs index f648d65e8..ecf14cda4 100644 --- a/src/Shader/Poke.hs +++ b/src/Shader/Poke.hs @@ -23,13 +23,14 @@ import Control.Monad import qualified Data.IntMap.Strict as IM --import Control.Lens import qualified Data.Vector.Unboxed.Mutable as MV -import qualified Streaming.Prelude as SP +import qualified Data.Vector.Fusion.Stream.Monadic as VS import Control.Monad.Primitive pokeVerxs :: PicShads VBO -> [Verx] -> IO (PicShads Int) pokeVerxs vbos vxs = do count <- MV.replicate 6 0 - SP.mapM_ (pokeVerx vbos count) $ SP.each vxs + --SP.mapM_ (pokeVerx vbos count) $ SP.each vxs + VS.mapM_ (pokeVerx vbos count) $ VS.fromList vxs vToPicShad count -- F.foldM (F.FoldM -- (\_ vx -> pokeVerx vbos count vx >> addCountVerx count vx) @@ -44,7 +45,7 @@ vToPicShad mv = mapM (MV.unsafeRead mv) $ PicShads 0 1 2 3 4 5 pokeVerx :: PicShads VBO -> MV.MVector (PrimState IO) Int -> Verx -> IO () --{-# INLINE pokeVerx #-} -pokeVerx vbos offsets Verx{_vxPos=thePos,_vxCol=theCol,_vxExt=ext,_vxShadNum=theShadNum} = do +pokeVerx vbos offsets !Verx{_vxPos=thePos,_vxCol=theCol,_vxExt=ext,_vxShadNum=theShadNum} = do typeOff <- MV.unsafeRead offsets sn let thePtr = plusPtr (_vboPtr $ vboFromType vbos sn) (typeOff * pokeStride sn * floatSize) poke34 thePtr thePos theCol @@ -128,7 +129,8 @@ vboFromType ps sn = case sn of pokeLayVerxs :: PicShads VBO -> [Verx] -> IO (IM.IntMap (PicShads Int)) pokeLayVerxs vbos vxs = do counts <- MV.replicate (6*6) 0 - SP.mapM_ (pokeLayVerx vbos counts) $ SP.each vxs + --SP.mapM_ (pokeLayVerx vbos counts) $ SP.each vxs + VS.mapM_ (pokeLayVerx vbos counts) $ VS.fromList vxs vToLayPicShad counts vToLayPicShad :: MV.MVector RealWorld Int -> IO (IM.IntMap (PicShads Int))