------------------------------------------------------------------------------
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
-----------------------------------------------------------------------------
-- | https://threejs.org/docs/index.html#api/en/constants/Textures
module THREE.Constants.Textures
  ( MappingModes (..)
  , WrappingModes (..)
  , Types (..)
  , Formats (..)
  , DdsS3tcFormats (..)
  , PvrtcFormats (..)
  , EtcFormats (..)
  , AstcFormats (..)
  , BptcFormats (..)
  , RgtcFormats (..)
  , TextureComparisonFunctions (..)
  , InternalFormats (..)
  , DepthPacking (..)
  , ColorSpace (..)
  , UvChannel (..)
  , UnpackAlignment (..)
  ) where
-----------------------------------------------------------------------------
import           Miso
-----------------------------------------------------------------------------

data MappingModes
  = UVMapping
  | CubeReflectionMapping 
  | CubeRefractionMapping
  | EquirectangularReflectionMapping
  | EquirectangularRefractionMapping 
  | CubeUVReflectionMapping

instance ToJSVal MappingModes where
  toJSVal :: MappingModes -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (MappingModes -> Int) -> MappingModes -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MappingModes -> Int
go
    where
      go :: MappingModes -> Int
      go :: MappingModes -> Int
go = \case
        MappingModes
UVMapping                         -> Int
300
        MappingModes
CubeReflectionMapping             -> Int
301
        MappingModes
CubeRefractionMapping             -> Int
302
        MappingModes
EquirectangularReflectionMapping  -> Int
303
        MappingModes
EquirectangularRefractionMapping  -> Int
304
        MappingModes
CubeUVReflectionMapping           -> Int
306

instance FromJSVal MappingModes where
  fromJSVal :: JSVal -> IO (Maybe MappingModes)
fromJSVal = (Maybe Int -> Maybe MappingModes)
-> IO (Maybe Int) -> IO (Maybe MappingModes)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe MappingModes) -> Maybe MappingModes
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe MappingModes
go) (IO (Maybe Int) -> IO (Maybe MappingModes))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe MappingModes)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe MappingModes
      go :: Int -> Maybe MappingModes
go = \case
        Int
300 -> MappingModes -> Maybe MappingModes
forall a. a -> Maybe a
Just MappingModes
UVMapping
        Int
301 -> MappingModes -> Maybe MappingModes
forall a. a -> Maybe a
Just MappingModes
CubeReflectionMapping 
        Int
302 -> MappingModes -> Maybe MappingModes
forall a. a -> Maybe a
Just MappingModes
CubeRefractionMapping
        Int
303 -> MappingModes -> Maybe MappingModes
forall a. a -> Maybe a
Just MappingModes
EquirectangularReflectionMapping
        Int
304 -> MappingModes -> Maybe MappingModes
forall a. a -> Maybe a
Just MappingModes
EquirectangularRefractionMapping 
        Int
306 -> MappingModes -> Maybe MappingModes
forall a. a -> Maybe a
Just MappingModes
CubeUVReflectionMapping
        Int
_ -> Maybe MappingModes
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data WrappingModes
  = RepeatWrapping 
  | ClampToEdgeWrapping
  | MirroredRepeatWrapping

instance ToJSVal WrappingModes where
  toJSVal :: WrappingModes -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (WrappingModes -> Int) -> WrappingModes -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WrappingModes -> Int
go
    where
      go :: WrappingModes -> Int
      go :: WrappingModes -> Int
go = \case
        WrappingModes
RepeatWrapping          -> Int
1000
        WrappingModes
ClampToEdgeWrapping     -> Int
1001
        WrappingModes
MirroredRepeatWrapping  -> Int
1002

instance FromJSVal WrappingModes where
  fromJSVal :: JSVal -> IO (Maybe WrappingModes)
fromJSVal = (Maybe Int -> Maybe WrappingModes)
-> IO (Maybe Int) -> IO (Maybe WrappingModes)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe WrappingModes) -> Maybe WrappingModes
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe WrappingModes
go) (IO (Maybe Int) -> IO (Maybe WrappingModes))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe WrappingModes)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe WrappingModes
      go :: Int -> Maybe WrappingModes
go = \case
        Int
1000 -> WrappingModes -> Maybe WrappingModes
forall a. a -> Maybe a
Just WrappingModes
RepeatWrapping
        Int
1001 -> WrappingModes -> Maybe WrappingModes
forall a. a -> Maybe a
Just WrappingModes
ClampToEdgeWrapping
        Int
1002 -> WrappingModes -> Maybe WrappingModes
forall a. a -> Maybe a
Just WrappingModes
MirroredRepeatWrapping
        Int
_ -> Maybe WrappingModes
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data Types
  = UnsignedByteType 
  | ByteType 
  | ShortType
  | UnsignedShortType 
  | IntType 
  | UnsignedIntType
  | FloatType 
  | HalfFloatType 
  | UnsignedShort4444Type
  | UnsignedShort5551Type 
  | UnsignedInt248Type
  | UnsignedInt5999Type

instance ToJSVal Types where
  toJSVal :: Types -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal) -> (Types -> Int) -> Types -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Types -> Int
go
    where
      go :: Types -> Int
      go :: Types -> Int
go = \case
        Types
UnsignedByteType        -> Int
1009
        Types
ByteType                -> Int
1010
        Types
ShortType               -> Int
1011
        Types
UnsignedShortType       -> Int
1012
        Types
