Use vertex pulling for clouds
This commit is contained in:
+64
-37
@@ -61,6 +61,11 @@ doDrawing' win pdata u = do
|
||||
let wswp = wallSPics <> worldSPic cfig u
|
||||
ws = wswp ^. _1
|
||||
wp = wswp ^. _2
|
||||
nCloudVs <-
|
||||
V.foldM'
|
||||
(pokeCloud (pdata ^. cloudVBO . vboPtr))
|
||||
0
|
||||
(V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||
((nWins, trueNWalls), (nShapeVs, nIndices, nSilIndices)) <-
|
||||
MP.liftM3
|
||||
(\_ a b -> (a, b))
|
||||
@@ -83,28 +88,40 @@ doDrawing' win pdata u = do
|
||||
(0, 0, 0)
|
||||
ws
|
||||
)
|
||||
(nCloudVs', nCloudIs') <-
|
||||
-- Might want to sort the clouds based on z depth, not sure
|
||||
V.foldM'
|
||||
(pokeCloud (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||
(0, 0)
|
||||
(V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||
(nCloudVs, nCloudIs) <-
|
||||
V.foldM'
|
||||
(pokeDust (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||
(nCloudVs', nCloudIs')
|
||||
(V.fromList $ w ^. cWorld . lWorld . dusts)
|
||||
-- (nCloudVs', nCloudIs') <-
|
||||
-- -- Might want to sort the clouds based on z depth, not sure
|
||||
-- V.foldM'
|
||||
-- (pokeCloud (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||
-- (0, 0)
|
||||
-- (V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||
-- (nCloudVs, nCloudIs) <-
|
||||
-- V.foldM'
|
||||
-- (pokeDust (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||
-- (nCloudVs', nCloudIs')
|
||||
-- (V.fromList $ w ^. cWorld . lWorld . dusts)
|
||||
--nCloudVs' <-
|
||||
-- nCloudVs <-
|
||||
-- V.foldM'
|
||||
-- (pokeCloud (pdata ^. cloudVBO . vboPtr))
|
||||
-- 0
|
||||
-- (V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||
-- nCloudVs <-
|
||||
-- V.foldM'
|
||||
-- (pokeDust (pdata ^. cloudVBO . vboPtr))
|
||||
-- nCloudVs'
|
||||
-- (V.fromList $ w ^. cWorld . lWorld . dusts)
|
||||
-- bind wall points, silhouette data, surface geometry
|
||||
bufferShaderLayers shadV pokeCounts
|
||||
mapM_
|
||||
(uncurry bufferPokedVBO)
|
||||
[ (_vboShapes pdata, nShapeVs)
|
||||
, (pdata ^. cloudVBO, nCloudVs)
|
||||
-- , (pdata ^. cloudVBO, nCloudVs) should probably do it this way
|
||||
-- eventually
|
||||
]
|
||||
mapM_
|
||||
(uncurry bufferEBO)
|
||||
[ (_cloudEBO pdata, nCloudIs)
|
||||
, (_shapeEBO pdata, nIndices)
|
||||
[-- (_cloudEBO pdata, nCloudIs)
|
||||
(_shapeEBO pdata, nIndices)
|
||||
]
|
||||
-- set the coordinate uniform ready for drawing elements using world coordinates
|
||||
bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO)
|
||||
@@ -115,13 +132,20 @@ doDrawing' win pdata u = do
|
||||
glNamedBufferSubData (pdata ^. wallVBO . vboName) 0
|
||||
(fromIntegral $ trueNWalls * sizeOf (0::Float) * 8)
|
||||
(pdata ^. wallVBO . vboPtr)
|
||||
glNamedBufferSubData (pdata ^. vboShapes . vboName) 0
|
||||
(fromIntegral $ nShapeVs * shapeVerxSize)
|
||||
(pdata ^. vboShapes . vboPtr)
|
||||
-- glNamedBufferSubData (pdata ^. vboShapes . vboName) 0
|
||||
-- (fromIntegral $ nShapeVs * shapeVerxSize)
|
||||
-- (pdata ^. vboShapes . vboPtr)
|
||||
glNamedBufferSubData (pdata ^. shapeEBO . uiboName) 0
|
||||
(fromIntegral $ nIndices * (sizeOf (0::GLuint)))
|
||||
(pdata ^. shapeEBO . uiboPtr)
|
||||
bufferEBO (pdata ^. silhouetteEBO) nSilIndices
|
||||
-- withArray [0::Float,0,30,1,1,1,1,1] $
|
||||
-- glNamedBufferSubData (pdata ^. cloudVBO . vboName) 0
|
||||
-- (fromIntegral (sizeOf (0::Float)) * 8)
|
||||
glNamedBufferSubData (pdata ^. cloudVBO . vboName)
|
||||
0
|
||||
(fromIntegral $ 8 * nCloudVs * (sizeOf (0::Float)))
|
||||
(pdata ^. cloudVBO . vboPtr)
|
||||
setViewport _gr_world_res cfig
|
||||
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
|
||||
glDepthMask GL_TRUE
|
||||
@@ -169,11 +193,8 @@ doDrawing' win pdata u = do
|
||||
-- 0
|
||||
-- (fromIntegral trueNWalls)
|
||||
glUseProgram (pdata ^. pullWallShader . shaderUINT)
|
||||
glBindVertexArray $ pdata ^. dummyVAO . vaoName
|
||||
glDrawArrays
|
||||
GL_TRIANGLES
|
||||
0
|
||||
(fromIntegral trueNWalls * 6)
|
||||
--glBindVertexArray $ pdata ^. dummyVAO . vaoName
|
||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral trueNWalls * 6)
|
||||
--draw object shapes onto base buffer
|
||||
let fs = _shapeShader pdata
|
||||
glUseProgram (_shaderUINT fs)
|
||||
@@ -251,11 +272,13 @@ doDrawing' win pdata u = do
|
||||
glBlendFuncSeparate GL_ZERO GL_ONE GL_CONSTANT_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
||||
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
||||
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
||||
glDrawElements
|
||||
(pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||
(fromIntegral nCloudIs)
|
||||
GL_UNSIGNED_INT
|
||||
nullPtr
|
||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral nCloudVs * 6)
|
||||
--glDrawArrays GL_TRIANGLES 0 6
|
||||
-- glDrawElements
|
||||
-- (pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||
-- (fromIntegral nCloudIs)
|
||||
-- GL_UNSIGNED_INT
|
||||
-- nullPtr
|
||||
glDepthMask GL_TRUE
|
||||
|
||||
--setup downscale viewport for blurring bloom
|
||||
@@ -295,11 +318,13 @@ doDrawing' win pdata u = do
|
||||
0
|
||||
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
||||
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
||||
glDrawElements
|
||||
(pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||
(fromIntegral nCloudIs)
|
||||
GL_UNSIGNED_INT
|
||||
nullPtr
|
||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral nCloudVs * 6)
|
||||
--glDrawArrays GL_TRIANGLES 0 6
|
||||
---- glDrawElements
|
||||
---- (pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||
---- (fromIntegral nCloudIs)
|
||||
---- GL_UNSIGNED_INT
|
||||
---- nullPtr
|
||||
-- glEnable GL_CULL_FACE
|
||||
-- glEnable GL_DEPTH_CLAMP
|
||||
-- glCullFace GL_BACK
|
||||
@@ -327,11 +352,13 @@ doDrawing' win pdata u = do
|
||||
glUseProgram (pdata ^. cloudShader . shaderUINT)
|
||||
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
|
||||
-- glDepthMask GL_TRUE
|
||||
glDrawElements
|
||||
(pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||
(fromIntegral nCloudIs)
|
||||
GL_UNSIGNED_INT
|
||||
nullPtr
|
||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral nCloudVs * 6)
|
||||
--glDrawArrays GL_TRIANGLES 0 6
|
||||
----glDrawElements
|
||||
---- (pdata ^. cloudShader . shaderPrimitive . unPrimitiveMode)
|
||||
---- (fromIntegral nCloudIs)
|
||||
---- GL_UNSIGNED_INT
|
||||
---- nullPtr
|
||||
---
|
||||
-- glEnable GL_CULL_FACE
|
||||
-- glEnable GL_DEPTH_CLAMP
|
||||
|
||||
Reference in New Issue
Block a user