packages feed

JuicyPixels-blp-0.3.0.0: src/Codec/Picture/Blp/Internal/Data.hs

module Codec.Picture.Blp.Internal.Data(
    BlpStruct(..)
  , BlpCompression(..)
  , BlpFlag(..)
  , BlpPictureType(..)
  , BlpExt(..)
  ) where

import Codec.Picture
import Data.ByteString (ByteString)
import Data.Vector (Vector)
import Data.Word
import GHC.Generics

data BlpStruct = BlpStruct {
  blpCompression :: !BlpCompression
, blpFlags :: ![BlpFlag]
, blpWidth :: !Word32
, blpHeight :: !Word32
, blpPictureType :: !BlpPictureType
, blpPictureSubType :: !Word32 -- is not used
, blpExt :: BlpExt
} deriving (Show, Generic)

data BlpExt =
    BlpJpeg {
      blpJpegHeader :: !ByteString
    , blpJpegData :: ![ByteString]
    }
  | BlpUncompressed1 {
      blpU1Palette :: !(Vector PixelRGBA8)
    , blpU1MipMaps :: ![(ByteString, ByteString)]
    }
  | BlpUncompressed2 {
      blpU2Palette :: !(Vector PixelRGBA8)
    , blpU2MipMaps :: ![ByteString]
    }
  deriving (Show, Generic)

data BlpCompression =
    BlpCompressionJPEG
  | BlpCompressionUncompressed
  deriving (Eq, Ord, Enum, Bounded, Show, Generic)

data BlpFlag = BlpFlagAlphaChannel
  deriving (Eq, Ord, Enum, Bounded, Show, Generic)

data BlpPictureType =
    JPEGType
  | UncompressedWithAlpha
  | UncompressedWithoutAlpha
  deriving (Eq, Ord, Enum, Bounded, Show, Generic)