module Codec.GlTF.BufferView
( BufferViewIx(..)
, BufferView(..)
, BufferViewTarget(..)
, pattern ARRAY_BUFFER
, pattern ELEMENT_ARRAY_BUFFER
) where
import Codec.GlTF.Prelude
import Codec.GlTF.Buffer (BufferIx)
newtype BufferViewIx = BufferViewIx { unBufferViewIx :: Int }
deriving (Eq, Ord, Show, FromJSON, ToJSON, Generic)
data BufferView = BufferView
{ buffer :: BufferIx
, byteOffset :: Size
, byteLength :: Size
, byteStride :: Maybe Size
, target :: Maybe BufferViewTarget
, name :: Maybe Text
, extensions :: Maybe Object
, extras :: Maybe Value
} deriving (Eq, Show, Generic)
instance FromJSON BufferView where
parseJSON = withObject "BufferView" \o -> do
buffer <- o .: "buffer"
byteOffset <- o .:? "byteOffset" .!= 0
byteLength <- o .: "byteLength"
byteStride <- o .:? "byteStride"
target <- o .:? "target"
name <- o .:? "name"
extensions <- o .:? "extensions"
extras <- o .:? "extras"
pure BufferView{..}
instance ToJSON BufferView
newtype BufferViewTarget = BufferViewTarget { unBufferViewTarget :: Int }
deriving (Eq, Ord, Show, FromJSON, ToJSON, Generic)
pattern ARRAY_BUFFER :: BufferViewTarget
pattern ARRAY_BUFFER = BufferViewTarget 34962
pattern ELEMENT_ARRAY_BUFFER :: BufferViewTarget
pattern ELEMENT_ARRAY_BUFFER = BufferViewTarget 34963