Refactor shaders, commit before major deletion of old code
This commit is contained in:
+24
-14
@@ -403,6 +403,8 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p
|
||||
wmata <- (newMatrix RowMajor $ concatMap vToL $ vToL wmat) :: IO (GLmatrix GLfloat)
|
||||
|
||||
-- set common uniforms
|
||||
setShaderUniforms rot zoom (tranx,trany) (winx,winy) (_listShaders pdata)
|
||||
|
||||
forM_ [_basicShader pdata
|
||||
,_textShader pdata
|
||||
,_circShader pdata
|
||||
@@ -454,6 +456,21 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p
|
||||
-- set drawing for on top
|
||||
blendFuncSeparate $= ((SrcAlphaSaturate, OneMinusSrcAlpha), (Zero,One))
|
||||
clear [DepthBuffer]
|
||||
-- draw background
|
||||
bindArrayBuffers 1 $ _vaoBufferTargets $ _backVAO pdata
|
||||
depthFunc $= Just Less
|
||||
|
||||
currentProgram $= Just (fst $ _backShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _backVAO pdata)
|
||||
let backPtr = (\(_,x,_) -> x) $ head $ _vaoBufferTargets $ _backVAO pdata
|
||||
backPtr2 = (\(_,x,_) -> x) $ (_vaoBufferTargets $ _backVAO pdata) !! 1
|
||||
pokeFourOff backPtr 0 (tranx,trany,rot,zoom)
|
||||
pokeTwoOff backPtr2 0 (winx,winy)
|
||||
textureBinding Texture2D $= Just (_textures pdata !! 1)
|
||||
drawArrays Points (fromIntegral 0) (fromIntegral 1)
|
||||
|
||||
depthFunc $= Just Lequal
|
||||
|
||||
-- draw layer 0
|
||||
ticks2 <- renderTree' pdata rot zoom (tranx,trany) (winx,winy) $ picToLTree (Just 0) pic
|
||||
--((picToAlt 0 pic) :: [RenderType])
|
||||
@@ -472,6 +489,13 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p
|
||||
,0,0,0,1
|
||||
]
|
||||
) :: IO (GLmatrix GLfloat)
|
||||
forM_ (_listShaders pdata) $ \shad -> do
|
||||
currentProgram $= Just (_shaderProgram shad)
|
||||
uniform (_shaderUniforms shad !! 0) $= Vector2 (2::Float) 2
|
||||
uniform (_shaderUniforms shad !! 1) $= (1::Float)
|
||||
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
|
||||
@@ -500,7 +524,6 @@ renderTree' pdata rot zoom (tranx,trany) (winx,winy) tree = do
|
||||
pokeStartTicks <- SDL.ticks
|
||||
|
||||
let slist = _listShaders pdata
|
||||
setShaderUniforms rot zoom (tranx,trany) (winx,winy) slist
|
||||
|
||||
is <- F.foldM (pokeShaders slist) tree
|
||||
|
||||
@@ -534,7 +557,6 @@ renderTree pdata rot zoom (tranx,trany) (winx,winy) tree = do
|
||||
-- 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 1 $ _vaoBufferTargets $ _backVAO pdata
|
||||
bindArrayBuffers nTriVs $ _vaoBufferTargets $ _triVAO pdata
|
||||
bindArrayBuffers nCircVs $ _vaoBufferTargets $ _circVAO pdata
|
||||
bindArrayBuffers nArcVs $ _vaoBufferTargets $ _arcVAO pdata
|
||||
@@ -542,18 +564,6 @@ renderTree pdata rot zoom (tranx,trany) (winx,winy) tree = do
|
||||
bindArrayBuffers nTextVs $ _vaoBufferTargets $ _textVAO pdata
|
||||
bindArrayBuffers nEllVs $ _vaoBufferTargets $ _ellipseVAO pdata
|
||||
|
||||
depthFunc $= Just Less
|
||||
|
||||
currentProgram $= Just (fst $ _backShader pdata)
|
||||
bindVertexArrayObject $= Just (_vao $ _backVAO pdata)
|
||||
let backPtr = (\(_,x,_) -> x) $ head $ _vaoBufferTargets $ _backVAO pdata
|
||||
backPtr2 = (\(_,x,_) -> x) $ (_vaoBufferTargets $ _backVAO pdata) !! 1
|
||||
pokeFourOff backPtr 0 (tranx,trany,rot,zoom)
|
||||
pokeTwoOff backPtr2 0 (winx,winy)
|
||||
textureBinding Texture2D $= Just (_textures pdata !! 1)
|
||||
drawArrays Points (fromIntegral 0) (fromIntegral 1)
|
||||
|
||||
depthFunc $= Just Lequal
|
||||
|
||||
-- draw triangles
|
||||
currentProgram $= Just (fst $ _basicShader pdata)
|
||||
|
||||
Reference in New Issue
Block a user