From 21f87b96d85c22ca8c461a59ea746a416edd21ed Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 14 Mar 2023 23:28:21 +0000 Subject: [PATCH] Try to centralize the number of components per vertex in shapes --- src/Data/Preload/Render.hs | 2 +- src/Dodge/Render.hs | 10 +++------- src/Preload/Render.hs | 24 +++++++++++++----------- src/Shader/Compile.hs | 10 +++------- src/Shader/Data.hs | 8 +++----- src/Shader/Poke.hs | 2 +- src/Shape/Data.hs | 3 +++ 7 files changed, 27 insertions(+), 32 deletions(-) diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 11ad1431d..e0e85fce2 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -54,7 +54,7 @@ data RenderData = RenderData , _fboShadow :: (FBO, (TO, TO)) , _rboBaseBloom :: GLuint -- RenderbufferObject id , _matUBO :: GLuint -- BufferObject id - , _isoMatUBO :: GLuint -- BufferObject id + , _orthonormalMatUBO :: GLuint -- BufferObject id , _lightsUBO :: GLuint -- BufferObject id , _vboWalls :: VBO , _vboWindows :: VBO diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index aa7b4115b..6b40b0c68 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -116,8 +116,6 @@ doDrawing' win pdata u = do glClear $ sum [GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT] glDepthFunc GL_LESS -- draw wall occlusions from the camera's point of view --- glEnable GL_CULL_FACE --- glCullFace GL_BACK glUseProgram (pdata ^. lightingWallShadShader . shadName) glUniform3f (pdata ^?! lightingWallShadShader . shadUnis' . ix 0) vfx vfy 20 glUniform1f (pdata ^?! lightingWallShadShader . shadUnis' . ix 1) 100 @@ -139,7 +137,7 @@ doDrawing' win pdata u = do glUseProgram (_shadName fs) glBindVertexArray $ fs ^. shadVAO . vaoName glDrawElements - (marshalEPrimitiveMode $ _shadPrim' $ fs) + (marshalEPrimitiveMode $ _shadPrim' fs) (fromIntegral nIndices) GL_UNSIGNED_SHORT nullPtr @@ -193,9 +191,6 @@ doDrawing' win pdata u = do glDepthFunc GL_LEQUAL glDepthMask GL_FALSE glClearColor 0.5 0.5 0.5 0 - --glBlendFunc GL_SRC_ALPHASaturate,One) - --blendColor $= Color4 0.5 0.5 0.5 0.5 - --glBlendFuncSeparate GL_SRC_ALPHASaturate,One) , (One,GL_ONE_MINUS_SRC_ALPHA)) glBlendFuncSeparate GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_ONE GL_ONE_MINUS_SRC_ALPHA withArray [GL_COLOR_ATTACHMENT0, GL_NONE] $ \ptr -> glDrawBuffers 2 ptr glClear GL_COLOR_BUFFER_BIT @@ -224,6 +219,7 @@ doDrawing' win pdata u = do (drawCPUShadows pdata ws) glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE glClearColor 0 0 0 0 + glInvalidateBufferData (pdata ^. vboShapes . vboName) --apply lightmap to cloud buffer glClearColor 0 0 0 0 glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboCloud pdata))) @@ -279,7 +275,7 @@ doDrawing' win pdata u = do glDepthMask GL_FALSE glEnable GL_BLEND glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA - glBindBufferBase GL_UNIFORM_BUFFER 0 (pdata ^. isoMatUBO) + glBindBufferBase GL_UNIFORM_BUFFER 0 (pdata ^. orthonormalMatUBO) renderLayer FixedCoordLayer shadV layerCounts renderFoldable shadV $ fixedCoordPictures u glDepthMask GL_TRUE diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index e74eb6111..b19fb6bd4 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -5,6 +5,7 @@ module Preload.Render ( cleanUpRenderPreload, ) where +import Shape.Data import Geometry.Data import MatrixHelper import GLHelp @@ -32,9 +33,9 @@ preloadRender = do glNamedBufferData theUBO 64 nullPtr GL_STREAM_DRAW glBindBufferBase GL_UNIFORM_BUFFER 0 theUBO - isoUBO <- mglCreate glCreateBuffers + orthonormalUBO <- mglCreate glCreateBuffers withArray (isoMatrix 0 1 (V2 0 0) (V2 2 2)) $ \ptr -> - glNamedBufferStorage isoUBO 64 ptr 0 + glNamedBufferStorage orthonormalUBO 64 ptr 0 lightsubo <- mglCreate glCreateBuffers glNamedBufferData lightsubo 640 nullPtr GL_STREAM_DRAW @@ -61,8 +62,8 @@ preloadRender = do glVertexArrayVertexBuffer wpColVAOname 0 wpVBOname 0 (fromIntegral $ floatSize * 8) setupVertexAttribPointer wpColVAOname 0 4 0 setupVertexAttribPointer wpColVAOname 1 4 4 - let wpVAO = VAO{_vaoName = wpVAOname, _vaoAttribSizes = [4], _vaoStride = 8} - wpColVAO = VAO{_vaoName = wpColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8} + let wpVAO = VAO{_vaoName = wpVAOname} + wpColVAO = VAO{_vaoName = wpColVAOname} -- setup window points VBO, VAOs and shaders winVBOname <- mglCreate glCreateBuffers winVBOptr <- mallocArray (8 * numDrawableWalls) @@ -79,7 +80,7 @@ preloadRender = do setupVertexAttribPointer winColVAOname 0 4 0 setupVertexAttribPointer winColVAOname 1 4 4 let winColVAO = VAO - {_vaoName = winColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8} + {_vaoName = winColVAOname} -- setup shape geometry/cap VBO and two VAOs shEBOptr <- mallocArray numDrawableElements shEBOname <- mglCreate glCreateBuffers @@ -89,17 +90,17 @@ preloadRender = do nullPtr GL_STREAM_DRAW let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr} - shVBO <- setupVBO4 8 + shVBO <- setupVBO nShapeVerxComp shPosVAOname <- mglCreate glCreateVertexArrays glBindVertexArray shPosVAOname - glVertexArrayVertexBuffer shPosVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * 8) + glVertexArrayVertexBuffer shPosVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp) setupVertexAttribPointer shPosVAOname 0 4 0 glVertexArrayElementBuffer shPosVAOname shEBOname - let shPosVAO = VAO{_vaoName = shPosVAOname, _vaoAttribSizes = [4], _vaoStride = 8} + let shPosVAO = VAO{_vaoName = shPosVAOname} --setup silhouette edge VAO shEdgeVAOname <- mglCreate glCreateVertexArrays glBindVertexArray shEdgeVAOname - glVertexArrayVertexBuffer shEdgeVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * 8) + glVertexArrayVertexBuffer shEdgeVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp) setupVertexAttribPointer shEdgeVAOname 0 4 0 --setup ebo for silhouette edges silEBOname <- mglCreate glCreateBuffers @@ -111,7 +112,7 @@ preloadRender = do nullPtr GL_STREAM_DRAW let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr} - shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoAttribSizes = [4], _vaoStride = 8} + shEdgeVAO = VAO{_vaoName = shEdgeVAOname} -- shEdgeVAO is unecessary? -- lighting shaders lightingWallShadShad <- @@ -265,7 +266,7 @@ preloadRender = do , _fboPos = fboPosName , _rboBaseBloom = rboBaseBloomName , _matUBO = theUBO - , _isoMatUBO = isoUBO + , _orthonormalMatUBO = orthonormalUBO , _lightsUBO = lightsubo , _vboWalls = wpVBO , _vboWindows = winVBO @@ -294,6 +295,7 @@ initializeGLState :: IO () initializeGLState = do glEnable GL_DEPTH_TEST + cleanUpRenderPreload :: RenderData -> IO () cleanUpRenderPreload _ = return () --cleanUpRenderPreload pd = do diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index ba5f4b99c..14008770c 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -1,5 +1,5 @@ module Shader.Compile ( - setupVBO4, + setupVBO, makeShader, makeShader4, makeByteStringShaderUsingVAO, @@ -67,8 +67,8 @@ makeShader4 s shaderlist sizes pm vbo = do , _shadUnis' = mempty } -setupVBO4 :: Int -> IO VBO -setupVBO4 vertexsize = do +setupVBO :: Int -> IO VBO +setupVBO vertexsize = do vboname <- mglCreate glCreateBuffers thePtr <- mallocArray (vertexsize * numDrawableElements) -- Allocate space @@ -170,8 +170,6 @@ setupVAOvbo sizes vbo = do setupVertexAttribs vbo vaoname sizes return $ VAO { _vaoName = vaoname - , _vaoAttribSizes = sizes - , _vaoStride = sum sizes } setupVAOSized :: Int -> [Int] -> IO (VAO,VBO) @@ -181,8 +179,6 @@ setupVAOSized ndraw sizes = do theVBO <- setupVBOSized ndraw vaoname sizes return ( VAO { _vaoName = vaoname - , _vaoAttribSizes = sizes - , _vaoStride = sum sizes } , theVBO) diff --git a/src/Shader/Data.hs b/src/Shader/Data.hs index af1311898..c44e0763b 100644 --- a/src/Shader/Data.hs +++ b/src/Shader/Data.hs @@ -12,8 +12,8 @@ module Shader.Data -- | Lens functions , vaoName -- , vaoVBO - , vaoAttribSizes - , vaoStride +-- , vaoAttribSizes +-- , vaoStride , vboName , vboPtr @@ -46,10 +46,8 @@ data FullShader = FullShader } {- | Vertex array object: contains the reference to the object, and its buffer targets. -} -data VAO = VAO +newtype VAO = VAO { _vaoName :: GLuint - , _vaoAttribSizes :: [Int] -- ^ It is not clear to me if this is necessary to store or not - , _vaoStride :: Int } {- | Vertex buffer object: contains the reference to the object, a pointer to a location with space that can be written to the buffer, diff --git a/src/Shader/Poke.hs b/src/Shader/Poke.hs index 9e47a9c47..5d35b7c4a 100644 --- a/src/Shader/Poke.hs +++ b/src/Shader/Poke.hs @@ -181,7 +181,7 @@ pokeJustV ptr nv sh = do pokeElemOff ptr (off 7) a return (nv + 1) where - off i = nv*8 + i + off i = nv*nShapeVerxComp + i V3 x y z = _svPos sh V4 r g b a = _svCol sh diff --git a/src/Shape/Data.hs b/src/Shape/Data.hs index 5bdd35cbd..e15c0bd36 100644 --- a/src/Shape/Data.hs +++ b/src/Shape/Data.hs @@ -48,6 +48,9 @@ makeLenses ''ShapeType type Shape = [ShapeObj] +nShapeVerxComp :: Int +nShapeVerxComp = 8 + deriveJSON defaultOptions ''ShapeType deriveJSON defaultOptions ''ShapeV deriveJSON defaultOptions ''ShapeObj