IntType                 -> Int
1013
        Types
UnsignedIntType         -> Int
1014
        Types
FloatType               -> Int
1015
        Types
HalfFloatType           -> Int
1016
        Types
UnsignedShort4444Type   -> Int
1017
        Types
UnsignedShort5551Type   -> Int
1018
        Types
UnsignedInt248Type      -> Int
1020
        Types
UnsignedInt5999Type     -> Int
35902

instance FromJSVal Types where
  fromJSVal :: JSVal -> IO (Maybe Types)
fromJSVal = (Maybe Int -> Maybe Types) -> IO (Maybe Int) -> IO (Maybe Types)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe Types) -> Maybe Types
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe Types
go) (IO (Maybe Int) -> IO (Maybe Types))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe Types)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe Types
      go :: Int -> Maybe Types
go = \case
        Int
1009  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
UnsignedByteType 
        Int
1010  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
ByteType 
        Int
1011  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
ShortType
        Int
1012  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
UnsignedShortType 
        Int
1013  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
IntType 
        Int
1014  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
UnsignedIntType
        Int
1015  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
FloatType 
        Int
1016  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
HalfFloatType 
        Int
1017  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
UnsignedShort4444Type
        Int
1018  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
UnsignedShort5551Type 
        Int
1020  -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
UnsignedInt248Type
        Int
35902 -> Types -> Maybe Types
forall a. a -> Maybe a
Just Types
UnsignedInt5999Type
        Int
_ -> Maybe Types
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data Formats
  = AlphaFormat 
  | RGBFormat
  | RGBAFormat 
  | DepthFormat
  | DepthStencilFormat
  | RedFormat 
  | RedIntegerFormat 
  | RGFormat
  | RGIntegerFormat 
  | RGBAIntegerFormat

instance ToJSVal Formats where
  toJSVal :: Formats -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal) -> (Formats -> Int) -> Formats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Formats -> Int
go
    where
      go :: Formats -> Int
      go :: Formats -> Int
go = \case
        Formats
AlphaFormat         -> Int
1021
        Formats
RGBFormat           -> Int
1022
        Formats
RGBAFormat          -> Int
1023
        Formats
DepthFormat         -> Int
1026
        Formats
DepthStencilFormat  -> Int
1027
        Formats
RedFormat           -> Int
1028
        Formats
RedIntegerFormat    -> Int
1029
        Formats
RGFormat            -> Int
1030
        Formats
RGIntegerFormat     -> Int
1031
        Formats
RGBAIntegerFormat   -> Int
1033

instance FromJSVal Formats where
  fromJSVal :: JSVal -> IO (Maybe Formats)
fromJSVal = (Maybe Int -> Maybe Formats)
-> IO (Maybe Int) -> IO (Maybe Formats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe Formats) -> Maybe Formats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe Formats
go) (IO (Maybe Int) -> IO (Maybe Formats))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe Formats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe Formats
      go :: Int -> Maybe Formats
go = \case
        Int
1021 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
AlphaFormat 
        Int
1022 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
RGBFormat
        Int
1023 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
RGBAFormat 
        Int
1026 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
DepthFormat
        Int
1027 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
DepthStencilFormat
        Int
1028 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
RedFormat 
        Int
1029 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
RedIntegerFormat 
        Int
1030 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
RGFormat
        Int
1031 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
RGIntegerFormat 
        Int
1033 -> Formats -> Maybe Formats
forall a. a -> Maybe a
Just Formats
RGBAIntegerFormat
        Int
_ -> Maybe Formats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data DdsS3tcFormats
  = RGB_S3TC_DXT1_Format 
  | RGBA_S3TC_DXT1_Format
  | RGBA_S3TC_DXT3_Format 
  | RGBA_S3TC_DXT5_Format

instance ToJSVal DdsS3tcFormats where
  toJSVal :: DdsS3tcFormats -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (DdsS3tcFormats -> Int) -> DdsS3tcFormats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DdsS3tcFormats -> Int
go
    where
      go :: DdsS3tcFormats -> Int
      go :: DdsS3tcFormats -> Int
go = \case
        DdsS3tcFormats
RGB_S3TC_DXT1_Format  -> Int
33776
        DdsS3tcFormats
RGBA_S3TC_DXT1_Format -> Int
33777
        DdsS3tcFormats
RGBA_S3TC_DXT3_Format -> Int
33778
        DdsS3tcFormats
RGBA_S3TC_DXT5_Format -> Int
33779

instance FromJSVal DdsS3tcFormats where
  fromJSVal :: JSVal -> IO (Maybe DdsS3tcFormats)
fromJSVal = (Maybe Int -> Maybe DdsS3tcFormats)
-> IO (Maybe Int) -> IO (Maybe DdsS3tcFormats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe DdsS3tcFormats) -> Maybe DdsS3tcFormats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe DdsS3tcFormats
go) (IO (Maybe Int) -> IO (Maybe DdsS3tcFormats))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe DdsS3tcFormats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe DdsS3tcFormats
      go :: Int -> Maybe DdsS3tcFormats
go = \case
        Int
33776 -> DdsS3tcFormats -> Maybe DdsS3tcFormats
forall a. a -> Maybe a
Just DdsS3tcFormats
RGB_S3TC_DXT1_Format 
        Int
33777 -> DdsS3tcFormats -> Maybe DdsS3tcFormats
forall a. a -> Maybe a
Just DdsS3tcFormats
RGBA_S3TC_DXT1_Format
        Int
