Use Fold for rendering
This commit is contained in:
+18
-6
@@ -7,6 +7,7 @@ module Shader.Poke
|
||||
, pokePoint33s
|
||||
, pokeVerxs
|
||||
, pokeLayVerxs
|
||||
, pokeLayVerxsFold
|
||||
, pokeLayVerxsPart
|
||||
, pokeLayVerxsPartM
|
||||
, pokeLayVerxsM
|
||||
@@ -18,19 +19,24 @@ import Picture.Data
|
||||
import Geometry.Data
|
||||
import Layers
|
||||
|
||||
--import qualified Streaming.Prelude as SP
|
||||
--import Data.Maybe
|
||||
--import Data.List
|
||||
import Foreign
|
||||
import Control.Monad
|
||||
--import qualified Control.Foldl as F
|
||||
import qualified Control.Foldl as F
|
||||
--import qualified Data.IntMap.Strict as IM
|
||||
--import Control.Lens
|
||||
|
||||
pokeVerxs :: PicShads VBO -> [Verx] -> IO (PicShads Int)
|
||||
pokeVerxs vbos vxs0 = go vxs0 (pure 0)
|
||||
where
|
||||
go [] !count = return count
|
||||
go (!vx:vxs) !count = pokeVerx vbos count vx >> (go vxs $! addCountVerx count vx)
|
||||
pokeVerxs vbos = F.foldM $ F.FoldM
|
||||
(\count vx -> pokeVerx vbos count vx >> return (addCountVerx count vx))
|
||||
(pure $ pure 0)
|
||||
return
|
||||
--pokeVerxs vbos vxs0 = go vxs0 (pure 0)
|
||||
-- where
|
||||
-- go [] !count = return count
|
||||
-- go (!vx:vxs) !count = pokeVerx vbos count vx >> (go vxs $! addCountVerx count vx)
|
||||
|
||||
-- this is very brittle, but want to optimise speed if possible here
|
||||
pokeVerx :: PicShads VBO -> PicShads Int -> Verx -> IO ()
|
||||
@@ -121,6 +127,12 @@ pokePoint3s ptr vals0 = go vals0 0
|
||||
where
|
||||
off i = n*3 + i
|
||||
|
||||
pokeLayVerxsFold :: PicShads VBO -> [Verx] -> IO (Layers (PicShads Int))
|
||||
pokeLayVerxsFold !vbos = F.foldM $ F.FoldM
|
||||
(\counts vx -> pokeLayVerx vbos counts vx >> return (addLayCountVerx counts vx))
|
||||
(pure $ pure $ pure 0)
|
||||
return
|
||||
|
||||
pokeLayVerxsM :: PicShads VBO -> [Verx] -> IO (Layers (PicShads Int))
|
||||
pokeLayVerxsM !vbos = foldM f (pure $ pure 0)
|
||||
where
|
||||
@@ -145,7 +157,7 @@ pokeLayVerxs !vbos vxs0 = go vxs0 (pure (pure 0))
|
||||
|
||||
-- this is very brittle, but want to optimise speed if possible here
|
||||
pokeLayVerx :: PicShads VBO -> Layers (PicShads Int) -> Verx -> IO ()
|
||||
{-# INLINE pokeLayVerx #-}
|
||||
--{-# INLINE pokeLayVerx #-}
|
||||
pokeLayVerx vbos imoffsets Verx{_vxPos=thePos,_vxCol=theCol,_vxType=theType, _vxLayer = theLay} = case theType of
|
||||
PolyV -> poke34 (plusPtr (_vboPtr $ _psPoly vbos) ((_psPoly offsets + layOff) * 7 * floatSize)) thePos theCol
|
||||
PolyzV x -> poke34 thePtr thePos theCol
|
||||
|
||||
Reference in New Issue
Block a user