Cleanup window buffers

This commit is contained in:
2025-11-11 18:08:55 +00:00
parent ceba6fd533
commit f136d0cd19
4 changed files with 26 additions and 38 deletions
+3 -6
View File
@@ -42,20 +42,17 @@ data RenderData = RenderData
, _fboLighting :: (FBO, TO) , _fboLighting :: (FBO, TO)
, _rboBaseBloom :: GLuint -- RenderbufferObject id , _rboBaseBloom :: GLuint -- RenderbufferObject id
, _matUBO :: GLuint -- BufferObject id , _matUBO :: GLuint -- BufferObject id
, _winSSBO :: GLuint -- , _winSSBO :: GLuint
, _wallSSBO :: GLuint -- , _wallSSBO :: GLuint
, _shapeSSBO :: GLuint , _shapeSSBO :: GLuint
, _ishapeSSBO :: GLuint , _ishapeSSBO :: GLuint
-- , _ieshapeSSBO :: GLuint
-- , _lightsUBO :: GLuint -- BufferObject id
, _vboWindows :: VBO
, _vboShapes :: VBO , _vboShapes :: VBO
, _floorVBO :: VBO , _floorVBO :: VBO
, _floorShader :: Shader , _floorShader :: Shader
, _chasmVBO :: VBO , _chasmVBO :: VBO
, _chasmShader :: Shader , _chasmShader :: Shader
, _winVBO :: VBO
, _wallVBO :: VBO , _wallVBO :: VBO
-- , _wallShader :: Shader
, _cloudVBO :: VBO , _cloudVBO :: VBO
, _cloudShader :: Shader , _cloudShader :: Shader
, _cloudEBO :: UintBO , _cloudEBO :: UintBO
+5 -7
View File
@@ -69,7 +69,7 @@ doDrawing' win pdata u = do
wp wp
) )
( pokeWallsWindows ( pokeWallsWindows
(pdata ^. vboWindows . vboPtr) (pdata ^. winVBO . vboPtr)
(pdata ^. wallVBO . vboPtr) (pdata ^. wallVBO . vboPtr)
windowPoints windowPoints
wallsToPoke wallsToPoke
@@ -107,10 +107,11 @@ doDrawing' win pdata u = do
] ]
-- set the coordinate uniform ready for drawing elements using world coordinates -- set the coordinate uniform ready for drawing elements using world coordinates
bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO) bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO)
glNamedBufferSubData (pdata ^. winSSBO) 0 glNamedBufferSubData (pdata ^. winVBO . vboName) 0
(fromIntegral $ nWins * sizeOf (0::Float) * 8) (fromIntegral $ nWins * sizeOf (0::Float) * 8)
(pdata ^. vboWindows . vboPtr) (pdata ^. winVBO . vboPtr)
glNamedBufferSubData (pdata ^. wallSSBO) 0 -- bufferFloatBO function
glNamedBufferSubData (pdata ^. wallVBO . vboName) 0
(fromIntegral $ trueNWalls * sizeOf (0::Float) * 8) (fromIntegral $ trueNWalls * sizeOf (0::Float) * 8)
(pdata ^. wallVBO . vboPtr) (pdata ^. wallVBO . vboPtr)
glNamedBufferSubData (pdata ^. shapeSSBO) 0 glNamedBufferSubData (pdata ^. shapeSSBO) 0
@@ -120,9 +121,6 @@ doDrawing' win pdata u = do
(fromIntegral $ nIndices * (sizeOf (0::GLuint))) (fromIntegral $ nIndices * (sizeOf (0::GLuint)))
(pdata ^. shapeEBO . uiboPtr) (pdata ^. shapeEBO . uiboPtr)
bufferEBO (pdata ^. silhouetteEBO) nSilIndices bufferEBO (pdata ^. silhouetteEBO) nSilIndices
-- glNamedBufferSubData (pdata ^. ieshapeSSBO) 0
-- (fromIntegral $ nSilIndices * (sizeOf (0::GLuint)))
-- (pdata ^. silhouetteEBO . uiboPtr)
setViewport _gr_world_res cfig setViewport _gr_world_res cfig
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO) glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
glDepthMask GL_TRUE glDepthMask GL_TRUE
+12 -19
View File
@@ -43,16 +43,22 @@ preloadRender = do
let winssbosize = sizeOf (0::Float) * 8 * 1024 let winssbosize = sizeOf (0::Float) * 8 * 1024
glNamedBufferStorage winssbo (fromIntegral winssbosize) nullPtr GL_DYNAMIC_STORAGE_BIT glNamedBufferStorage winssbo (fromIntegral winssbosize) nullPtr GL_DYNAMIC_STORAGE_BIT
glBindBufferBase GL_SHADER_STORAGE_BUFFER 1 winssbo glBindBufferBase GL_SHADER_STORAGE_BUFFER 1 winssbo
winptr <- mallocBytes winssbosize
let winvbo = VBO winssbo winptr 8
let wallsn = 4096
wallssbo <- mglCreate glCreateBuffers wallssbo <- mglCreate glCreateBuffers
let wallssbosize = sizeOf (0::Float) * 8 * 2048 let wallssbosize = sizeOf (0::Float) * 8 * wallsn
glNamedBufferStorage wallssbo (fromIntegral wallssbosize) nullPtr GL_DYNAMIC_STORAGE_BIT glNamedBufferStorage wallssbo (fromIntegral wallssbosize) nullPtr GL_DYNAMIC_STORAGE_BIT
glBindBufferBase GL_SHADER_STORAGE_BUFFER 2 wallssbo glBindBufferBase GL_SHADER_STORAGE_BUFFER 2 wallssbo
wallssboptr <- mallocBytes wallssbosize
let wallvbo = VBO wallssbo wallssboptr 8
shapessbo <- mglCreate glCreateBuffers shapessbo <- mglCreate glCreateBuffers
let shapessbosize = fromIntegral (sizeOf (0::Float) * 12) * 65536 let shapessbosize = fromIntegral (sizeOf (0::Float) * 12) * 65536
glNamedBufferStorage shapessbo shapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT glNamedBufferStorage shapessbo shapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
glBindBufferBase GL_SHADER_STORAGE_BUFFER 3 shapessbo glBindBufferBase GL_SHADER_STORAGE_BUFFER 3 shapessbo
ishapessbo <- mglCreate glCreateBuffers ishapessbo <- mglCreate glCreateBuffers
let ishapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536) let ishapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536)
glNamedBufferStorage ishapessbo ishapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT glNamedBufferStorage ishapessbo ishapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
@@ -70,7 +76,6 @@ preloadRender = do
wallpull <- makeShaderUsingVAO "pull/wall" [vert,frag] pmTriangles (VAO dummyvao) wallpull <- makeShaderUsingVAO "pull/wall" [vert,frag] pmTriangles (VAO dummyvao)
-- setup shape geometry/cap VBO and two VAOs
putStrLn "Setup shape VBO, VAO, EBO" putStrLn "Setup shape VBO, VAO, EBO"
shVBO <- setupVBO shapeVerxSize shVBO <- setupVBO shapeVerxSize
shPosVAO <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO shPosVAO <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO
@@ -86,30 +91,17 @@ preloadRender = do
shVBO shVBO
glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. uiboName) glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. uiboName)
--setup silhouette edge VAO
-- putStrLn "Setup silhouette VAO, EBO"
-- shedgevao <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO
-- shedgeebo <- setupEBO shedgevao
putStrLn "Setup wall/windows VBO, VAO, EBO, shader" putStrLn "Setup wall/windows VBO, VAO, EBO, shader"
let wallverxstrd = 8 -- winvbo <- setupVBO (floatSize * 8)
wallvbo <- setupVBO (floatSize * wallverxstrd)
winvbo <- setupVBO (floatSize * 8)
-- wallshader <- makeShaderUsingVBO "wall/basic" [vert, geom, frag] (toFloatVAs [4, 4]) pmPoints wallvbo
putStrLn "Setup lighting shaders" putStrLn "Setup lighting shaders"
lightingWallShadShad <- lightingWallShadShad <-
--makeShaderUsingVBO "lighting/wallShadow" [vert, geom] (toFloatVAs [4]) pmPoints wallvbo
makeShaderUsingVAO "lighting/wallShadow" [vert] pmTriangles (VAO dummyvao) makeShaderUsingVAO "lighting/wallShadow" [vert] pmTriangles (VAO dummyvao)
lightingCapShad <- lightingCapShad <-
--makeShaderUsingVAO "lighting/cap" [vert, geom] pmTriangles shPosVAO
makeShaderUsingVAO "lighting/cap" [vert] pmTriangles (VAO dummyvao) makeShaderUsingVAO "lighting/cap" [vert] pmTriangles (VAO dummyvao)
lightingLineShadowShad <- lightingLineShadowShad <-
--makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
makeShaderUsingVAO "lighting/lineShadow" [vert] pmTriangles (VAO dummyvao) makeShaderUsingVAO "lighting/lineShadow" [vert] pmTriangles (VAO dummyvao)
ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles
(VAO dummyvao) (VAO dummyvao)
-- makeShaderUsingVBO "ceiling/stencil" [vert, geom] (toFloatVAs [4]) pmPoints wallvbo
putStrLn "Setup 2D shaders" putStrLn "Setup 2D shaders"
bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] (toFloatVAs [3, 4]) pmTriangles bslist <- makeShaderVBO "dualTwoD/basic" [vert, frag] (toFloatVAs [3, 4]) pmTriangles
@@ -229,19 +221,20 @@ preloadRender = do
, _fboPos = fboPosName , _fboPos = fboPosName
, _rboBaseBloom = rboBaseBloomName , _rboBaseBloom = rboBaseBloomName
, _matUBO = theUBO , _matUBO = theUBO
, _winSSBO = winssbo -- , _winSSBO = winssbo
, _wallSSBO = wallssbo -- , _wallSSBO = wallssbo
, _shapeSSBO = shapessbo , _shapeSSBO = shapessbo
, _ishapeSSBO = ishapessbo , _ishapeSSBO = ishapessbo
-- , _ieshapeSSBO = ieshapessbo -- , _ieshapeSSBO = ieshapessbo
-- , _lightsUBO = lightsubo -- , _lightsUBO = lightsubo
, _vboWindows = winvbo -- , _vboWindows = winvbo
, _vboShapes = shVBO , _vboShapes = shVBO
, _floorVBO = floorvbo , _floorVBO = floorvbo
, _floorShader = floorshader , _floorShader = floorshader
, _chasmVBO = chasmvbo , _chasmVBO = chasmvbo
, _chasmShader = chasmshader , _chasmShader = chasmshader
, _wallVBO = wallvbo , _wallVBO = wallvbo
, _winVBO = winvbo
-- , _wallShader = wallshader -- , _wallShader = wallshader
, _cloudVBO = cloudvbo , _cloudVBO = cloudvbo
, _cloudShader = cloudshader , _cloudShader = cloudshader
+6 -6
View File
@@ -26,12 +26,12 @@ bufferPokedVBO theVBO numVs =
(_vboPtr theVBO) (_vboPtr theVBO)
bufferEBO :: UintBO -> Int -> IO () bufferEBO :: UintBO -> Int -> IO ()
bufferEBO ebo numis = bufferEBO x i =
glNamedBufferSubData glNamedBufferSubData (x ^. uiboName) 0 (fromIntegral $ gluintSize * i) (x ^. uiboPtr)
(ebo ^. uiboName)
0 --bufferFloatBO :: VBO -> Int -> IO ()
(fromIntegral $ gluintSize * numis) --bufferFloatBO x i = undefined
(ebo ^. uiboPtr) -- glNamedBufferSubData (x ^. uiboName) 0 (fromIntegral $ gluintSize * i) (x ^. uiboPtr)
bufferShaderLayers :: MV.MVector (PrimState IO) (Shader, VBO) -> UMV.MVector (PrimState IO) Int -> IO () bufferShaderLayers :: MV.MVector (PrimState IO) (Shader, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
bufferShaderLayers shads counts = MV.imapM_ f shads bufferShaderLayers shads counts = MV.imapM_ f shads