33778 -> DdsS3tcFormats -> Maybe DdsS3tcFormats
forall a. a -> Maybe a
Just DdsS3tcFormats
RGBA_S3TC_DXT3_Format 
        Int
33779 -> DdsS3tcFormats -> Maybe DdsS3tcFormats
forall a. a -> Maybe a
Just DdsS3tcFormats
RGBA_S3TC_DXT5_Format
        Int
_ -> Maybe DdsS3tcFormats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data PvrtcFormats
  = RGB_PVRTC_4BPPV1_Format
  | RGB_PVRTC_2BPPV1_Format
  | RGBA_PVRTC_4BPPV1_Format 
  | RGBA_PVRTC_2BPPV1_Format

instance ToJSVal PvrtcFormats where
  toJSVal :: PvrtcFormats -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (PvrtcFormats -> Int) -> PvrtcFormats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PvrtcFormats -> Int
go
    where
      go :: PvrtcFormats -> Int
      go :: PvrtcFormats -> Int
go = \case
        PvrtcFormats
RGB_PVRTC_4BPPV1_Format   -> Int
35840
        PvrtcFormats
RGB_PVRTC_2BPPV1_Format   -> Int
35841
        PvrtcFormats
RGBA_PVRTC_4BPPV1_Format  -> Int
35842
        PvrtcFormats
RGBA_PVRTC_2BPPV1_Format  -> Int
35843

instance FromJSVal PvrtcFormats where
  fromJSVal :: JSVal -> IO (Maybe PvrtcFormats)
fromJSVal = (Maybe Int -> Maybe PvrtcFormats)
-> IO (Maybe Int) -> IO (Maybe PvrtcFormats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe PvrtcFormats) -> Maybe PvrtcFormats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe PvrtcFormats
go) (IO (Maybe Int) -> IO (Maybe PvrtcFormats))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe PvrtcFormats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe PvrtcFormats
      go :: Int -> Maybe PvrtcFormats
go = \case
        Int
35840 -> PvrtcFormats -> Maybe PvrtcFormats
forall a. a -> Maybe a
Just PvrtcFormats
RGB_PVRTC_4BPPV1_Format
        Int
35841 -> PvrtcFormats -> Maybe PvrtcFormats
forall a. a -> Maybe a
Just PvrtcFormats
RGB_PVRTC_2BPPV1_Format
        Int
35842 -> PvrtcFormats -> Maybe PvrtcFormats
forall a. a -> Maybe a
Just PvrtcFormats
RGBA_PVRTC_4BPPV1_Format 
        Int
35843 -> PvrtcFormats -> Maybe PvrtcFormats
forall a. a -> Maybe a
Just PvrtcFormats
RGBA_PVRTC_2BPPV1_Format
        Int
_ -> Maybe PvrtcFormats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data EtcFormats
  = RGB_ETC1_Format 
  | RGB_ETC2_Format 
  | RGBA_ETC2_EAC_Format

instance ToJSVal EtcFormats where
  toJSVal :: EtcFormats -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal) -> (EtcFormats -> Int) -> EtcFormats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. EtcFormats -> Int
go
    where
      go :: EtcFormats -> Int
      go :: EtcFormats -> Int
go = \case
        EtcFormats
RGB_ETC1_Format       -> Int
36196
        EtcFormats
RGB_ETC2_Format       -> Int
37492
        EtcFormats
RGBA_ETC2_EAC_Format  -> Int
37496

instance FromJSVal EtcFormats where
  fromJSVal :: JSVal -> IO (Maybe EtcFormats)
fromJSVal = (Maybe Int -> Maybe EtcFormats)
-> IO (Maybe Int) -> IO (Maybe EtcFormats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe EtcFormats) -> Maybe EtcFormats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe EtcFormats
go) (IO (Maybe Int) -> IO (Maybe EtcFormats))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe EtcFormats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe EtcFormats
      go :: Int -> Maybe EtcFormats
go = \case
        Int
36196 -> EtcFormats -> Maybe EtcFormats
forall a. a -> Maybe a
Just EtcFormats
RGB_ETC1_Format 
        Int
37492 -> EtcFormats -> Maybe EtcFormats
forall a. a -> Maybe a
Just EtcFormats
RGB_ETC2_Format 
        Int
37496 -> EtcFormats -> Maybe EtcFormats
forall a. a -> Maybe a
Just EtcFormats
RGBA_ETC2_EAC_Format
        Int
_ -> Maybe EtcFormats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data AstcFormats
  = RGBA_ASTC_4x4_Format 
  | RGBA_ASTC_5x4_Format
  | RGBA_ASTC_5x5_Format 
  | RGBA_ASTC_6x5_Format
  | RGBA_ASTC_6x6_Format 
  | RGBA_ASTC_8x5_Format
  | RGBA_ASTC_8x6_Format 
  | RGBA_ASTC_8x8_Format
  | RGBA_ASTC_10x5_Format 
  | RGBA_ASTC_10x6_Format
  | RGBA_ASTC_10x8_Format 
  | RGBA_ASTC_10x10_Format
  | RGBA_ASTC_12x10_Format 
  | RGBA_ASTC_12x12_Format

instance ToJSVal AstcFormats where
  toJSVal :: AstcFormats -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (AstcFormats -> Int) -> AstcFormats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AstcFormats -> Int
go
    where
      go :: AstcFormats -> Int
      go :: AstcFormats -> Int
