From ceba6fd53376ada7948b15eb28de3bf6b0631131 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 11 Nov 2025 17:45:30 +0000 Subject: [PATCH] Cleanup some silhouette edge buffers --- src/Data/Preload/Render.hs | 8 ++++---- src/Dodge/Render.hs | 38 ++++++++++---------------------------- src/Preload/Render.hs | 15 ++++++++------- src/Shader/Bind.hs | 6 +++--- src/Shader/Compile.hs | 10 ++++------ src/Shader/Data.hs | 14 ++++++++++---- 6 files changed, 39 insertions(+), 52 deletions(-) diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index e6600df81..169cfee5c 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -27,8 +27,8 @@ data RenderData = RenderData , _barrelShader :: (Shader,VBO) , _grayscaleShader :: Shader , _shapeShader :: Shader - , _shapeEBO :: EBO - , _silhouetteEBO :: EBO + , _shapeEBO :: UintBO + , _silhouetteEBO :: UintBO , _pictureShaders :: MV.MVector (PrimState IO) (Shader,VBO) , _fbo2 :: (FBO, TO) , _fbo3 :: (FBO, TO) @@ -46,7 +46,7 @@ data RenderData = RenderData , _wallSSBO :: GLuint , _shapeSSBO :: GLuint , _ishapeSSBO :: GLuint - , _ieshapeSSBO :: GLuint +-- , _ieshapeSSBO :: GLuint -- , _lightsUBO :: GLuint -- BufferObject id , _vboWindows :: VBO , _vboShapes :: VBO @@ -58,7 +58,7 @@ data RenderData = RenderData -- , _wallShader :: Shader , _cloudVBO :: VBO , _cloudShader :: Shader - , _cloudEBO :: EBO + , _cloudEBO :: UintBO , _screenTextureVAO :: VAO , _dummyVAO :: VAO } diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 3bd0e2585..f91b1bfc5 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -77,36 +77,33 @@ doDrawing' win pdata u = do ( pokeShape (drawShadowsByImportance $ cfig ^. gr_shadow_size) (_vboPtr $ _vboShapes pdata) - (_eboPtr $ _shapeEBO pdata) - (_eboPtr $ _silhouetteEBO pdata) + (_uiboPtr $ _shapeEBO pdata) + (_uiboPtr $ _silhouetteEBO pdata) (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 . eboPtr)) + (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 . eboPtr)) + (pokeDust (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr)) (nCloudVs', nCloudIs') (V.fromList $ w ^. cWorld . lWorld . dusts) -- bind wall points, silhouette data, surface geometry bufferShaderLayers shadV pokeCounts mapM_ (uncurry bufferPokedVBO) - [ --(pdata ^. vboWindows, nWins) - (pdata ^. wallVBO, trueNWalls) - , (_vboShapes pdata, nShapeVs) + [ (_vboShapes pdata, nShapeVs) , (pdata ^. cloudVBO, nCloudVs) ] mapM_ (uncurry bufferEBO) [ (_cloudEBO pdata, nCloudIs) , (_shapeEBO pdata, nIndices) - , (_silhouetteEBO pdata, nSilIndices) ] -- set the coordinate uniform ready for drawing elements using world coordinates bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO) @@ -116,31 +113,16 @@ doDrawing' win pdata u = do glNamedBufferSubData (pdata ^. wallSSBO) 0 (fromIntegral $ trueNWalls * sizeOf (0::Float) * 8) (pdata ^. wallVBO . vboPtr) --- withArray --- [V4 0 0 0 (1:: Float) --- ,V4 0 0 0 0 --- ,V4 0 0 0 0 --- ,V4 1 1 0 1 --- ,V4 0 0 0 0 --- ,V4 0 0 0 0 --- ,V4 0 1 0 1 --- ,V4 0 0 0 0 --- ,V4 0 0 0 0 --- ] --- $ glNamedBufferSubData (pdata ^. shapeSSBO) 0 --- (fromIntegral $ 9 * (sizeOf (0::Float)*12)) --- withArray [0::GLuint,1,2] $ --- glNamedBufferSubData (pdata ^. ishapeSSBO) 0 --- (fromIntegral $ 3 * (sizeOf (0::GLuint))) glNamedBufferSubData (pdata ^. shapeSSBO) 0 (fromIntegral $ nShapeVs * (sizeOf (0::Float)*12)) (pdata ^. vboShapes . vboPtr) glNamedBufferSubData (pdata ^. ishapeSSBO) 0 (fromIntegral $ nIndices * (sizeOf (0::GLuint))) - (pdata ^. shapeEBO . eboPtr) - glNamedBufferSubData (pdata ^. ieshapeSSBO) 0 - (fromIntegral $ nSilIndices * (sizeOf (0::GLuint))) - (pdata ^. silhouetteEBO . eboPtr) + (pdata ^. shapeEBO . uiboPtr) + bufferEBO (pdata ^. silhouetteEBO) nSilIndices +-- glNamedBufferSubData (pdata ^. ieshapeSSBO) 0 +-- (fromIntegral $ nSilIndices * (sizeOf (0::GLuint))) +-- (pdata ^. silhouetteEBO . uiboPtr) setViewport _gr_world_res cfig glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO) glDepthMask GL_TRUE diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index ac26a3883..330347e5b 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -62,6 +62,7 @@ preloadRender = do let ieshapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536) glNamedBufferStorage ieshapessbo ieshapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT glBindBufferBase GL_SHADER_STORAGE_BUFFER 5 ieshapessbo + ieptr <- mallocArray 65536 -- so we can go back to glushort... dummyvao <- mglCreate glGenVertexArrays @@ -83,12 +84,12 @@ preloadRender = do shapeVerxAttributes pmTriangles shVBO - glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. eboName) + 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 silhouette VAO, EBO" +-- shedgevao <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO +-- shedgeebo <- setupEBO shedgevao putStrLn "Setup wall/windows VBO, VAO, EBO, shader" let wallverxstrd = 8 @@ -104,7 +105,7 @@ preloadRender = do makeShaderUsingVAO "lighting/cap" [vert] pmTriangles (VAO dummyvao) lightingLineShadowShad <- --makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao - makeShaderUsingVAO "lighting/lineShadow" [vert] pmTriangles shedgevao + makeShaderUsingVAO "lighting/lineShadow" [vert] pmTriangles (VAO dummyvao) ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles (VAO dummyvao) @@ -200,7 +201,7 @@ preloadRender = do { _pictureShaders = shadV , _shapeShader = shapeshader -- & shaderVAO' .~ shPosColVAO , _shapeEBO = shEBO - , _silhouetteEBO = shedgeebo + , _silhouetteEBO = UintBO ieshapessbo ieptr , _lightingCapShader = lightingCapShad , _lightingLineShadowShader = lightingLineShadowShad , _lightingWallShadShader = lightingWallShadShad @@ -232,7 +233,7 @@ preloadRender = do , _wallSSBO = wallssbo , _shapeSSBO = shapessbo , _ishapeSSBO = ishapessbo - , _ieshapeSSBO = ieshapessbo +-- , _ieshapeSSBO = ieshapessbo -- , _lightsUBO = lightsubo , _vboWindows = winvbo , _vboShapes = shVBO diff --git a/src/Shader/Bind.hs b/src/Shader/Bind.hs index 7258b8641..fa404ce5e 100644 --- a/src/Shader/Bind.hs +++ b/src/Shader/Bind.hs @@ -25,13 +25,13 @@ bufferPokedVBO theVBO numVs = (fromIntegral $ numVs * _vboVertexBytes theVBO) (_vboPtr theVBO) -bufferEBO :: EBO -> Int -> IO () +bufferEBO :: UintBO -> Int -> IO () bufferEBO ebo numis = glNamedBufferSubData - (ebo ^. eboName) + (ebo ^. uiboName) 0 (fromIntegral $ gluintSize * numis) - (ebo ^. eboPtr) + (ebo ^. uiboPtr) bufferShaderLayers :: MV.MVector (PrimState IO) (Shader, VBO) -> UMV.MVector (PrimState IO) Int -> IO () bufferShaderLayers shads counts = MV.imapM_ f shads diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index f0fbc5fe9..43abca32d 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -59,11 +59,11 @@ makeShaderEBO :: [VertexAttribute] -> PrimitiveMode -> VBO -> - IO (Shader, EBO) + IO (Shader, UintBO) makeShaderEBO s shaderlist sizes pm vbo = do shad <- makeShaderUsingVBO s shaderlist sizes pm vbo ebo <- setupEBO (shad ^. shaderVAO) - glVertexArrayElementBuffer (shad ^. shaderVAO . vaoName) (ebo ^. eboName) + glVertexArrayElementBuffer (shad ^. shaderVAO . vaoName) (ebo ^. uiboName) return (shad, ebo) makeShaderUsingVBO :: @@ -189,19 +189,17 @@ setupVAOUsingVBO vas vbo = do (fromIntegral strd) return VAO{_vaoName = vaoname} -setupEBO :: VAO -> IO EBO +setupEBO :: VAO -> IO UintBO setupEBO vao = do eboptr <- mallocArray 65536 -- so we can go back to glushort... eboname <- mglCreate glCreateBuffers - --glNamedBufferData glNamedBufferStorage eboname (fromIntegral $ gluintSize * 65536) nullPtr GL_DYNAMIC_STORAGE_BIT - --GL_STREAM_DRAW glVertexArrayElementBuffer (vao ^. vaoName) eboname - return $ EBO eboname eboptr + return $ UintBO eboname eboptr setupVBOVAO :: [VertexAttribute] -> IO (VAO, VBO) setupVBOVAO vas = do diff --git a/src/Shader/Data.hs b/src/Shader/Data.hs index eaea5849a..fe1f3d580 100644 --- a/src/Shader/Data.hs +++ b/src/Shader/Data.hs @@ -91,9 +91,14 @@ data FloatBO = FloatBO , _boType :: BOType } -data EBO = EBO - { _eboName :: GLuint - , _eboPtr :: Ptr GLuint +data UintBO = UintBO + { _uiboName :: GLuint + , _uiboPtr :: Ptr GLuint + } + +data SSBO a = SSBO + { _ssboName :: GLuint + , _ssboPtr :: Ptr a } -- | Datatype containing the reference to a texture object. @@ -124,7 +129,8 @@ pmPatches = PrimitiveMode GL_PATCHES makeLenses ''VAO makeLenses ''VBO -makeLenses ''EBO +makeLenses ''UintBO +makeLenses ''SSBO makeLenses ''ShaderTexture makeLenses ''Shader makeLenses ''FBO