caramia-0.7.2.0: src/Graphics/Caramia/VAO/Internal.hs
{-# LANGUAGE NoImplicitPrelude, ViewPatterns, DeriveDataTypeable #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
module Graphics.Caramia.VAO.Internal where
import Data.Unique
import Graphics.Caramia.Prelude
import Graphics.Caramia.Resource
import Graphics.Caramia.Internal.OpenGLCApi
import qualified Graphics.Caramia.Buffer.Internal as Buf
import Graphics.Caramia.OpenGLResource
-- | The vertex array object data type.
data VAO = VAO
{ resource :: !(Resource VAO_)
, boundBuffers :: !(IORef [Buf.Buffer])
, vaoIndex :: !Unique }
deriving ( Typeable )
instance Eq VAO where
(resource -> res1) == (resource -> res2) = res1 == res2
instance Ord VAO where
(vaoIndex -> v1) `compare` (vaoIndex -> v2) = v1 `compare` v2
newtype VAO_ = VAO_ GLuint
instance OpenGLResource GLuint VAO where
getRaw vao = do
VAO_ name <- getRaw (WrappedOpenGLResource $ resource vao)
return name
touch vao = touch (WrappedOpenGLResource $ resource vao)
finalize vao = finalize (WrappedOpenGLResource $ resource vao)