First pass deletion, increases perfomance significantly
This commit is contained in:
+6
-77
@@ -405,12 +405,7 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p
|
||||
-- set common uniforms
|
||||
setShaderUniforms rot zoom (tranx,trany) (winx,winy) (_listShaders pdata)
|
||||
|
||||
forM_ [_basicShader pdata
|
||||
,_textShader pdata
|
||||
,_circShader pdata
|
||||
,_arcShader pdata
|
||||
,_ellipseShader pdata
|
||||
,_lightmapCircleShader pdata
|
||||
forM_ [_lightmapCircleShader pdata
|
||||
,_backShader pdata
|
||||
,_wallShadowShader pdata
|
||||
] $ \shad -> do
|
||||
@@ -496,18 +491,6 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p
|
||||
uniform (_shaderUniforms shad !! 2) $= (0::Float)
|
||||
uniform (_shaderUniforms shad !! 3) $= Vector2 (0::Float) 0
|
||||
uniform (_shaderUniforms shad !! 4) $= idmat
|
||||
forM_ [_basicShader pdata
|
||||
,_textShader pdata
|
||||
,_circShader pdata
|
||||
,_arcShader pdata
|
||||
,_ellipseShader pdata
|
||||
] $ \shad -> do
|
||||
currentProgram $= Just (fst shad)
|
||||
uniform (snd shad !! 0) $= Vector2 (2::Float) 2
|
||||
uniform (snd shad !! 1) $= (1::Float)
|
||||
uniform (snd shad !! 2) $= (0::Float)
|
||||
uniform (snd shad !! 3) $= Vector2 (0::Float) 0
|
||||
uniform (snd shad !! 4) $= idmat
|
||||
endWallTicks <- SDL.ticks
|
||||
--return (ticksAfterL, ticks2+ticks3+ticks4, endWallTicks - startWallTicks)
|
||||
ticksE <- SDL.ticks
|
||||
@@ -525,69 +508,15 @@ renderTree' pdata rot zoom (tranx,trany) (winx,winy) tree = do
|
||||
|
||||
let slist = _listShaders pdata
|
||||
|
||||
-- poke data, returns list of number of vertices for each shader
|
||||
is <- F.foldM (pokeShaders slist) tree
|
||||
|
||||
-- the idea of doing as binding of buffers at once, rather than interweaving with draw
|
||||
-- calls, is to prevent opengl from waiting for a draw call to finish
|
||||
-- before it performs another state change
|
||||
bindShaderBuffers slist is
|
||||
|
||||
drawShaders slist is
|
||||
|
||||
pokeEndTicks <- SDL.ticks
|
||||
return $ pokeEndTicks - pokeStartTicks
|
||||
|
||||
-- the following code draws a picture tree
|
||||
-- it does not set nor change the blend function or depth buffer
|
||||
-- nor does it set uniforms
|
||||
renderTree :: Foldable f => RenderData -> Float -> Float -> (Float,Float) -> (Float,Float)
|
||||
-> f RenderType -> IO Word32
|
||||
renderTree pdata rot zoom (tranx,trany) (winx,winy) tree = do
|
||||
|
||||
pokeStartTicks <- SDL.ticks
|
||||
-- poke necessary data
|
||||
(nTriVs,nTextVs,nCircVs,nLineVs,nArcVs,nEllVs)
|
||||
-- <- F.foldM (theFold (_ptrPosVBO pdata, _ptrColVBO pdata)
|
||||
<- F.foldM (theFold (twoPtrsVAO $ _triVAO pdata)
|
||||
(threePtrsVAO $ _textVAO pdata)
|
||||
(threePtrsVAO $ _circVAO pdata)
|
||||
(twoPtrsVAO $ _lineVAO pdata)
|
||||
(threePtrsVAO $ _arcVAO pdata)
|
||||
(twoPtrsVAO $ _ellipseVAO pdata)
|
||||
) $ tree
|
||||
|
||||
pokeEndTicks <-SDL.ticks
|
||||
-- bind buffers
|
||||
-- the idea of doing as much of this at once, rather than interweaving with draw
|
||||
-- calls, is to prevent opengl from waiting for a draw call to finish
|
||||
-- before it performs another state change
|
||||
bindArrayBuffers nTriVs $ _vaoBufferTargets $ _triVAO pdata
|
||||
bindArrayBuffers nCircVs $ _vaoBufferTargets $ _circVAO pdata
|
||||
bindArrayBuffers nArcVs $ _vaoBufferTargets $ _arcVAO pdata
|
||||
bindArrayBuffers nLineVs $ _vaoBufferTargets $ _lineVAO pdata
|
||||
bindArrayBuffers nTextVs $ _vaoBufferTargets $ _textVAO pdata
|
||||
bindArrayBuffers nEllVs $ _vaoBufferTargets $ _ellipseVAO pdata
|
||||
|
||||
|
||||
-- draw triangles
|
||||
currentProgram $= Just (fst $ _basicShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _triVAO pdata)
|
||||
drawArrays Triangles 0 (fromIntegral $ nTriVs)
|
||||
-- draw circles
|
||||
currentProgram $= Just (fst $ _circShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _circVAO pdata)
|
||||
drawArrays Points 0 (fromIntegral $ nCircVs)
|
||||
-- draw ellipses
|
||||
currentProgram $= Just (fst $ _ellipseShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _ellipseVAO pdata)
|
||||
drawArrays Triangles 0 (fromIntegral $ nEllVs)
|
||||
-- draw arcs
|
||||
currentProgram $= Just (fst $ _arcShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _arcVAO pdata)
|
||||
drawArrays Points 0 (fromIntegral $ nArcVs)
|
||||
-- draw lines
|
||||
currentProgram $= Just (fst $ _basicShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _lineVAO pdata)
|
||||
drawArrays Lines 0 (fromIntegral $ nLineVs)
|
||||
-- draw text
|
||||
currentProgram $= Just (fst $ _textShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _textVAO pdata)
|
||||
textureBinding Texture2D $= Just (_textures pdata !! 0)
|
||||
drawArrays Points 0 (fromIntegral $ nTextVs)
|
||||
return (pokeEndTicks - pokeStartTicks)
|
||||
|
||||
Reference in New Issue
Block a user