From b1750ad028c69b99ce12c920cce5fe2117c7e987 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 9 Mar 2023 23:28:48 +0000 Subject: [PATCH] Map an "isometric" matrix to a static buffer --- src/Data/Preload/Render.hs | 1 + src/Dodge/Render.hs | 4 +++- src/Preload/Render.hs | 11 ++++++++++- src/Render.hs | 1 - src/Shader/Bind.hs | 9 --------- src/Shader/Compile.hs | 1 - 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index a31f21041..831662006 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -49,6 +49,7 @@ data RenderData = RenderData , _fboShadow :: (FBO, (TO, TO)) , _rboBaseBloom :: GLuint -- RenderbufferObject id , _matUBO :: GLuint -- BufferObject id + , _isoMatUBO :: GLuint -- BufferObject id } makeLenses ''RenderData diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index c4bc9fe7a..1e7127a8d 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -94,6 +94,7 @@ doDrawing win pdata u = do (fromIntegral $ glushortSize * nSilIndices) (_eboPtr $ _silhouetteEBO pdata) -- set the coordinate uniform ready for drawing elements using world coordinates + glBindBufferBase GL_UNIFORM_BUFFER 0 (pdata ^. matUBO) bufferUBO (pdata ^. matUBO) $ perspectiveMatrixb rot camzoom trans wins viewFroms setViewportSize (round winx `div` resFact) (round winy `div` resFact) --bindFramebuffer Framebuffer $= fst (_fboBase pdata) @@ -286,7 +287,8 @@ doDrawing win pdata u = do glDepthMask GL_FALSE glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA - bufferUBO (pdata ^. matUBO) $ isoMatrix 0 1 (V2 0 0) (V2 2 2) + --bufferUBO (pdata ^. matUBO) $ isoMatrix 0 1 (V2 0 0) (V2 2 2) + glBindBufferBase GL_UNIFORM_BUFFER 0 (pdata ^. isoMatUBO) renderLayer FixedCoordLayer shadV layerCounts renderFoldable shadV $ fixedCoordPictures u glDepthMask GL_TRUE diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index b137a13f1..57d473f54 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -5,6 +5,8 @@ module Preload.Render ( cleanUpRenderPreload, ) where +import Geometry.Data +import MatrixHelper import GLHelp import Control.Lens import Control.Monad @@ -29,6 +31,12 @@ preloadRender = do theUBO <- mglCreate glCreateBuffers glNamedBufferData theUBO 64 nullPtr GL_STREAM_DRAW glBindBufferBase GL_UNIFORM_BUFFER 0 theUBO + + isoUBO <- mglCreate glCreateBuffers + withArray (isoMatrix 0 1 (V2 0 0) (V2 2 2)) $ \ptr -> + glNamedBufferStorage isoUBO 64 ptr 0 + glBindBufferBase GL_UNIFORM_BUFFER 1 theUBO + -- setup wall points VBO, VAOs and shaders wpVBOname <- mglCreate glCreateBuffers wpVBOptr <- mallocArray (8 * numDrawableWalls) @@ -170,7 +178,7 @@ preloadRender = do >>= addTextureArray "data/texture/ayene_wooden_floor_transformed.png" -- >>= addTextureArray "data/texture/ayene_wooden_floor.png" -- bind fixed vertex data - bindShaderBuffers' [fsShad] [4, 4] + bindShaderBuffers [fsShad] [4, 4] framebuf2 <- setupTextureFramebuffer 800 600 framebuf3 <- setupTextureFramebuffer 800 600 @@ -248,6 +256,7 @@ preloadRender = do , _fboPos = fboPosName , _rboBaseBloom = rboBaseBloomName , _matUBO = theUBO + , _isoMatUBO = isoUBO } --------------------end preloadRender diff --git a/src/Render.hs b/src/Render.hs index 9d2210232..679fd1760 100644 --- a/src/Render.hs +++ b/src/Render.hs @@ -30,7 +30,6 @@ import Shader.ExtraPrimitive createLightMap :: RenderData -> [(Point3, Float, Point3)] -> -- Lights - -- | number of walls Int -> -- | number of silhoutte lines to draw diff --git a/src/Shader/Bind.hs b/src/Shader/Bind.hs index e34f75df8..1b7bff355 100644 --- a/src/Shader/Bind.hs +++ b/src/Shader/Bind.hs @@ -1,7 +1,6 @@ module Shader.Bind ( bindShaderLayers , bindShaderBuffers - , bindShaderBuffers' , bindShader ) where import Shader.Data @@ -29,10 +28,7 @@ bindShaderLayers shads counts = MV.imapM_ f shads f i shad = do let theVBO = _vaoVBO $ _shadVAO' shad stride = sum $ _vboAttribSizes theVBO - glBindBuffer GL_ARRAY_BUFFER (_vboName theVBO) VFSM.mapM_ (g stride theVBO) $ VFSM.enumFromStepN 0 1 6 -- [0..5] - --S.mapM_ (g stride theVBO) $ S.each [0..5] - where g stride theVBO lay = do numVs <- UMV.unsafeRead counts $ lay * 6 + i @@ -54,8 +50,3 @@ bindShaderBuffers :: [FullShader] -> [Int] -> IO () bindShaderBuffers = zipWithM_ f where f fs i = bindArrayBuffers i $ _vaoVBO $ _shadVAO' fs - -bindShaderBuffers' :: [FullShader] -> [Int] -> IO () -bindShaderBuffers' = zipWithM_ f - where - f fs i = bindArrayBuffers i $ _vaoVBO $ _shadVAO' fs diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index c418c0e9d..ab90f53dc 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -143,7 +143,6 @@ setupVBOSized ndraw vao sizes = do --vboName <- genObjectName --bindBuffer ArrayBuffer $= Just vboName vboname <- mglCreate glCreateBuffers - glBindBuffer GL_ARRAY_BUFFER vboname forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do setupVertexAttribPointer vao vboname loc siz strd off thePtr <- mallocArray (strd * ndraw)