go = \case
        AstcFormats
RGBA_ASTC_4x4_Format    -> Int
37808
        AstcFormats
RGBA_ASTC_5x4_Format    -> Int
37809
        AstcFormats
RGBA_ASTC_5x5_Format    -> Int
37810
        AstcFormats
RGBA_ASTC_6x5_Format    -> Int
37811
        AstcFormats
RGBA_ASTC_6x6_Format    -> Int
37812
        AstcFormats
RGBA_ASTC_8x5_Format    -> Int
37813
        AstcFormats
RGBA_ASTC_8x6_Format    -> Int
37814
        AstcFormats
RGBA_ASTC_8x8_Format    -> Int
37815
        AstcFormats
RGBA_ASTC_10x5_Format   -> Int
37816
        AstcFormats
RGBA_ASTC_10x6_Format   -> Int
37817
        AstcFormats
RGBA_ASTC_10x8_Format   -> Int
37818
        AstcFormats
RGBA_ASTC_10x10_Format  -> Int
37819
        AstcFormats
RGBA_ASTC_12x10_Format  -> Int
37820
        AstcFormats
RGBA_ASTC_12x12_Format  -> Int
37821

instance FromJSVal AstcFormats where
  fromJSVal :: JSVal -> IO (Maybe AstcFormats)
fromJSVal = (Maybe Int -> Maybe AstcFormats)
-> IO (Maybe Int) -> IO (Maybe AstcFormats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe AstcFormats) -> Maybe AstcFormats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe AstcFormats
go) (IO (Maybe Int) -> IO (Maybe AstcFormats))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe AstcFormats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe AstcFormats
      go :: Int -> Maybe AstcFormats
go = \case
        Int
37808 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_4x4_Format 
        Int
37809 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_5x4_Format
        Int
37810 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_5x5_Format 
        Int
37811 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_6x5_Format
        Int
37812 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_6x6_Format 
        Int
37813 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_8x5_Format
        Int
37814 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_8x6_Format 
        Int
37815 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_8x8_Format
        Int
37816 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_10x5_Format 
        Int
37817 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_10x6_Format
        Int
37818 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_10x8_Format 
        Int
37819 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_10x10_Format
        Int
37820 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_12x10_Format 
        Int
37821 -> AstcFormats -> Maybe AstcFormats
forall a. a -> Maybe a
Just AstcFormats
RGBA_ASTC_12x12_Format
        Int
_ -> Maybe AstcFormats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data BptcFormats
  = RGBA_BPTC_Format 
  | RGB_BPTC_SIGNED_Format
  | RGB_BPTC_UNSIGNED_Format

instance ToJSVal BptcFormats where
  toJSVal :: BptcFormats -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (BptcFormats -> Int) -> BptcFormats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BptcFormats -> Int
go
    where
      go :: BptcFormats -> Int
      go :: BptcFormats -> Int
go = \case
        BptcFormats
RGBA_BPTC_Format          -> Int
36492
        BptcFormats
RGB_BPTC_SIGNED_Format    -> Int
36494
        BptcFormats
RGB_BPTC_UNSIGNED_Format  -> Int
36495

instance FromJSVal BptcFormats where
  fromJSVal :: JSVal -> IO (Maybe BptcFormats)
fromJSVal = (Maybe Int -> Maybe BptcFormats)
-> IO (Maybe Int) -> IO (Maybe BptcFormats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe BptcFormats) -> Maybe BptcFormats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe BptcFormats
go) (IO (Maybe Int) -> IO (Maybe BptcFormats))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe BptcFormats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe BptcFormats
      go :: Int -> Maybe BptcFormats
go = \case
        Int
36492 -> BptcFormats -> Maybe BptcFormats
forall a. a -> Maybe a
Just BptcFormats
RGBA_BPTC_Format 
        Int
36494 -> BptcFormats -> Maybe BptcFormats
forall a. a -> Maybe a
Just BptcFormats
RGB_BPTC_SIGNED_Format
        Int
36495 -> BptcFormats -> Maybe BptcFormats
forall a. a -> Maybe a
Just BptcFormats
RGB_BPTC_UNSIGNED_Format
        Int
_ -> Maybe BptcFormats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data RgtcFormats
  = RED_RGTC1_Format
  | SIGNED_RED_RGTC1_Format
  | RED_GREEN_RGTC2_Format
  | SIGNED_RED_GREEN_RGTC2_Format

instance ToJSVal RgtcFormats where
  toJSVal :: RgtcFormats -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (RgtcFormats -> Int) -> RgtcFormats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RgtcFormats -> Int
go
    where
      go :: RgtcFormats -> Int
      go :: RgtcFormats -> Int
go = \case
        RgtcFormats
RED_RGTC1_Format              -> Int
36283
        RgtcFormats
SIGNED_RED_RGTC1_Format       -> Int
36284
        RgtcFormats
RED_GREEN_RGTC2_Format        -> Int
36285
        RgtcFormats
SIGNED_RED_GREEN_RGTC2_Format -> Int
36286

instance FromJSVal RgtcFormats where
  fromJSVal :: JSVal -> IO (Maybe RgtcFormats)
fromJSVal = (Maybe Int -> Maybe RgtcFormats)
-> IO (Maybe Int) -> IO (Maybe RgtcFormats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe RgtcFormats) -> Maybe RgtcFormats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe RgtcFormats
go) (IO (Maybe Int) -> IO (Maybe RgtcFormats))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe RgtcFormats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe RgtcFormats
      go :: Int -> Maybe RgtcFormats
