module Caramia.Buffer.Internal
( Buffer(..)
, Buffer_(..)
, BufferStatus(..)
, AccessFlags(..)
, MapFlag(..)
, bufferOrdIndex )
where
import Caramia.Prelude
import Caramia.Resource
import Caramia.Internal.OpenGLCApi
import System.IO.Unsafe
data Buffer = Buffer
{ resource :: !(Resource Buffer_)
, status :: !(IORef BufferStatus)
, viewAllowedMappings :: !AccessFlags
, viewSize :: !Int
, ordIndex :: !Int
}
bufferOrdIndex :: IORef Int
bufferOrdIndex = unsafePerformIO $ newIORef 0
instance Ord Buffer where
(ordIndex -> o1) `compare` (ordIndex -> o2) = o1 `compare` o2
data BufferStatus = BufferStatus
{ mapped :: !Bool }
instance Eq Buffer where
(resource -> res1) == (resource -> res2) = res1 == res2
newtype Buffer_ = Buffer_ GLuint
data AccessFlags =
ReadAccess
| WriteAccess
| ReadWriteAccess
| NoAccess
deriving ( Eq, Ord, Show, Read )
data MapFlag =
UnSynchronized
deriving ( Eq, Ord, Show, Read, Typeable )