Start to separate VAO and VBO data types

This commit is contained in:
2023-03-14 12:38:43 +00:00
parent bfd079ed2a
commit 35f401d8c8
3 changed files with 16 additions and 6 deletions
+9 -6
View File
@@ -59,8 +59,8 @@ preloadRender = do
glBindVertexArray wpColVAOname glBindVertexArray wpColVAOname
setupVertexAttribPointer wpColVAOname wpVBOname 0 4 8 0 setupVertexAttribPointer wpColVAOname wpVBOname 0 4 8 0
setupVertexAttribPointer wpColVAOname wpVBOname 1 4 8 4 setupVertexAttribPointer wpColVAOname wpVBOname 1 4 8 4
let wpVAO = VAO{_vaoName = wpVAOname, _vaoVBO = wpVBO} let wpVAO = VAO{_vaoName = wpVAOname, _vaoVBO = wpVBO, _vaoAttribSizes = [4], _vaoStride = 8}
wpColVAO = VAO{_vaoName = wpColVAOname, _vaoVBO = wpVBO} wpColVAO = VAO{_vaoName = wpColVAOname, _vaoVBO = wpVBO, _vaoAttribSizes = [4,4], _vaoStride = 8}
-- setup window points VBO, VAOs and shaders -- setup window points VBO, VAOs and shaders
winVBOname <- mglCreate glCreateBuffers winVBOname <- mglCreate glCreateBuffers
winVBOptr <- mallocArray (8 * numDrawableWalls) winVBOptr <- mallocArray (8 * numDrawableWalls)
@@ -75,7 +75,8 @@ preloadRender = do
glBindVertexArray winColVAOname glBindVertexArray winColVAOname
setupVertexAttribPointer winColVAOname winVBOname 0 4 8 0 setupVertexAttribPointer winColVAOname winVBOname 0 4 8 0
setupVertexAttribPointer winColVAOname winVBOname 1 4 8 4 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 -- setup shape geometry/cap VBO and two VAOs
shEBOptr <- mallocArray numDrawableElements shEBOptr <- mallocArray numDrawableElements
shEBOname <- mglCreate glCreateBuffers shEBOname <- mglCreate glCreateBuffers
@@ -107,8 +108,9 @@ preloadRender = do
setupVertexAttribPointer shPosVAOname shVBOname 0 3 7 0 setupVertexAttribPointer shPosVAOname shVBOname 0 3 7 0
--bindBuffer ElementArrayBuffer $= Just shEBOname --bindBuffer ElementArrayBuffer $= Just shEBOname
glVertexArrayElementBuffer shPosVAOname shEBOname glVertexArrayElementBuffer shPosVAOname shEBOname
let shPosColVAO = VAO{_vaoName = shPosColVAOname, _vaoVBO = shVBO} let shPosColVAO = VAO
shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO} {_vaoName = shPosColVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3,4], _vaoStride = 7}
shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO, _vaoAttribSizes = [3], _vaoStride = 7}
--setup silhouette edge VAO --setup silhouette edge VAO
--shEdgeVAOname <- genObjectName --shEdgeVAOname <- genObjectName
--bindVertexArrayObject $= Just shEdgeVAOname --bindVertexArrayObject $= Just shEdgeVAOname
@@ -127,7 +129,8 @@ preloadRender = do
nullPtr nullPtr
GL_STREAM_DRAW GL_STREAM_DRAW
let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr} 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 -- lighting shaders
lightingWallShadShad <- lightingWallShadShad <-
makeShaderUsingVAO "lighting/wallShadow" [vert, geom, frag] EPoints wpVAO makeShaderUsingVAO "lighting/wallShadow" [vert, geom, frag] EPoints wpVAO
+2
View File
@@ -135,6 +135,8 @@ setupVAOSized ndraw sizes = do
return $ return $
VAO VAO
{ _vaoName = vaoname { _vaoName = vaoname
, _vaoAttribSizes = sizes
, _vaoStride = sum sizes
, _vaoVBO = theVBO , _vaoVBO = theVBO
} }
+5
View File
@@ -12,6 +12,9 @@ module Shader.Data
-- | Lens functions -- | Lens functions
, vaoName , vaoName
, vaoVBO , vaoVBO
, vaoAttribSizes
, vaoStride
, vboName , vboName
, vboPtr , vboPtr
, vboAttribSizes , vboAttribSizes
@@ -45,6 +48,8 @@ data FullShader = FullShader
and its buffer targets. -} and its buffer targets. -}
data VAO = VAO data VAO = VAO
{ _vaoName :: GLuint { _vaoName :: GLuint
, _vaoAttribSizes :: [Int] -- ^ It is not clear to me if this is necessary to store or not
, _vaoStride :: Int
, _vaoVBO :: VBO , _vaoVBO :: VBO
} }
{- | Vertex buffer object: contains the reference to the object, {- | Vertex buffer object: contains the reference to the object,