Add trajectory to grenades, various refactoring
This commit is contained in:
+33
-28
@@ -42,16 +42,24 @@ doDrawing pdata w = do
|
||||
viewFroms@(V2 vfx vfy) = _cameraViewFrom w
|
||||
viewFrom3d = Vector3 vfx vfy 20
|
||||
shadV = _pictureShaders pdata
|
||||
lwShad = _lightingWallShadShader pdata
|
||||
-- bind as much data into vbos as feasible at this point
|
||||
-- pictures setup
|
||||
layerCounts <- UMV.replicate (6*6) 0
|
||||
shapeCounts <- UMV.replicate 3 (0 :: Int)
|
||||
-- attempt to do this poking in parallel
|
||||
nWalls <- MP.bindM3 (\ _ a _ -> return a)
|
||||
-- pictures poking
|
||||
-- count mutable vectors setup
|
||||
layerCounts <- UMV.replicate (6*6) 0
|
||||
shapeCounts <- UMV.replicate 3 (0 :: Int)
|
||||
wlwiflCounts <- UMV.replicate 3 (0 :: Int)
|
||||
-- attempt to poke in parallel
|
||||
MP.bindM3 (\ _ _ _ -> return ())
|
||||
( pokeBindFoldableLayer shadV layerCounts $ worldPictures w )
|
||||
-- poke wall points and colors
|
||||
( poke224s (shadVBOptr $ _wallTextureShader pdata) wallPointsCol )
|
||||
( pokeWallsWindowsFloor
|
||||
(shadVBOptr $ _wallTextureShader pdata)
|
||||
(shadVBOptr $ _windowShader pdata)
|
||||
(shadVBOptr $ _textureArrayShader pdata)
|
||||
wlwiflCounts
|
||||
wallPointsCol
|
||||
windowPoints
|
||||
(_floorTiles w)
|
||||
)
|
||||
( pokeShape
|
||||
(_vboPtr $ _vaoVBO $ _shadVAO $ _shapeShader pdata)
|
||||
(_eboPtr $ _shapeEBO pdata)
|
||||
@@ -62,10 +70,15 @@ doDrawing pdata w = do
|
||||
nShapeVs <- UMV.read shapeCounts 0
|
||||
nIndices <- UMV.read shapeCounts 1
|
||||
nSilIndices <- UMV.read shapeCounts 2
|
||||
nWalls <- UMV.read wlwiflCounts 0
|
||||
nWins <- UMV.read wlwiflCounts 1
|
||||
nFls <- UMV.read wlwiflCounts 2
|
||||
-- bind wall points, silhouette data, surface geometry
|
||||
uncurry bindShaderBuffers $ unzip
|
||||
[ ( _wallTextureShader pdata, nWalls)
|
||||
, (_shapeShader pdata, nShapeVs)
|
||||
, (_windowShader pdata, nWins)
|
||||
, (_textureArrayShader pdata, nFls)
|
||||
]
|
||||
bindBuffer ElementArrayBuffer $= Just (_ebo $ _shapeEBO pdata)
|
||||
bufferSubData
|
||||
@@ -89,9 +102,13 @@ doDrawing pdata w = do
|
||||
clear [ColorBuffer,DepthBuffer]
|
||||
depthFunc $= Just Less
|
||||
-- draw wall occlusions from the camera's point of view
|
||||
currentProgram $= Just (_shadProg $ _lightingOccludeShader pdata)
|
||||
uniform (head $ _shadUnis $ _lightingOccludeShader pdata) $= viewFrom3d
|
||||
drawShader (_lightingOccludeShader pdata) nWalls
|
||||
currentProgram $= Just (_shadProg lwShad)
|
||||
uniform (head $ _shadUnis lwShad) $= viewFrom3d
|
||||
bindVertexArrayObject $= Just (_vao $ _shadVAO lwShad)
|
||||
glDrawArrays
|
||||
(marshalEPrimitiveMode $ _shadPrim lwShad)
|
||||
0
|
||||
(fromIntegral nWalls)
|
||||
--draw walls onto base buffer
|
||||
if w ^. config . wall_textured
|
||||
then renderTextureWalls pdata nWalls
|
||||
@@ -108,9 +125,8 @@ doDrawing pdata w = do
|
||||
GL_UNSIGNED_SHORT
|
||||
nullPtr
|
||||
--draw floor onto base buffer
|
||||
nTextArrayVs <- pokePoint33s (shadVBOptr $ _textureArrayShader pdata) (_floorTiles w)
|
||||
bindShaderBuffers [_textureArrayShader pdata] [nTextArrayVs]
|
||||
drawShader (_textureArrayShader pdata) nTextArrayVs
|
||||
-- nTextArrayVs <- pokePoint33s (shadVBOptr $ _textureArrayShader pdata) (_floorTiles w)
|
||||
drawShader (_textureArrayShader pdata) nFls
|
||||
--draw lightmap into its own buffer
|
||||
bindFramebuffer Framebuffer $= fst (_fboLighting pdata)
|
||||
createLightMap pdata lightPoints nWalls nSilIndices nIndices (snd $ snd $ _fboBase pdata)
|
||||
@@ -154,14 +170,15 @@ doDrawing pdata w = do
|
||||
drawBuffers $= [FBOColorAttachment 0,NoBuffers]
|
||||
clear [ColorBuffer]
|
||||
renderLayer 2 shadV layerCounts
|
||||
renderWindows pdata windowPoints
|
||||
--renderWindows pdata windowPoints
|
||||
drawShader (_windowShader pdata) nWins
|
||||
when (_cloud_shadows $ _config w) $ do
|
||||
----render transparency depths
|
||||
depthMask $= Enabled
|
||||
blend $= Disabled
|
||||
drawBuffers $= [NoBuffers,FBOColorAttachment 1]
|
||||
renderLayer 2 shadV layerCounts
|
||||
renderWindows pdata windowPoints
|
||||
drawShader (_windowShader pdata) nWins
|
||||
----draw lightmap for cloud buffer
|
||||
depthMask $= Disabled
|
||||
blend $= Enabled
|
||||
@@ -247,18 +264,6 @@ renderBlankWalls pdata nWalls = do
|
||||
drawShader (_wallBlankShader pdata) nWalls
|
||||
cullFace $= Nothing
|
||||
|
||||
renderWindows
|
||||
:: RenderData
|
||||
-> [((Point2,Point2),Point4)] -- ^ List: wall positions and color
|
||||
-> IO ()
|
||||
renderWindows pdata wps = do
|
||||
n <- poke224s (shadVBOptr $ _windowShader pdata) wps
|
||||
bindShaderBuffers [_windowShader pdata] [n]
|
||||
currentProgram $= Just (_shadProg $ _windowShader pdata)
|
||||
--cullFace $= Just Back
|
||||
drawShader (_windowShader pdata) n
|
||||
--cullFace $= Nothing
|
||||
|
||||
renderTextureWalls
|
||||
:: RenderData
|
||||
-> Int -- ^ number of walls
|
||||
|
||||
Reference in New Issue
Block a user