Continue adding mutability

This commit is contained in:
2021-08-12 05:49:25 +02:00
parent c84bafb267
commit 4c9a3c8b3c
4 changed files with 47 additions and 30 deletions
+5 -1
View File
@@ -20,6 +20,8 @@ import Preload
import Sound.Data import Sound.Data
import Music import Music
import Data.Preload import Data.Preload
import Data.Preload.Render
import Shader.Poke
import Control.Lens import Control.Lens
--import Foreign (Word32) --import Foreign (Word32)
@@ -54,8 +56,10 @@ doSideEffects preData w = do
endTicks <- SDL.ticks endTicks <- SDL.ticks
let lastFrameTicks = _frameTimer preData let lastFrameTicks = _frameTimer preData
shadV <- picShadToMV $ _pictureShaders $ (_renderData preData)
when (_displaySecondsPerFrame $ _debugFlags w) $ void $ renderFoldable when (_displaySecondsPerFrame $ _debugFlags w) $ void $ renderFoldable
(_renderData preData) shadV
(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)
+13 -10
View File
@@ -38,6 +38,7 @@ import Control.Monad
--import qualified Data.Set as S --import qualified Data.Set as S
import Graphics.Rendering.OpenGL hiding (color,scale,translate,rotate) import Graphics.Rendering.OpenGL hiding (color,scale,translate,rotate)
import qualified SDL import qualified SDL
import qualified Data.Vector.Unboxed.Mutable as UMV
doDrawing :: RenderData -> World -> IO Word32 doDrawing :: RenderData -> World -> IO Word32
doDrawing pdata w = do doDrawing pdata w = do
@@ -76,11 +77,13 @@ doDrawing pdata w = do
then renderTextureWalls pdata nWalls then renderTextureWalls pdata nWalls
else renderBlankWalls pdata nWalls else renderBlankWalls pdata nWalls
_ <- renderFoldable pdata $ polysToPic $ foregroundPics w
vnums <- pokeBindFoldableLayer pdata $ worldPictures w
let shads = _pictureShaders pdata let shads = _pictureShaders pdata
renderLayer 0 shads vnums shadV <- picShadToMV $ _pictureShaders pdata
renderFoldable shadV $ polysToPic $ foregroundPics w
layerCounts <- UMV.replicate (6*6) 0
vnums <- pokeBindFoldableLayer shadV layerCounts $ worldPictures w
renderLayer' 0 shadV layerCounts
nTextArrayVs <- pokePoint33s (shadVBOptr $ _textureArrayShader pdata) (_floorTiles w) nTextArrayVs <- pokePoint33s (shadVBOptr $ _textureArrayShader pdata) (_floorTiles w)
bindShaderBuffers [_textureArrayShader pdata] [nTextArrayVs] bindShaderBuffers [_textureArrayShader pdata] [nTextArrayVs]
@@ -90,14 +93,14 @@ doDrawing pdata w = do
clear [ColorBuffer] clear [ColorBuffer]
blendFunc $= (SrcAlpha,OneMinusSrcAlpha) blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
renderLayer 1 shads vnums renderLayer' 1 shadV layerCounts
bindFramebuffer Framebuffer $= fst (_fboColor pdata) bindFramebuffer Framebuffer $= fst (_fboColor pdata)
clear [ColorBuffer] clear [ColorBuffer]
depthMask $= Disabled depthMask $= Disabled
renderLayer 3 shads vnums renderLayer' 3 shadV layerCounts
renderLayer 4 shads vnums renderLayer' 4 shadV layerCounts
renderLayer 5 shads vnums renderLayer' 5 shadV layerCounts
depthMask $= Enabled depthMask $= Enabled
bindFramebuffer Framebuffer $= fst (_fboFourth1 pdata) bindFramebuffer Framebuffer $= fst (_fboFourth1 pdata)
@@ -141,7 +144,7 @@ doDrawing pdata w = do
depthFunc $= Just Lequal depthFunc $= Just Lequal
--mapM_ (uncurry $ drawShaderLay 2) (vnums IM.! 2) --mapM_ (uncurry $ drawShaderLay 2) (vnums IM.! 2)
renderLayer 2 shads vnums renderLayer' 2 shadV layerCounts
renderWindows pdata windowPoints renderWindows pdata windowPoints
depthFunc $= Just Always depthFunc $= Just Always
@@ -174,7 +177,7 @@ doDrawing pdata w = do
blend $= Enabled blend $= Enabled
blendFunc $= (SrcAlpha,OneMinusSrcAlpha) blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
_ <- renderFoldable pdata $ fixedCoordPictures w renderFoldable shadV $ fixedCoordPictures w
depthMask $= Enabled depthMask $= Enabled
eTicks <- SDL.ticks eTicks <- SDL.ticks
+29 -18
View File
@@ -146,50 +146,61 @@ drawTextureOnFramebuffer fs fbo to = do
drawShader fs 4 drawShader fs 4
pokeBindFoldable pokeBindFoldable
:: PicShads VShader :: MV.MVector (PrimState IO) VShader
-> UMV.MVector (PrimState IO) Int -> UMV.MVector (PrimState IO) Int
-> [Verx] -> [Verx]
-> IO () -> IO ()
pokeBindFoldable shads counts m = do pokeBindFoldable shadV counts m = do
shadV <- picShadToMV shads
pokeVerxs shadV counts m pokeVerxs shadV counts m
bindShader shadV counts bindShader shadV 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
pokeBindFoldableLayer pokeBindFoldableLayer
:: RenderData :: MV.MVector (PrimState IO) VShader
-> UMV.MVector (PrimState IO) Int
-> Picture -> Picture
-> IO (IM.IntMap (PicShads Int)) -> IO (IM.IntMap (PicShads Int))
pokeBindFoldableLayer pdata m = do pokeBindFoldableLayer shadV counts m = do
let shads = _pictureShaders pdata
shadV <- picShadToMV shads
counts <- UMV.replicate (6*6) 0
slist'' <- pokeLayVerxs shadV counts m slist'' <- pokeLayVerxs shadV counts m
bindShaderLayers shadV counts bindShaderLayers shadV counts
return slist'' return slist''
renderFoldable renderFoldable
:: RenderData :: MV.MVector (PrimState IO) VShader
-> [Verx]
-> IO ()
renderFoldable shadV struct = do
counts <- UMV.replicate 6 0
pokeBindFoldable shadV counts struct
MV.imapM_ (drawShaderLay' 0 counts) shadV
renderFoldableTimed
:: MV.MVector (PrimState IO) VShader
-> [Verx] -> [Verx]
-> IO Word32 -> IO Word32
renderFoldable pdata struct = do renderFoldableTimed shadV struct = do
pokeStartTicks <- SDL.ticks pokeStartTicks <- SDL.ticks
let shads = _pictureShaders pdata
counts <- UMV.replicate 6 0 counts <- UMV.replicate 6 0
pokeBindFoldable shads counts struct pokeBindFoldable shadV counts struct
s <- picShadToMV shads MV.imapM_ (drawShaderLay' 0 counts) shadV
MV.imapM_ (drawShaderLay' 0 counts) s
--sequence_ (drawShaderLay 0 <$> shads <*> count)
pokeEndTicks <- SDL.ticks pokeEndTicks <- SDL.ticks
return $ pokeEndTicks - pokeStartTicks return $ pokeEndTicks - pokeStartTicks
------------------------------end renderFoldable ------------------------------end renderFoldable
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 layer shads counts = sequence_ $ drawShaderLay layer <$> shads <*> counts IM.! layer
renderLayer'
:: Int
-> MV.MVector (PrimState IO) VShader
-> UMV.MVector (PrimState IO) Int
-> IO ()
renderLayer' layer shads counts = do
let layerCounts = UMV.slice (layer * 6) 6 counts
MV.imapM_ (drawShaderLay' layer layerCounts) shads
-- sequence_ $ drawShaderLay layer <$> shads <*> counts IM.! layer
pokeTwoOff pokeTwoOff
:: Ptr Float :: Ptr Float
-1
View File
@@ -112,4 +112,3 @@ freeShaderPointers fs = free $ _vboPtr $ _vaoVBO $ _shaderVAO fs
shadVBOptr :: FullShader -> Ptr Float shadVBOptr :: FullShader -> Ptr Float
shadVBOptr = _vboPtr . _vaoVBO . _shaderVAO shadVBOptr = _vboPtr . _vaoVBO . _shaderVAO