From 35f401d8c8c50bd91429611e82574d540a4991a9 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 14 Mar 2023 12:38:43 +0000 Subject: [PATCH] Start to separate VAO and VBO data types --- src/Preload/Render.hs | 15 +++++++++------ src/Shader/Compile.hs | 2 ++ src/Shader/Data.hs | 5 +++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 7e17641d2..4eb305c72 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -59,8 +59,8 @@ preloadRender = do glBindVertexArray wpColVAOname setupVertexAttribPointer wpColVAOname wpVBOname 0 4 8 0 setupVertexAttribPointer wpColVAOname wpVBOname 1 4 8 4 - let wpVAO = VAO{_vaoName = wpVAOname, _vaoVBO = wpVBO} - wpColVAO = VAO{_vaoName = wpColVAOname, _vaoVBO = wpVBO} + let wpVAO = VAO{_vaoName = wpVAOname, _vaoVBO = wpVBO, _vaoAttribSizes = [4], _vaoStride = 8} + wpColVAO = VAO{_vaoName = wpColVAOname, _vaoVBO = wpVBO, _vaoAttribSizes = [4,4], _vaoStride = 8} -- setup window points VBO, VAOs and shaders winVBOname <- mglCreate glCreateBuffers winVBOptr <- mallocArray (8 * numDrawableWalls) @@ -75,7 +75,8 @@ preloadRender = do glBindVertexArray winColVAOname setupVertexAttribPointer winColVAOname winVBOname 0 4 8 0 setupVertexAttribPointer winColVAOname winVBOname 1 4 8 4 - let winColVAO = VAO{_vaoName = winColVAOname, _vaoVBO = winVBO} + let winColVAO = VAO + {_vaoName = winColVAOname, _vaoVBO = winVBO, _vaoAttribSizes = [4,4], _vaoStride = 8} -- setup shape geometry/cap VBO and two VAOs shEBOptr <- mallocArray numDrawableElements shEBOname <- mglCreate glCreateBuffers @@ -107,8 +108,9 @@ preloadRender = do setupVertexAttribPointer shPosVAOname shVBOname 0 3 7 0 --bindBuffer ElementArrayBuffer $= Just shEBOname glVertexArrayElementBuffer shPosVAOname shEBOname - let shPosColVAO = VAO{_vaoName = shPosColVAOname, _vaoVBO = shVBO} - shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO} + let shPosColVAO = VAO + {_vaoName = shPosColVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3,4], _vaoStride = 7} + shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3], _vaoStride = 7} --setup silhouette edge VAO --shEdgeVAOname <- genObjectName --bindVertexArrayObject $= Just shEdgeVAOname @@ -127,7 +129,8 @@ preloadRender = do nullPtr GL_STREAM_DRAW let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr} - shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoVBO = shVBO} + shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3], _vaoStride = 7} +-- shEdgeVAO is unecessary? -- lighting shaders lightingWallShadShad <- makeShaderUsingVAO "lighting/wallShadow" [vert, geom, frag] EPoints wpVAO diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index 5b29d2903..b4c405f39 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -135,6 +135,8 @@ setupVAOSized ndraw sizes = do return $ VAO { _vaoName = vaoname + , _vaoAttribSizes = sizes + , _vaoStride = sum sizes , _vaoVBO = theVBO } diff --git a/src/Shader/Data.hs b/src/Shader/Data.hs index 0cb143340..96d8b57f2 100644 --- a/src/Shader/Data.hs +++ b/src/Shader/Data.hs @@ -12,6 +12,9 @@ module Shader.Data -- | Lens functions , vaoName , vaoVBO + , vaoAttribSizes + , vaoStride + , vboName , vboPtr , vboAttribSizes @@ -45,6 +48,8 @@ data FullShader = FullShader and its buffer targets. -} data VAO = VAO { _vaoName :: GLuint + , _vaoAttribSizes :: [Int] -- ^ It is not clear to me if this is necessary to store or not + , _vaoStride :: Int , _vaoVBO :: VBO } {- | Vertex buffer object: contains the reference to the object,