module Graphics.Caramia.Buffer.Internal where
import Graphics.Caramia.Internal.OpenGLCApi
import Graphics.Caramia.OpenGLResource
import Graphics.Caramia.Prelude
import Graphics.Caramia.Resource
data Buffer = Buffer
{ resource :: !(Resource Buffer_)
, status :: !(IORef BufferStatus)
, viewAllowedMappings :: !AccessFlags
, viewSize :: !Int
, ordIndex :: !Unique
}
deriving ( Typeable )
instance OpenGLResource GLuint Buffer where
getRaw buf = do
Buffer_ name <- getRaw (WrappedOpenGLResource $ resource buf)
return name
touch buf = touch (WrappedOpenGLResource $ resource buf)
instance Ord Buffer where
(ordIndex -> o1) `compare` (ordIndex -> o2) = o1 `compare` o2
data BufferStatus = BufferStatus
{ mapped :: !Bool }
instance Show Buffer where
show (Buffer{..}) = "<Buffer bytesize(" <> show viewSize <> ")>"
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, Typeable, Enum )
data MapFlag =
UnSynchronized
deriving ( Eq, Ord, Show, Read, Typeable, Enum )