Start refactor of pointers into a vao datatype

This commit is contained in:
2021-02-20 09:17:56 +01:00
parent 9ff7810a2d
commit fa6f2f22f9
2 changed files with 62 additions and 26 deletions
+42 -1
View File
@@ -23,8 +23,11 @@ data PreloadData = PreloadData
, _textShader :: Program
, _circShader :: Program
, _arcShader :: Program
, _lineShader :: Program
, _fadeCircleShader :: Program
, _triVAO :: VAO
, _textVAO' :: VAO
, _circVAO' :: VAO
, _arcVAO' :: VAO
, _basicVAO :: VertexArrayObject
, _textVAO :: VertexArrayObject
, _circVAO :: VertexArrayObject
@@ -56,6 +59,7 @@ data VAO = VAO
}
makeLenses ''PreloadData
makeLenses ''VAO
floatSize = sizeOf (0.5 :: GLfloat)
@@ -75,6 +79,35 @@ setupVAO ps = do
vertexAttribArray (AttribLocation aloc) $= Enabled
return theVAO
setupVAO' :: [(BufferObject,GLuint,Int)] -> IO VAO
setupVAO' ps = do
theVAO <- genObjectName
bindVertexArrayObject $= Just theVAO
forM_ ps setupArrayBuffer
ptrs <- forM ps setupVBOPointers
return $ VAO theVAO ptrs
numDrawableElements :: Int
numDrawableElements = 50000
setupVBOPointers :: (BufferObject,GLuint,Int) -> IO (BufferObject,Ptr Float,Int)
setupVBOPointers (vbo,_,vsize) = do
thePtr <- mallocArray (vsize * numDrawableElements)
return (vbo,thePtr,vsize)
setupArrayBuffer :: (BufferObject,GLuint,Int) -> IO ()
setupArrayBuffer (vbo,aloc,i) = do
bindBuffer ArrayBuffer $= Just vbo
vertexAttribPointer (AttribLocation aloc) $=
( ToFloat
, VertexArrayDescriptor (fromIntegral i)
Float
(fromIntegral $ floatSize * i)
(bufferOffset 0)
)
vertexAttribArray (AttribLocation aloc) $= Enabled
loadTextures :: IO [Image PixelRGBA8]
loadTextures = do
-- echarMap <- readImage "data/texture/smudgedDirt.png"
@@ -125,6 +158,10 @@ doPreload' = do
generateMipmap' Texture2D
textureFilter Texture2D $= ((Linear',Just Linear') , Nearest)
trivao <- setupVAO' [(posVBO,0,3),(colVBO,1,4)]
textvao <- setupVAO' [(posVBO,0,3),(colVBO,1,4),(texVBO,2,2)]
circvao <- setupVAO' [(posVBO,0,3),(colVBO,1,4),(texVBO,2,1)]
arcvao <- setupVAO' [(posVBO,0,3),(colVBO,1,4),(texVBO,2,4)]
-- setup VAOs: basic vao
basicVAO <- setupVAO [(posVBO,0,3),(colVBO,1,4)]
textVAO <- setupVAO [(posVBO,0,3),(colVBO,1,4),(texVBO,2,2)]
@@ -158,6 +195,10 @@ doPreload' = do
, _circShader = cs
, _arcShader = as
, _fadeCircleShader = fcs
, _triVAO = trivao
, _textVAO' = textvao
, _circVAO' = circvao
, _arcVAO' = arcvao
, _basicVAO = basicVAO
, _textVAO = textVAO
, _circVAO = circVAO