go = \case
        Int
36283 -> RgtcFormats -> Maybe RgtcFormats
forall a. a -> Maybe a
Just RgtcFormats
RED_RGTC1_Format
        Int
36284 -> RgtcFormats -> Maybe RgtcFormats
forall a. a -> Maybe a
Just RgtcFormats
SIGNED_RED_RGTC1_Format
        Int
36285 -> RgtcFormats -> Maybe RgtcFormats
forall a. a -> Maybe a
Just RgtcFormats
RED_GREEN_RGTC2_Format
        Int
36286 -> RgtcFormats -> Maybe RgtcFormats
forall a. a -> Maybe a
Just RgtcFormats
SIGNED_RED_GREEN_RGTC2_Format
        Int
_ -> Maybe RgtcFormats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data TextureComparisonFunctions
  = NeverCompare
  | LessCompare
  | EqualCompare
  | LessEqualCompare
  | GreaterCompare
  | NotEqualCompare
  | GreaterEqualCompare
  | AlwaysCompare

instance ToJSVal TextureComparisonFunctions where
  toJSVal :: TextureComparisonFunctions -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (TextureComparisonFunctions -> Int)
-> TextureComparisonFunctions
-> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TextureComparisonFunctions -> Int
go
    where
      go :: TextureComparisonFunctions -> Int
      go :: TextureComparisonFunctions -> Int
go = \case
        TextureComparisonFunctions
NeverCompare          -> Int
512
        TextureComparisonFunctions
LessCompare           -> Int
513
        TextureComparisonFunctions
EqualCompare          -> Int
514
        TextureComparisonFunctions
LessEqualCompare      -> Int
515
        TextureComparisonFunctions
GreaterCompare        -> Int
516
        TextureComparisonFunctions
NotEqualCompare       -> Int
517
        TextureComparisonFunctions
GreaterEqualCompare   -> Int
518
        TextureComparisonFunctions
AlwaysCompare         -> Int
519

instance FromJSVal TextureComparisonFunctions where
  fromJSVal :: JSVal -> IO (Maybe TextureComparisonFunctions)
fromJSVal = (Maybe Int -> Maybe TextureComparisonFunctions)
-> IO (Maybe Int) -> IO (Maybe TextureComparisonFunctions)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int
-> (Int -> Maybe TextureComparisonFunctions)
-> Maybe TextureComparisonFunctions
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe TextureComparisonFunctions
go) (IO (Maybe Int) -> IO (Maybe TextureComparisonFunctions))
-> (JSVal -> IO (Maybe Int))
-> JSVal
-> IO (Maybe TextureComparisonFunctions)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe TextureComparisonFunctions
      go :: Int -> Maybe TextureComparisonFunctions
go = \case
        Int
512 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
NeverCompare
        Int
513 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
LessCompare
        Int
514 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
EqualCompare
        Int
515 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
LessEqualCompare
        Int
516 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
GreaterCompare
        Int
517 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
NotEqualCompare
        Int
518 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
GreaterEqualCompare
        Int
519 -> TextureComparisonFunctions -> Maybe TextureComparisonFunctions
forall a. a -> Maybe a
Just TextureComparisonFunctions
AlwaysCompare
        Int
_ -> Maybe TextureComparisonFunctions
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data InternalFormats
  = ALPHA
  | RGB
  | RGBA
  | LUMINANCE
  | LUMINANCE_ALPHA
  | RED_INTEGER
  | R8
  | R8_SNORM
  | R8I
  | R8UI
  | R16I
  | R16UI
  | R16F
  | R32I
  | R32UI
  | R32F
  | RG8
  | RG8_SNORM
  | RG8I
  | RG8UI
  | RG16I
  | RG16UI
  | RG16F
  | RG32I
  | RG32UI
  | RG32F
  | RGB565
  | RGB8
  | RGB8_SNORM
  | RGB8I
  | RGB8UI
  | RGB16I
  | RGB16UI
  | RGB16F
  | RGB32I
  | RGB32UI
  | RGB32F
  | RGB9_E5
  | SRGB8
  | R11F_G11F_B10F
  | RGBA4
  | RGBA8
  | RGBA8_SNORM
  | RGBA8I
  | RGBA8UI
  | RGBA16I
  | RGBA16UI
  | RGBA16F
  | RGBA32I
  | RGBA32UI
  | RGBA32F
  | RGB5_A1
  | RGB10_A2
  | RGB10_A2UI
  | SRGB8_ALPHA8
  | DEPTH_COMPONENT16
  | DEPTH_COMPONENT24
  | DEPTH_COMPONENT32F
  | DEPTH24_STENCIL8
  | DEPTH32F_STENCIL8

instance ToJSVal InternalFormats where
  toJSVal :: InternalFormats -> IO JSVal
toJSVal = MisoString -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (MisoString -> IO JSVal)
-> (InternalFormats -> MisoString) -> InternalFormats -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. InternalFormats -> MisoString
go
    where
      go :: InternalFormats -> MisoString
      go :: InternalFormats -> MisoString
go = \case
        InternalFormats
ALPHA               -> MisoString
"ALPHA"
        InternalFormats
RGB                 -> MisoString
"RGB"
        InternalFormats
RGBA                -> MisoString
"RGBA"
        InternalFormats
LUMINANCE           -> MisoString
"LUMINANCE"
        InternalFormats
