Use ssbos for edge shadows

Seems quite slow as is
This commit is contained in:
2025-11-11 16:23:39 +00:00
parent 219c574931
commit c5034b3c4c
5 changed files with 102 additions and 9 deletions
+1
View File
@@ -46,6 +46,7 @@ data RenderData = RenderData
, _wallSSBO :: GLuint
, _shapeSSBO :: GLuint
, _ishapeSSBO :: GLuint
, _ieshapeSSBO :: GLuint
-- , _lightsUBO :: GLuint -- BufferObject id
, _vboWindows :: VBO
, _vboShapes :: VBO
+3
View File
@@ -138,6 +138,9 @@ doDrawing' win pdata u = do
glNamedBufferSubData (pdata ^. ishapeSSBO) 0
(fromIntegral $ nIndices * (sizeOf (0::GLuint)))
(pdata ^. shapeEBO . eboPtr)
glNamedBufferSubData (pdata ^. ieshapeSSBO) 0
(fromIntegral $ nSilIndices * (sizeOf (0::GLuint)))
(pdata ^. silhouetteEBO . eboPtr)
setViewport _gr_world_res cfig
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
glDepthMask GL_TRUE
+8 -1
View File
@@ -58,6 +58,11 @@ preloadRender = do
glNamedBufferStorage ishapessbo ishapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
glBindBufferBase GL_SHADER_STORAGE_BUFFER 4 ishapessbo
ieshapessbo <- mglCreate glCreateBuffers
let ieshapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536)
glNamedBufferStorage ieshapessbo ieshapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
glBindBufferBase GL_SHADER_STORAGE_BUFFER 5 ieshapessbo
dummyvao <- mglCreate glGenVertexArrays
winpull <- makeShaderUsingVAO "pull/window" [vert,frag] pmTriangles (VAO dummyvao)
@@ -98,7 +103,8 @@ preloadRender = do
--makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO
makeShaderUsingVAO "lighting/cap" [vert] pmTriangles (VAO dummyvao)
lightingLineShadowShad <-
makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
--makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
makeShaderUsingVAO "lighting/lineShadow" [vert] pmTriangles shedgevao
ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles
(VAO dummyvao)
@@ -226,6 +232,7 @@ preloadRender = do
, _wallSSBO = wallssbo
, _shapeSSBO = shapessbo
, _ishapeSSBO = ishapessbo
, _ieshapeSSBO = ieshapessbo
-- , _lightsUBO = lightsubo
, _vboWindows = winvbo
, _vboShapes = shVBO
+11 -6
View File
@@ -186,12 +186,17 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li
glUseProgram (_shaderUINT llinesShad)
glUniform3f 0 x y z
glUniform1f 1 rad
glBindVertexArray (_vaoName $ _shaderVAO llinesShad)
glDrawElements
(_unPrimitiveMode $ _shaderPrimitive llinesShad)
(fromIntegral nSils)
GL_UNSIGNED_INT
nullPtr
--glBindVertexArray (_vaoName $ _shaderVAO llinesShad)
glBindVertexArray (pdata ^. dummyVAO . vaoName)
glDrawArrays
GL_TRIANGLES
0
((fromIntegral nSils * 6) `div` 4)
--glDrawElements
-- (_unPrimitiveMode $ _shaderPrimitive llinesShad)
-- (fromIntegral nSils)
-- GL_UNSIGNED_INT
-- nullPtr
--draw caps on the near plane as required
glEnable GL_CULL_FACE
glCullFace GL_FRONT