Start refactor of pointers into a vao datatype
This commit is contained in:
+42
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user