LUMINANCE_ALPHA     -> MisoString
"LUMINANCE_ALPHA"
        InternalFormats
RED_INTEGER         -> MisoString
"RED_INTEGER"
        InternalFormats
R8                  -> MisoString
"R8"
        InternalFormats
R8_SNORM            -> MisoString
"R8_SNORM"
        InternalFormats
R8I                 -> MisoString
"R8I"
        InternalFormats
R8UI                -> MisoString
"R8UI"
        InternalFormats
R16I                -> MisoString
"R16I"
        InternalFormats
R16UI               -> MisoString
"R16UI"
        InternalFormats
R16F                -> MisoString
"R16F"
        InternalFormats
R32I                -> MisoString
"R32I"
        InternalFormats
R32UI               -> MisoString
"R32UI"
        InternalFormats
R32F                -> MisoString
"R32F"
        InternalFormats
RG8                 -> MisoString
"RG8"
        InternalFormats
RG8_SNORM           -> MisoString
"RG8_SNORM"
        InternalFormats
RG8I                -> MisoString
"RG8I"
        InternalFormats
RG8UI               -> MisoString
"RG8UI"
        InternalFormats
RG16I               -> MisoString
"RG16I"
        InternalFormats
RG16UI              -> MisoString
"RG16UI"
        InternalFormats
RG16F               -> MisoString
"RG16F"
        InternalFormats
RG32I               -> MisoString
"RG32I"
        InternalFormats
RG32UI              -> MisoString
"RG32UI"
        InternalFormats
RG32F               -> MisoString
"RG32F"
        InternalFormats
RGB565              -> MisoString
"RGB565"
        InternalFormats
RGB8                -> MisoString
"RGB8"
        InternalFormats
RGB8_SNORM          -> MisoString
"RGB8_SNORM"
        InternalFormats
RGB8I               -> MisoString
"RGB8I"
        InternalFormats
RGB8UI              -> MisoString
"RGB8UI"
        InternalFormats
RGB16I              -> MisoString
"RGB16I"
        InternalFormats
RGB16UI             -> MisoString
"RGB16UI"
        InternalFormats
RGB16F              -> MisoString
"RGB16F"
        InternalFormats
RGB32I              -> MisoString
"RGB32I"
        InternalFormats
RGB32UI             -> MisoString
"RGB32UI"
        InternalFormats
RGB32F              -> MisoString
"RGB32F"
        InternalFormats
RGB9_E5             -> MisoString
"RGB9_E5"
        InternalFormats
SRGB8               -> MisoString
"SRGB8"
        InternalFormats
R11F_G11F_B10F      -> MisoString
"R11F_G11F_B10F"
        InternalFormats
RGBA4               -> MisoString
"RGBA4"
        InternalFormats
RGBA8               -> MisoString
"RGBA8"
        InternalFormats
RGBA8_SNORM         -> MisoString
"RGBA8_SNORM"
        InternalFormats
RGBA8I              -> MisoString
"RGBA8I"
        InternalFormats
RGBA8UI             -> MisoString
"RGBA8UI"
        InternalFormats
RGBA16I             -> MisoString
"RGBA16I"
        InternalFormats
RGBA16UI            -> MisoString
"RGBA16UI"
        InternalFormats
RGBA16F             -> MisoString
"RGBA16F"
        InternalFormats
RGBA32I             -> MisoString
"RGBA32I"
        InternalFormats
RGBA32UI            -> MisoString
"RGBA32UI"
        InternalFormats
RGBA32F             -> MisoString
"RGBA32F"
        InternalFormats
RGB5_A1             -> MisoString
"RGB5_A1"
        InternalFormats
RGB10_A2            -> MisoString
"RGB10_A2"
        InternalFormats
RGB10_A2UI          -> MisoString
"RGB10_A2UI"
        InternalFormats
SRGB8_ALPHA8        -> MisoString
"SRGB8_ALPHA8"
        InternalFormats
DEPTH_COMPONENT16   -> MisoString
"DEPTH_COMPONENT16"
        InternalFormats
DEPTH_COMPONENT24   -> MisoString
"DEPTH_COMPONENT24"
        InternalFormats
DEPTH_COMPONENT32F  -> MisoString
"DEPTH_COMPONENT32F"
        InternalFormats
DEPTH24_STENCIL8    -> MisoString
"DEPTH24_STENCIL8"
        InternalFormats
DEPTH32F_STENCIL8   -> MisoString
"DEPTH32F_STENCIL8"

instance FromJSVal InternalFormats where
  fromJSVal :: JSVal -> IO (Maybe InternalFormats)
fromJSVal = (Maybe MisoString -> Maybe InternalFormats)
-> IO (Maybe MisoString) -> IO (Maybe InternalFormats)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe MisoString
-> (MisoString -> Maybe InternalFormats) -> Maybe InternalFormats
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= MisoString -> Maybe InternalFormats
go) (IO (Maybe MisoString) -> IO (Maybe InternalFormats))
-> (JSVal -> IO (Maybe MisoString))
-> JSVal
-> IO (Maybe InternalFormats)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe MisoString)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: MisoString -> Maybe InternalFormats
      go :: MisoString -> Maybe InternalFormats
go = \case
        MisoString
"ALPHA"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
ALPHA
        MisoString
"RGB"                 -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB
        MisoString
"RGBA"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA
        MisoString
"LUMINANCE"           -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
LUMINANCE
        MisoString
