lowgl-0.2.0.1: Graphics/GL/Low/VAO.hs
module Graphics.GL.Low.VAO
(
VAO,
newVAO,
deleteVAO,
bindVAO
) where
import Foreign.Storable
import Foreign.Marshal
import Graphics.GL
import Graphics.GL.Low.Classes
-- | A VAO stores vertex attribute layouts and the VBO source of vertices
-- for those attributes. It also stores the state of the element array binding
-- target. The vertex array binding target admits one VAO at a time.
newtype VAO = VAO GLuint deriving Show
instance GLObject VAO where
glObjectName (VAO n) = fromIntegral n
-- | Create a new VAO. The only thing you can do with a VAO is bind it to
-- the vertex array binding target.
newVAO :: IO VAO
newVAO = do
n <- alloca (\ptr -> glGenVertexArrays 1 ptr >> peek ptr)
return (VAO n)
-- | Delete a VAO.
deleteVAO :: VAO -> IO ()
deleteVAO (VAO n) = withArray [n] (\ptr -> glDeleteVertexArrays 1 ptr)
-- | Assign the VAO to the vertex array binding target. The VAO already bound
-- will be replaced, if any.
bindVAO :: VAO -> IO ()
bindVAO (VAO n) = glBindVertexArray n