Revert "Continue transfer to mutable vectors"

This reverts commit 1f2f5431c0.
This commit is contained in:
2021-08-12 00:57:57 +02:00
parent 1f2f5431c0
commit 724f9a86f8
5 changed files with 44 additions and 50 deletions
+1 -4
View File
@@ -12,7 +12,6 @@ import Dodge.Config.Load
import Dodge.Config.Update import Dodge.Config.Update
import Dodge.SoundLogic.LoadSound import Dodge.SoundLogic.LoadSound
import Dodge.Debug.Flag.Data import Dodge.Debug.Flag.Data
import Data.Preload.Render
import Picture import Picture
import Render import Render
import Preload.Render import Preload.Render
@@ -21,7 +20,6 @@ import Preload
import Sound.Data import Sound.Data
import Music import Music
import Data.Preload import Data.Preload
import Shader.Poke
import Control.Lens import Control.Lens
--import Foreign (Word32) --import Foreign (Word32)
@@ -56,9 +54,8 @@ doSideEffects preData w = do
endTicks <- SDL.ticks endTicks <- SDL.ticks
let lastFrameTicks = _frameTimer preData let lastFrameTicks = _frameTimer preData
shads <- picShadToMV $ _pictureShaders $ _renderData preData
when (_displaySecondsPerFrame $ _debugFlags w) $ void $ renderFoldable when (_displaySecondsPerFrame $ _debugFlags w) $ void $ renderFoldable
shads (_renderData preData)
(setDepth (-1) (setDepth (-1)
. translate (-0.5) (-0.8) . scale 0.0005 0.0005 . translate (-0.5) (-0.8) . scale 0.0005 0.0005
. text $ "ms/frame " ++ show (endTicks - lastFrameTicks) . text $ "ms/frame " ++ show (endTicks - lastFrameTicks)
+3 -5
View File
@@ -76,12 +76,10 @@ doDrawing pdata w = do
then renderTextureWalls pdata nWalls then renderTextureWalls pdata nWalls
else renderBlankWalls pdata nWalls else renderBlankWalls pdata nWalls
let shads = _pictureShaders pdata _ <- renderFoldable pdata $ polysToPic $ foregroundPics w
vShads <- picShadToMV shads
_ <- renderFoldable vShads $ polysToPic $ foregroundPics w
vnums <- pokeBindFoldableLayer pdata $ worldPictures w vnums <- pokeBindFoldableLayer pdata $ worldPictures w
let shads = _pictureShaders pdata
renderLayer 0 shads vnums renderLayer 0 shads vnums
nTextArrayVs <- pokePoint33s (shadVBOptr $ _textureArrayShader pdata) (_floorTiles w) nTextArrayVs <- pokePoint33s (shadVBOptr $ _textureArrayShader pdata) (_floorTiles w)
@@ -176,7 +174,7 @@ doDrawing pdata w = do
blend $= Enabled blend $= Enabled
blendFunc $= (SrcAlpha,OneMinusSrcAlpha) blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
_ <- renderFoldable vShads $ fixedCoordPictures w _ <- renderFoldable pdata $ fixedCoordPictures w
depthMask $= Enabled depthMask $= Enabled
eTicks <- SDL.ticks eTicks <- SDL.ticks
+17 -23
View File
@@ -26,7 +26,6 @@ import qualified Data.IntMap.Strict as IM
import qualified SDL import qualified SDL
import qualified Data.Vector.Unboxed.Mutable as UMV import qualified Data.Vector.Unboxed.Mutable as UMV
import qualified Data.Vector.Mutable as MV import qualified Data.Vector.Mutable as MV
import Control.Monad.Primitive
divideSize :: Int -> Size -> Size divideSize :: Int -> Size -> Size
divideSize i (Size x y) = Size (div x $ fromIntegral i) (div y $ fromIntegral i) divideSize i (Size x y) = Size (div x $ fromIntegral i) (div y $ fromIntegral i)
@@ -146,13 +145,16 @@ drawTextureOnFramebuffer fs fbo to = do
drawShader fs 4 drawShader fs 4
pokeBindFoldable pokeBindFoldable
:: MV.MVector (PrimState IO) VShader :: PicShads VShader
-> UMV.MVector (PrimState IO) Int
-> [Verx] -> [Verx]
-> IO () -> IO (PicShads Int)
pokeBindFoldable shads counts m = do pokeBindFoldable shads m = do
pokeVerxs shads counts m counts <- UMV.replicate 6 0
bindShader shads counts pokeVerxs (fmap (_vaoVBO . _vshaderVAO) shads) counts m
shads' <- picShadToMV shads
bindShader shads' counts
elist <- vToPicShad counts
return elist
zeroCounts :: PicShads Int zeroCounts :: PicShads Int
zeroCounts = PicShads 0 0 0 0 0 0 zeroCounts = PicShads 0 0 0 0 0 0
@@ -168,14 +170,17 @@ pokeBindFoldableLayer pdata m = do
return slist'' return slist''
renderFoldable renderFoldable
:: MV.MVector (PrimState IO) VShader :: RenderData
-> [Verx] -> [Verx]
-> IO Word32 -> IO Word32
renderFoldable shads struct = do renderFoldable pdata struct = do
pokeStartTicks <- SDL.ticks pokeStartTicks <- SDL.ticks
counts <- UMV.replicate 6 0 let shads = _pictureShaders pdata
pokeBindFoldable shads counts struct count <- pokeBindFoldable shads struct
MV.imapM_ (drawShaderLay' 0 counts) shads s <- picShadToMV shads
c <- picShadToUMV count
MV.imapM_ (drawShaderLay' 0 c) s
--sequence_ (drawShaderLay 0 <$> shads <*> count)
pokeEndTicks <- SDL.ticks pokeEndTicks <- SDL.ticks
return $ pokeEndTicks - pokeStartTicks return $ pokeEndTicks - pokeStartTicks
------------------------------end renderFoldable ------------------------------end renderFoldable
@@ -183,17 +188,6 @@ renderFoldable shads struct = do
renderLayer :: Int -> PicShads VShader -> IM.IntMap (PicShads Int) -> IO () renderLayer :: Int -> PicShads VShader -> IM.IntMap (PicShads Int) -> IO ()
renderLayer i shads counts = sequence_ $ drawShaderLay i <$> shads <*> counts IM.! i 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 pokeTwoOff
:: Ptr Float :: Ptr Float
-> Int -> Int
+4 -4
View File
@@ -12,7 +12,7 @@ module Shader
import Shader.Data import Shader.Data
import Shader.Parameters import Shader.Parameters
import Shader.ExtraPrimitive import Shader.ExtraPrimitive
--import Shader.Poke import Shader.Poke
--import Layers --import Layers
--import MatrixHelper --import MatrixHelper
@@ -82,15 +82,15 @@ drawShaderLay l fs i = do
drawShaderLay' :: Int -> UMV.MVector (PrimState IO) Int -> Int -> VShader -> IO () drawShaderLay' :: Int -> UMV.MVector (PrimState IO) Int -> Int -> VShader -> IO ()
{-# INLINE drawShaderLay' #-} {-# INLINE drawShaderLay' #-}
drawShaderLay' theLayer shaderOffsetsVector shaderIndex fs = do drawShaderLay' l countsVector index fs = do
i <- UMV.read shaderOffsetsVector shaderIndex i <- UMV.read countsVector index
currentProgram $= Just (_vshaderProgram fs) currentProgram $= Just (_vshaderProgram fs)
bindVertexArrayObject $= Just (_vao $ _vshaderVAO fs) bindVertexArrayObject $= Just (_vao $ _vshaderVAO fs)
case _vshaderTexture fs of case _vshaderTexture fs of
Just ShaderTexture{_textureObject = txo} Just ShaderTexture{_textureObject = txo}
-> textureBinding Texture2D $= Just txo -> textureBinding Texture2D $= Just txo
_ -> return () _ -> return ()
glDrawArrays (marshalEPrimitiveMode $ _vshaderDrawPrimitive fs) (fromIntegral $ theLayer*numSubElements) (fromIntegral i) glDrawArrays (marshalEPrimitiveMode $ _vshaderDrawPrimitive fs) (fromIntegral $ l*numSubElements) (fromIntegral i)
drawShader :: FullShader -> Int -> IO () drawShader :: FullShader -> Int -> IO ()
{-# INLINE drawShader #-} {-# INLINE drawShader #-}
+18 -13
View File
@@ -31,22 +31,14 @@ import qualified Data.Vector.Mutable as MV
import qualified Data.Vector.Fusion.Stream.Monadic as VS import qualified Data.Vector.Fusion.Stream.Monadic as VS
import Control.Monad.Primitive import Control.Monad.Primitive
--pokeVerxs
-- :: PicShads VBO
-- -> UMV.MVector (PrimState IO) Int
-- -> [Verx]
-- -> IO ()
--pokeVerxs vbos count vxs = do
-- s <- picShadToMV vbos
-- VS.mapM_ (pokeVerx s count) $ VS.fromList vxs
pokeVerxs pokeVerxs
:: MV.MVector (PrimState IO) VShader :: PicShads VBO
-> UMV.MVector (PrimState IO) Int -> UMV.MVector (PrimState IO) Int
-> [Verx] -> [Verx]
-> IO () -> IO ()
pokeVerxs vbos count vxs = do pokeVerxs vbos count vxs = do
VS.mapM_ (pokeVerx vbos count) $ VS.fromList vxs s <- picShadToMV vbos
VS.mapM_ (pokeVerx' s count) $ VS.fromList vxs
vToPicShad :: UMV.MVector (PrimState IO) Int -> IO (PicShads Int) vToPicShad :: UMV.MVector (PrimState IO) Int -> IO (PicShads Int)
{-# INLINE vToPicShad #-} {-# INLINE vToPicShad #-}
@@ -79,10 +71,23 @@ picShadToMV (PicShads a b c d e f) = do
MV.write theVec 5 f MV.write theVec 5 f
return theVec return theVec
pokeVerx :: MV.MVector (PrimState IO) VShader -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
pokeVerx :: PicShads VBO -> UMV.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 <- UMV.unsafeRead offsets sn typeOff <- UMV.unsafeRead offsets sn
theShad <- fmap (_vaoVBO . _vshaderVAO) $ MV.read vbos sn let thePtr = plusPtr (_vboPtr $ vboFromType vbos sn) (typeOff * pokeStride sn * floatSize)
poke34 thePtr thePos theCol
pokeArrayOff thePtr 7 ext
UMV.unsafeModify offsets (+1) sn
where
sn = _unShadNum theShadNum
pokeVerx' :: MV.MVector (PrimState IO) VBO -> UMV.MVector (PrimState IO) Int -> Verx -> IO ()
pokeVerx' vbos offsets Verx{_vxPos=thePos,_vxCol=theCol,_vxExt=ext,_vxShadNum=theShadNum} = do
typeOff <- UMV.unsafeRead offsets sn
theShad <- MV.read vbos sn
let thePtr = plusPtr (_vboPtr theShad) (typeOff * pokeStride sn * floatSize) let thePtr = plusPtr (_vboPtr theShad) (typeOff * pokeStride sn * floatSize)
poke34 thePtr thePos theCol poke34 thePtr thePos theCol
pokeArrayOff thePtr 7 ext pokeArrayOff thePtr 7 ext