"LUMINANCE_ALPHA"     -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
LUMINANCE_ALPHA
        MisoString
"RED_INTEGER"         -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RED_INTEGER
        MisoString
"R8"                  -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R8
        MisoString
"R8_SNORM"            -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R8_SNORM
        MisoString
"R8I"                 -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R8I
        MisoString
"R8UI"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R8UI
        MisoString
"R16I"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R16I
        MisoString
"R16UI"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R16UI
        MisoString
"R16F"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R16F
        MisoString
"R32I"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R32I
        MisoString
"R32UI"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R32UI
        MisoString
"R32F"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R32F
        MisoString
"RG8"                 -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG8
        MisoString
"RG8_SNORM"           -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG8_SNORM
        MisoString
"RG8I"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG8I
        MisoString
"RG8UI"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG8UI
        MisoString
"RG16I"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG16I
        MisoString
"RG16UI"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG16UI
        MisoString
"RG16F"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG16F
        MisoString
"RG32I"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG32I
        MisoString
"RG32UI"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG32UI
        MisoString
"RG32F"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RG32F
        MisoString
"RGB565"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB565
        MisoString
"RGB8"                -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB8
        MisoString
"RGB8_SNORM"          -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB8_SNORM
        MisoString
"RGB8I"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB8I
        MisoString
"RGB8UI"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB8UI
        MisoString
"RGB16I"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB16I
        MisoString
"RGB16UI"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB16UI
        MisoString
"RGB16F"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB16F
        MisoString
"RGB32I"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB32I
        MisoString
"RGB32UI"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB32UI
        MisoString
"RGB32F"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB32F
        MisoString
"RGB9_E5"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB9_E5
        MisoString
"SRGB8"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
SRGB8
        MisoString
"R11F_G11F_B10F"      -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
R11F_G11F_B10F
        MisoString
"RGBA4"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA4
        MisoString
"RGBA8"               -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA8
        MisoString
"RGBA8_SNORM"         -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA8_SNORM
        MisoString
"RGBA8I"              -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA8I
        MisoString
"RGBA8UI"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA8UI
        MisoString
"RGBA16I"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA16I
        MisoString
"RGBA16UI"            -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA16UI
        MisoString
"RGBA16F"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA16F
        MisoString
"RGBA32I"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA32I
        MisoString
"RGBA32UI"            -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA32UI
        MisoString
"RGBA32F"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGBA32F
        MisoString
"RGB5_A1"             -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB5_A1
        MisoString
"RGB10_A2"            -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB10_A2
        MisoString
"RGB10_A2UI"          -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
RGB10_A2UI
        MisoString
"SRGB8_ALPHA8"        -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
SRGB8_ALPHA8
        MisoString
"DEPTH_COMPONENT16"   -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
DEPTH_COMPONENT16
        MisoString
"DEPTH_COMPONENT24"   -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
DEPTH_COMPONENT24
        MisoString
"DEPTH_COMPONENT32F"  -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
DEPTH_COMPONENT32F
        MisoString
"DEPTH24_STENCIL8"    -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
DEPTH24_STENCIL8
        MisoString
"DEPTH32F_STENCIL8"   -> InternalFormats -> Maybe InternalFormats
forall a. a -> Maybe a
Just InternalFormats
DEPTH32F_STENCIL8
        MisoString
_ -> Maybe InternalFormats
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data DepthPacking
  = BasicDepthPacking 
  | RGBADepthPacking

instance ToJSVal DepthPacking where
  toJSVal :: DepthPacking -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (DepthPacking -> Int) -> DepthPacking -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DepthPacking -> Int
go
    where
      go :: DepthPacking -> Int
      go :: DepthPacking -> Int
go = \case
        DepthPacking
BasicDepthPacking -> Int
3200
        DepthPacking
RGBADepthPacking  -> Int
3201

instance FromJSVal DepthPacking where
  fromJSVal :: JSVal -> IO (Maybe DepthPacking)
fromJSVal = (Maybe Int -> Maybe DepthPacking)
-> IO (Maybe Int) -> IO (Maybe DepthPacking)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe DepthPacking) -> Maybe DepthPacking
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe DepthPacking
go) (IO (Maybe Int) -> IO (Maybe DepthPacking))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe DepthPacking)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe DepthPacking
      go :: Int -> Maybe DepthPacking
go = \case
        Int
3200 -> DepthPacking -> Maybe DepthPacking
forall a. a -> Maybe a
Just DepthPacking
BasicDepthPacking
        Int
3201 -> DepthPacking -> Maybe DepthPacking
forall a. a -> Maybe a
Just DepthPacking
RGBADepthPacking 
        Int
_ -> Maybe DepthPacking
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data ColorSpace
  = NoColorSpace
  | SRGBColorSpace
  | LinearSRGBColorSpace

instance ToJSVal ColorSpace where
  toJSVal :: ColorSpace -> IO JSVal
toJSVal = MisoString -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (MisoString -> IO JSVal)
-> (ColorSpace -> MisoString) -> ColorSpace -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ColorSpace -> MisoString
go
    where
      go :: ColorSpace -> MisoString
      go :: ColorSpace -> MisoString
go = \case
        ColorSpace
NoColorSpace          -> MisoString
""
        ColorSpace
SRGBColorSpace        -> MisoString
"srgb"
        ColorSpace
LinearSRGBColorSpace  -> MisoString
"srgb-linear"

