Cleanup render preload somewhat

This commit is contained in:
2023-03-24 01:10:53 +00:00
parent 8f727c70cf
commit 1aaafcdc5a
4 changed files with 55 additions and 90 deletions
+26 -33
View File
@@ -108,39 +108,39 @@ doDrawing' win pdata u = do
setViewportSize (round winx `div` resFact) (round winy `div` resFact)
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase ._1 . unFBO)
glDepthMask GL_TRUE
-- the following clear may not be necessary
withArray [0, 0, 0, 1] $ \ptr ->
glClearNamedFramebufferfv
(pdata ^. fboBase . _1 . unFBO)
GL_COLOR
0
ptr
glDisable GL_BLEND
glDepthFunc GL_LESS
with 1 $ \ptr ->
glClearNamedFramebufferfv
(pdata ^. fboBase . _1 . unFBO)
GL_DEPTH
0
ptr
glDepthFunc GL_LESS
-- draw wall occlusions from the camera's point of view
glUseProgram (pdata ^. lightingWallShadShader . shaderUINT)
glProgramUniform3f
(pdata ^. lightingWallShadShader . shaderUINT)
0
vfx
vfy
20
glProgramUniform1f
(pdata ^. lightingWallShadShader . shaderUINT)
1
1000
glBindVertexArray $ pdata ^. lightingWallShadShader . shaderVAO . vaoName
unless (debugOn Remove_LOS cfig) $
unless (debugOn Remove_LOS cfig) $ do
glUseProgram (pdata ^. lightingWallShadShader . shaderUINT)
glProgramUniform3f
(pdata ^. lightingWallShadShader . shaderUINT)
0
vfx
vfy
20
glProgramUniform1f
(pdata ^. lightingWallShadShader . shaderUINT)
1
1000
glBindVertexArray $ pdata ^. lightingWallShadShader . shaderVAO . vaoName
glDrawArrays
(_unPrimitiveMode $ pdata ^. lightingWallShadShader . shaderPrimitive)
0
(fromIntegral trueNWalls)
-- clear normals
-- clear color and normals
withArray [0, 0, 0, 1] $ \ptr ->
glClearNamedFramebufferfv
(pdata ^. fboBase . _1 . unFBO)
GL_COLOR
0
ptr
withArray [0, 0, 0, 0] $ \ptr ->
glClearNamedFramebufferfv
(pdata ^. fboBase . _1 . unFBO)
@@ -148,34 +148,26 @@ doDrawing' win pdata u = do
2
ptr
--draw walls onto base buffer
glDisable GL_BLEND
-- maybe cull faces? maybe do this before?
--glEnable GL_CULL_FACE
--glCullFace GL_BACK
glEnable GL_CULL_FACE
glCullFace GL_BACK
glUseProgram (pdata ^. wallShader . shaderUINT)
glBindVertexArray $ pdata ^. wallShader . shaderVAO . vaoName
glDrawArrays
(_unPrimitiveMode $ pdata ^. wallShader . shaderPrimitive)
0
(fromIntegral trueNWalls)
--glDisable GL_CULL_FACE
-- if cfig ^. graphics_wall_textured
-- then renderTextureWalls pdata nWalls
-- else renderBlankWalls pdata nWalls
--draw object pictures onto base buffer
--draw object pictures onto base buffer (are there any?!)
renderLayer BottomLayer shadV layerCounts
--draw object shapes onto base buffer
let fs = _shapeShader pdata
glUseProgram (_shaderUINT fs)
glBindVertexArray $ fs ^. shaderVAO . vaoName
-- glEnable GL_CULL_FACE
-- glCullFace GL_BACK
glDrawElements
(_unPrimitiveMode $ _shaderPrimitive fs)
(fromIntegral nIndices)
GL_UNSIGNED_SHORT
nullPtr
glDisable GL_CULL_FACE
--draw floor onto base buffer
glUseProgram (pdata ^. floorShader . shaderUINT)
glBindVertexArray $ pdata ^. floorShader . shaderVAO . vaoName
@@ -183,6 +175,7 @@ doDrawing' win pdata u = do
(_unPrimitiveMode $ pdata ^. floorShader . shaderPrimitive)
0
(fromIntegral nFls)
glDisable GL_CULL_FACE
glEnable GL_BLEND
--draw lightmap into its own buffer
createLightMap
+16 -34
View File
@@ -46,41 +46,27 @@ preloadRender = do
-- setup shape geometry/cap VBO and two VAOs
shVBO <- setupVBO nShapeVerxComp
shPosVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray shPosVAOname
glVertexArrayVertexBuffer shPosVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp)
setupVertexAttribPointer shPosVAOname 0 4 0
let shPosVAO = VAO{_vaoName = shPosVAOname}
shPosVAO <- setupVAOUsingVBO [4] shVBO
shEBO <- setupEBO shPosVAO
-- note the shape shader vao is distinct from the position vao, but they
-- share an EBO
shapeshader <- makeShaderUsingVBO "shape/basic" [vert, frag] shapeVerxSizes pmTriangles shVBO
glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. eboName)
--setup silhouette edge VAO
shEBO' <- setupEBO shPosVAO
shEdgeVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray shEdgeVAOname
glVertexArrayVertexBuffer shEdgeVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp)
setupVertexAttribPointer shEdgeVAOname 0 4 0
--setup ebo for silhouette edges
silEBOname <- mglCreate glCreateBuffers
silEBOptr <- mallocArray numDrawableElements
glVertexArrayElementBuffer shEdgeVAOname silEBOname
glNamedBufferData
silEBOname
( fromIntegral $ glushortSize * numDrawableElements)
nullPtr
GL_STREAM_DRAW
let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr}
shEdgeVAO = VAO{_vaoName = shEdgeVAOname}
shedgevao <- setupVAOUsingVBO [4] shVBO
shedgeebo <- setupEBO shedgevao
let wallverxstrd = 8
wallvbo <- setupVBO wallverxstrd
lightingWallShadShad <-
makeShaderUsingVBO "lighting/wallShadow" [vert, geom, frag] [4] pmPoints wallvbo
makeShaderUsingVBO "lighting/wallShadow" [vert, geom] [4] pmPoints wallvbo
lightingCapShad <-
makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO
lightingLineShadowShad <-
makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shEdgeVAO
makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
shadowedgeshader <-
makeShaderUsingVAO "shadow/edge" [vert, geom] pmLinesAdjacency shEdgeVAO
makeShaderUsingVAO "shadow/edge" [vert, geom] pmLinesAdjacency shedgevao
shadowcapshader <-
makeShaderUsingVAO "shadow/cap" [vert, geom] pmTriangles shPosVAO
shadowwallshader <-
@@ -93,9 +79,6 @@ preloadRender = do
-- 2D draw shaders
bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] [3, 4] pmTriangles
bslista <- makeShaderUsingVBO "shape/basic" [vert, frag] shapeVerxSizes pmTriangles shVBO
glVertexArrayElementBuffer (bslista ^. shaderVAO . vaoName) (shEBO' ^. eboName)
--glVertexArrayElementBuffer (bslista ^. shaderVAO . vaoName) shEBOname
aslist <- makeShaderVBO "dualTwoD/arc" [vert, frag] [3, 4, 3] pmTriangles
eslist <- makeShaderVBO "dualTwoD/ellipse" [vert, geom, frag] [3, 4] pmTriangles
cslist <-
@@ -131,8 +114,7 @@ preloadRender = do
let cloudverxsizes = [4,4,4,4]
cloudvbo <- setupVBO (sum cloudverxsizes)
(cloudshader, cloudebo)
<- makeShaderEBO "cloud/basic" [vert, frag] cloudverxsizes (sum cloudverxsizes)
pmTriangles cloudvbo
<- makeShaderEBO "cloud/basic" [vert, frag] cloudverxsizes pmTriangles cloudvbo
framebuf2 <- setupTextureFramebuffer 800 600
framebuf3 <- setupTextureFramebuffer 800 600
@@ -171,9 +153,9 @@ preloadRender = do
return $
RenderData
{ _pictureShaders = shadV
, _shapeShader = bslista -- & shaderVAO' .~ shPosColVAO
, _shapeEBO = shEBO'
, _silhouetteEBO = silEBO
, _shapeShader = shapeshader -- & shaderVAO' .~ shPosColVAO
, _shapeEBO = shEBO
, _silhouetteEBO = shedgeebo
, _lightingCapShader = lightingCapShad
, _lightingLineShadowShader = lightingLineShadowShad
, _lightingWallShadShader = lightingWallShadShad
-4
View File
@@ -67,10 +67,6 @@ renderLightingNoShadows positiontexture normaltexture lightPoints pdata = do
GL_COLOR
0
ptr
-- for each of the lights:
-- 1. stencil out the shadows from this light's point of view
-- 2. calculate lighting based on each fragment's position
-- to consider: adding normals/a "material" for each fragment
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
glEnable GL_STENCIL_TEST
glStencilOpSeparate GL_FRONT GL_KEEP GL_KEEP GL_INCR_WRAP
+13 -19
View File
@@ -8,7 +8,7 @@ module Shader.Compile (
makeShaderSized,
makeShaderUsingVAO,
setupVAO,
setupVAOvbo,
setupVAOUsingVBO,
setupVAOvbo',
setupEBO,
setupVertexAttribPointer,
@@ -59,17 +59,14 @@ makeShaderEBO ::
[GLenum] ->
-- | The input vertex sizes
[Int] ->
-- | The stride
Int ->
PrimitiveMode ->
VBO ->
IO (Shader, EBO)
makeShaderEBO s shaderlist sizes strd pm vbo = do
prog <- makeSourcedShader s shaderlist
vao <- setupVAOvbo sizes strd vbo
ebo <- setupEBO vao
return
( Shader prog pm vao
makeShaderEBO s shaderlist sizes pm vbo = do
shad <- makeShaderUsingVBO s shaderlist sizes pm vbo
ebo <- setupEBO (shad ^. shaderVAO)
glVertexArrayElementBuffer (shad ^. shaderVAO . vaoName) (ebo ^. eboName)
return ( shad
, ebo
)
@@ -84,10 +81,7 @@ makeShaderUsingVBO ::
VBO ->
IO Shader
makeShaderUsingVBO s shaderlist sizes pm vbo = do
let strd = vbo ^. vboVertexSize
when (strd < sum sizes) $
error "Tried to assign vertex attributes to VBO with too small a stride."
vao <- setupVAOvbo sizes strd vbo
vao <- setupVAOUsingVBO sizes vbo
makeShaderUsingVAO s shaderlist pm vao
setupVBO :: Int -> IO VBO
@@ -205,15 +199,15 @@ setupVAOvbo' sizes strd vbo = do
{ _vaoName = vaoname
}
setupVAOvbo :: [Int] -> Int -> VBO -> IO VAO
setupVAOvbo sizes strd vbo = do
setupVAOUsingVBO :: [Int] -> VBO -> IO VAO
setupVAOUsingVBO sizes vbo = do
let strd = vbo ^. vboVertexSize
when (strd < sum sizes) $
error "Tried to assign vertex attributes to VBO with too small a stride."
vaoname <- mglCreate glCreateVertexArrays
glBindVertexArray vaoname
setupVertexAttribs vbo vaoname sizes strd
return $
VAO
{ _vaoName = vaoname
}
return VAO { _vaoName = vaoname }
setupEBO :: VAO -> IO EBO
setupEBO vao = do