instance FromJSVal ColorSpace where
  fromJSVal :: JSVal -> IO (Maybe ColorSpace)
fromJSVal = (Maybe MisoString -> Maybe ColorSpace)
-> IO (Maybe MisoString) -> IO (Maybe ColorSpace)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe MisoString
-> (MisoString -> Maybe ColorSpace) -> Maybe ColorSpace
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= MisoString -> Maybe ColorSpace
go) (IO (Maybe MisoString) -> IO (Maybe ColorSpace))
-> (JSVal -> IO (Maybe MisoString))
-> JSVal
-> IO (Maybe ColorSpace)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe MisoString)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: MisoString -> Maybe ColorSpace
      go :: MisoString -> Maybe ColorSpace
go = \case
        MisoString
""            -> ColorSpace -> Maybe ColorSpace
forall a. a -> Maybe a
Just ColorSpace
NoColorSpace
        MisoString
"srgb"        -> ColorSpace -> Maybe ColorSpace
forall a. a -> Maybe a
Just ColorSpace
SRGBColorSpace
        MisoString
"srgb-linear" -> ColorSpace -> Maybe ColorSpace
forall a. a -> Maybe a
Just ColorSpace
LinearSRGBColorSpace
        MisoString
_ -> Maybe ColorSpace
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data UvChannel
  = Uv
  | Uv1
  | Uv2
  | Uv3

instance ToJSVal UvChannel where
  toJSVal :: UvChannel -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal) -> (UvChannel -> Int) -> UvChannel -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UvChannel -> Int
go
    where
      go :: UvChannel -> Int
      go :: UvChannel -> Int
go = \case
        UvChannel
Uv  -> Int
0
        UvChannel
Uv1 -> Int
1
        UvChannel
Uv2 -> Int
2
        UvChannel
Uv3 -> Int
3

instance FromJSVal UvChannel where
  fromJSVal :: JSVal -> IO (Maybe UvChannel)
fromJSVal = (Maybe Int -> Maybe UvChannel)
-> IO (Maybe Int) -> IO (Maybe UvChannel)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int -> (Int -> Maybe UvChannel) -> Maybe UvChannel
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe UvChannel
go) (IO (Maybe Int) -> IO (Maybe UvChannel))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe UvChannel)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe UvChannel
      go :: Int -> Maybe UvChannel
go = \case
        Int
0 -> UvChannel -> Maybe UvChannel
forall a. a -> Maybe a
Just UvChannel
Uv
        Int
1 -> UvChannel -> Maybe UvChannel
forall a. a -> Maybe a
Just UvChannel
Uv1
        Int
2 -> UvChannel -> Maybe UvChannel
forall a. a -> Maybe a
Just UvChannel
Uv2
        Int
3 -> UvChannel -> Maybe UvChannel
forall a. a -> Maybe a
Just UvChannel
Uv3
        Int
_ -> Maybe UvChannel
forall a. Maybe a
Nothing

----------------------------------------------------------------------------

data UnpackAlignment
  = ByteAlignment
  | EvenNumberedBytes
  | WordAlignment
  | DoubleWordBoundaries

instance ToJSVal UnpackAlignment where
  toJSVal :: UnpackAlignment -> IO JSVal
toJSVal = Int -> IO JSVal
forall a. ToJSVal a => a -> IO JSVal
toJSVal (Int -> IO JSVal)
-> (UnpackAlignment -> Int) -> UnpackAlignment -> IO JSVal
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UnpackAlignment -> Int
go
    where
      go :: UnpackAlignment -> Int
      go :: UnpackAlignment -> Int
go = \case
        UnpackAlignment
ByteAlignment         -> Int
1
        UnpackAlignment
EvenNumberedBytes     -> Int
2
        UnpackAlignment
WordAlignment         -> Int
4
        UnpackAlignment
DoubleWordBoundaries  -> Int
8

instance FromJSVal UnpackAlignment where
  fromJSVal :: JSVal -> IO (Maybe UnpackAlignment)
fromJSVal = (Maybe Int -> Maybe UnpackAlignment)
-> IO (Maybe Int) -> IO (Maybe UnpackAlignment)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Int
-> (Int -> Maybe UnpackAlignment) -> Maybe UnpackAlignment
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Maybe UnpackAlignment
go) (IO (Maybe Int) -> IO (Maybe UnpackAlignment))
-> (JSVal -> IO (Maybe Int)) -> JSVal -> IO (Maybe UnpackAlignment)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> IO (Maybe Int)
forall a. FromJSVal a => JSVal -> IO (Maybe a)
fromJSVal
    where
      go :: Int -> Maybe UnpackAlignment
      go :: Int -> Maybe UnpackAlignment
go = \case
        Int
1 -> UnpackAlignment -> Maybe UnpackAlignment
forall a. a -> Maybe a
Just UnpackAlignment
ByteAlignment
        Int
2 -> UnpackAlignment -> Maybe UnpackAlignment
forall a. a -> Maybe a
Just UnpackAlignment
EvenNumberedBytes
        Int
4 -> UnpackAlignment -> Maybe UnpackAlignment
forall a. a -> Maybe a
Just UnpackAlignment
WordAlignment
        Int
8 -> UnpackAlignment -> Maybe UnpackAlignment
forall a. a -> Maybe a
Just UnpackAlignment
DoubleWordBoundaries
        Int
_ -> Maybe UnpackAlignment
forall a. Maybe a
Nothing

----------------------------------------------------------------------------