{-# language CPP #-}
module Vulkan.Extensions.VK_EXT_hdr_metadata ( setHdrMetadataEXT
, XYColorEXT(..)
, HdrMetadataEXT(..)
, EXT_HDR_METADATA_SPEC_VERSION
, pattern EXT_HDR_METADATA_SPEC_VERSION
, EXT_HDR_METADATA_EXTENSION_NAME
, pattern EXT_HDR_METADATA_EXTENSION_NAME
, SwapchainKHR(..)
) where
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (plusPtr)
import Data.Coerce (coerce)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.C.Types (CFloat)
import Foreign.C.Types (CFloat(..))
import Foreign.C.Types (CFloat(CFloat))
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Extends (forgetExtensions)
import Vulkan.CStruct.Extends (pokeSomeCStruct)
import Vulkan.NamedType ((:::))
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkSetHdrMetadataEXT))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_hdr_vivid (HdrVividDynamicMetadataHUAWEI)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Extensions.Handles (SwapchainKHR)
import Vulkan.Extensions.Handles (SwapchainKHR(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_HDR_METADATA_EXT))
import Vulkan.Extensions.Handles (SwapchainKHR(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"dynamic" mkVkSetHdrMetadataEXT
:: FunPtr (Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr (SomeStruct HdrMetadataEXT) -> IO ()) -> Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr (SomeStruct HdrMetadataEXT) -> IO ()
setHdrMetadataEXT :: forall io
. (MonadIO io)
=>
Device
->
("swapchains" ::: Vector SwapchainKHR)
->
("metadata" ::: Vector (SomeStruct HdrMetadataEXT))
-> io ()
setHdrMetadataEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("swapchains" ::: Vector SwapchainKHR)
-> ("metadata" ::: Vector (SomeStruct HdrMetadataEXT))
-> io ()
setHdrMetadataEXT Device
device "swapchains" ::: Vector SwapchainKHR
swapchains "metadata" ::: Vector (SomeStruct HdrMetadataEXT)
metadata = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
let vkSetHdrMetadataEXTPtr :: FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
vkSetHdrMetadataEXTPtr = DeviceCmds
-> FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
pVkSetHdrMetadataEXT (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
vkSetHdrMetadataEXTPtr FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
-> FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkSetHdrMetadataEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
let vkSetHdrMetadataEXT' :: Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ()
vkSetHdrMetadataEXT' = FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
-> Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ()
mkVkSetHdrMetadataEXT FunPtr
(Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ())
vkSetHdrMetadataEXTPtr
let pSwapchainsLength :: Int
pSwapchainsLength = ("swapchains" ::: Vector SwapchainKHR) -> Int
forall a. Vector a -> Int
Data.Vector.length (("swapchains" ::: Vector SwapchainKHR) -> Int)
-> ("swapchains" ::: Vector SwapchainKHR) -> Int
forall a b. (a -> b) -> a -> b
$ ("swapchains" ::: Vector SwapchainKHR
swapchains)
IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ((("metadata" ::: Vector (SomeStruct HdrMetadataEXT)) -> Int
forall a. Vector a -> Int
Data.Vector.length (("metadata" ::: Vector (SomeStruct HdrMetadataEXT)) -> Int)
-> ("metadata" ::: Vector (SomeStruct HdrMetadataEXT)) -> Int
forall a b. (a -> b) -> a -> b
$ ("metadata" ::: Vector (SomeStruct HdrMetadataEXT)
metadata)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pSwapchainsLength) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pMetadata and pSwapchains must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
Ptr SwapchainKHR
pPSwapchains <- ((Ptr SwapchainKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr SwapchainKHR)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr SwapchainKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr SwapchainKHR))
-> ((Ptr SwapchainKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr SwapchainKHR)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @SwapchainKHR ((("swapchains" ::: Vector SwapchainKHR) -> Int
forall a. Vector a -> Int
Data.Vector.length ("swapchains" ::: Vector SwapchainKHR
swapchains)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> SwapchainKHR -> IO ())
-> ("swapchains" ::: Vector SwapchainKHR) -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SwapchainKHR
e -> Ptr SwapchainKHR -> SwapchainKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr SwapchainKHR
pPSwapchains Ptr SwapchainKHR -> Int -> Ptr SwapchainKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SwapchainKHR) (SwapchainKHR
e)) ("swapchains" ::: Vector SwapchainKHR
swapchains)
Ptr (HdrMetadataEXT Any)
pPMetadata <- ((Ptr (HdrMetadataEXT Any) -> IO ()) -> IO ())
-> ContT () IO (Ptr (HdrMetadataEXT Any))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (HdrMetadataEXT Any) -> IO ()) -> IO ())
-> ContT () IO (Ptr (HdrMetadataEXT Any)))
-> ((Ptr (HdrMetadataEXT Any) -> IO ()) -> IO ())
-> ContT () IO (Ptr (HdrMetadataEXT Any))
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(HdrMetadataEXT _) ((("metadata" ::: Vector (SomeStruct HdrMetadataEXT)) -> Int
forall a. Vector a -> Int
Data.Vector.length ("metadata" ::: Vector (SomeStruct HdrMetadataEXT)
metadata)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
64)
(Int -> SomeStruct HdrMetadataEXT -> ContT () IO ())
-> ("metadata" ::: Vector (SomeStruct HdrMetadataEXT))
-> ContT () IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SomeStruct HdrMetadataEXT
e -> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO ()) -> IO ()) -> ContT () IO ())
-> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (SomeStruct HdrMetadataEXT)
-> SomeStruct HdrMetadataEXT -> IO () -> IO ()
forall (a :: [*] -> *) b.
(forall (es :: [*]).
(Extendss a es, PokeChain es) =>
ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (HdrMetadataEXT Any) -> Ptr (SomeStruct HdrMetadataEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (HdrMetadataEXT Any)
pPMetadata Ptr (HdrMetadataEXT Any) -> Int -> Ptr (HdrMetadataEXT w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (HdrMetadataEXT _))) (SomeStruct HdrMetadataEXT
e) (IO () -> IO ())
-> ((() -> IO ()) -> IO ()) -> (() -> IO ()) -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ())) ("metadata" ::: Vector (SomeStruct HdrMetadataEXT)
metadata)
IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkSetHdrMetadataEXT" (Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ()
vkSetHdrMetadataEXT'
(Device -> Ptr Device_T
deviceHandle (Device
device))
((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pSwapchainsLength :: Word32))
(Ptr SwapchainKHR
pPSwapchains)
(Ptr (HdrMetadataEXT Any) -> Ptr (SomeStruct HdrMetadataEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (HdrMetadataEXT Any)
pPMetadata)))
() -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()
data XYColorEXT = XYColorEXT
{
XYColorEXT -> Float
x :: Float
,
XYColorEXT -> Float
y :: Float
}
deriving (Typeable, XYColorEXT -> XYColorEXT -> Bool
(XYColorEXT -> XYColorEXT -> Bool)
-> (XYColorEXT -> XYColorEXT -> Bool) -> Eq XYColorEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: XYColorEXT -> XYColorEXT -> Bool
== :: XYColorEXT -> XYColorEXT -> Bool
$c/= :: XYColorEXT -> XYColorEXT -> Bool
/= :: XYColorEXT -> XYColorEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (XYColorEXT)
#endif
deriving instance Show XYColorEXT
instance ToCStruct XYColorEXT where
withCStruct :: forall b. XYColorEXT -> (Ptr XYColorEXT -> IO b) -> IO b
withCStruct XYColorEXT
x Ptr XYColorEXT -> IO b
f = Int -> (Ptr XYColorEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr XYColorEXT -> IO b) -> IO b)
-> (Ptr XYColorEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr XYColorEXT
p -> Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
forall b. Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr XYColorEXT
p XYColorEXT
x (Ptr XYColorEXT -> IO b
f Ptr XYColorEXT
p)
pokeCStruct :: forall b. Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
pokeCStruct Ptr XYColorEXT
p XYColorEXT{Float
$sel:x:XYColorEXT :: XYColorEXT -> Float
$sel:y:XYColorEXT :: XYColorEXT -> Float
x :: Float
y :: Float
..} IO b
f = do
Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
x))
Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
y))
IO b
f
cStructSize :: Int
cStructSize = Int
8
cStructAlignment :: Int
cStructAlignment = Int
4
pokeZeroCStruct :: forall b. Ptr XYColorEXT -> IO b -> IO b
pokeZeroCStruct Ptr XYColorEXT
p IO b
f = do
Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
IO b
f
instance FromCStruct XYColorEXT where
peekCStruct :: Ptr XYColorEXT -> IO XYColorEXT
peekCStruct Ptr XYColorEXT
p = do
CFloat
x <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat))
CFloat
y <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat))
XYColorEXT -> IO XYColorEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (XYColorEXT -> IO XYColorEXT) -> XYColorEXT -> IO XYColorEXT
forall a b. (a -> b) -> a -> b
$ Float -> Float -> XYColorEXT
XYColorEXT
(forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @CFloat @Float CFloat
x) (forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @CFloat @Float CFloat
y)
instance Storable XYColorEXT where
sizeOf :: XYColorEXT -> Int
sizeOf ~XYColorEXT
_ = Int
8
alignment :: XYColorEXT -> Int
alignment ~XYColorEXT
_ = Int
4
peek :: Ptr XYColorEXT -> IO XYColorEXT
peek = Ptr XYColorEXT -> IO XYColorEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr XYColorEXT -> XYColorEXT -> IO ()
poke Ptr XYColorEXT
ptr XYColorEXT
poked = Ptr XYColorEXT -> XYColorEXT -> IO () -> IO ()
forall b. Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr XYColorEXT
ptr XYColorEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero XYColorEXT where
zero :: XYColorEXT
zero = Float -> Float -> XYColorEXT
XYColorEXT
Float
forall a. Zero a => a
zero
Float
forall a. Zero a => a
zero
data HdrMetadataEXT (es :: [Type]) = HdrMetadataEXT
{
forall (es :: [*]). HdrMetadataEXT es -> Chain es
next :: Chain es
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryRed :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryGreen :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryBlue :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
whitePoint :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> Float
maxLuminance :: Float
,
forall (es :: [*]). HdrMetadataEXT es -> Float
minLuminance :: Float
,
forall (es :: [*]). HdrMetadataEXT es -> Float
maxContentLightLevel :: Float
,
forall (es :: [*]). HdrMetadataEXT es -> Float
maxFrameAverageLightLevel :: Float
}
deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (HdrMetadataEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (HdrMetadataEXT es)
instance Extensible HdrMetadataEXT where
extensibleTypeName :: String
extensibleTypeName = String
"HdrMetadataEXT"
setNext :: forall (ds :: [*]) (es :: [*]).
HdrMetadataEXT ds -> Chain es -> HdrMetadataEXT es
setNext HdrMetadataEXT{Float
Chain ds
XYColorEXT
$sel:next:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
$sel:displayPrimaryRed:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:displayPrimaryGreen:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:displayPrimaryBlue:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:whitePoint:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:maxLuminance:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:minLuminance:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:maxContentLightLevel:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:maxFrameAverageLightLevel:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
next :: Chain ds
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..} Chain es
next' = HdrMetadataEXT{$sel:next:HdrMetadataEXT :: Chain es
next = Chain es
next', Float
XYColorEXT
$sel:displayPrimaryRed:HdrMetadataEXT :: XYColorEXT
$sel:displayPrimaryGreen:HdrMetadataEXT :: XYColorEXT
$sel:displayPrimaryBlue:HdrMetadataEXT :: XYColorEXT
$sel:whitePoint:HdrMetadataEXT :: XYColorEXT
$sel:maxLuminance:HdrMetadataEXT :: Float
$sel:minLuminance:HdrMetadataEXT :: Float
$sel:maxContentLightLevel:HdrMetadataEXT :: Float
$sel:maxFrameAverageLightLevel:HdrMetadataEXT :: Float
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..}
getNext :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
getNext HdrMetadataEXT{Float
Chain es
XYColorEXT
$sel:next:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
$sel:displayPrimaryRed:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:displayPrimaryGreen:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:displayPrimaryBlue:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:whitePoint:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:maxLuminance:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:minLuminance:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:maxContentLightLevel:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:maxFrameAverageLightLevel:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
next :: Chain es
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..} = Chain es
next
extends :: forall e b proxy. Typeable e => proxy e -> (Extends HdrMetadataEXT e => b) -> Maybe b
extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends HdrMetadataEXT e => b) -> Maybe b
extends proxy e
_ Extends HdrMetadataEXT e => b
f
| Just e :~: HdrVividDynamicMetadataHUAWEI
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @HdrVividDynamicMetadataHUAWEI = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends HdrMetadataEXT e => b
f
| Bool
otherwise = Maybe b
forall a. Maybe a
Nothing
instance ( Extendss HdrMetadataEXT es
, PokeChain es ) => ToCStruct (HdrMetadataEXT es) where
withCStruct :: forall b.
HdrMetadataEXT es -> (Ptr (HdrMetadataEXT es) -> IO b) -> IO b
withCStruct HdrMetadataEXT es
x Ptr (HdrMetadataEXT es) -> IO b
f = Int -> (Ptr (HdrMetadataEXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr (HdrMetadataEXT es) -> IO b) -> IO b)
-> (Ptr (HdrMetadataEXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (HdrMetadataEXT es)
p -> Ptr (HdrMetadataEXT es) -> HdrMetadataEXT es -> IO b -> IO b
forall b.
Ptr (HdrMetadataEXT es) -> HdrMetadataEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (HdrMetadataEXT es)
p HdrMetadataEXT es
x (Ptr (HdrMetadataEXT es) -> IO b
f Ptr (HdrMetadataEXT es)
p)
pokeCStruct :: forall b.
Ptr (HdrMetadataEXT es) -> HdrMetadataEXT es -> IO b -> IO b
pokeCStruct Ptr (HdrMetadataEXT es)
p HdrMetadataEXT{Float
Chain es
XYColorEXT
$sel:next:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
$sel:displayPrimaryRed:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:displayPrimaryGreen:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:displayPrimaryBlue:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:whitePoint:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
$sel:maxLuminance:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:minLuminance:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:maxContentLightLevel:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
$sel:maxFrameAverageLightLevel:HdrMetadataEXT :: forall (es :: [*]). HdrMetadataEXT es -> Float
next :: Chain es
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_HDR_METADATA_EXT)
Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr XYColorEXT)) (XYColorEXT
displayPrimaryRed)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr XYColorEXT)) (XYColorEXT
displayPrimaryGreen)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr XYColorEXT)) (XYColorEXT
displayPrimaryBlue)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr XYColorEXT)) (XYColorEXT
whitePoint)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
maxLuminance))
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
minLuminance))
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
maxContentLightLevel))
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
maxFrameAverageLightLevel))
IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
cStructSize :: Int
cStructSize = Int
64
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr (HdrMetadataEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (HdrMetadataEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_HDR_METADATA_EXT)
Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr XYColorEXT)) (XYColorEXT
forall a. Zero a => a
zero)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr XYColorEXT)) (XYColorEXT
forall a. Zero a => a
zero)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr XYColorEXT)) (XYColorEXT
forall a. Zero a => a
zero)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr XYColorEXT -> XYColorEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr XYColorEXT)) (XYColorEXT
forall a. Zero a => a
zero)
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
instance ( Extendss HdrMetadataEXT es
, PeekChain es ) => FromCStruct (HdrMetadataEXT es) where
peekCStruct :: Ptr (HdrMetadataEXT es) -> IO (HdrMetadataEXT es)
peekCStruct Ptr (HdrMetadataEXT es)
p = do
Ptr ()
pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (Ptr () -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
XYColorEXT
displayPrimaryRed <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @XYColorEXT ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr XYColorEXT))
XYColorEXT
displayPrimaryGreen <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @XYColorEXT ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr XYColorEXT))
XYColorEXT
displayPrimaryBlue <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @XYColorEXT ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr XYColorEXT))
XYColorEXT
whitePoint <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @XYColorEXT ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr XYColorEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr XYColorEXT))
CFloat
maxLuminance <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr CFloat))
CFloat
minLuminance <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr CFloat))
CFloat
maxContentLightLevel <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr CFloat))
CFloat
maxFrameAverageLightLevel <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr CFloat))
HdrMetadataEXT es -> IO (HdrMetadataEXT es)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (HdrMetadataEXT es -> IO (HdrMetadataEXT es))
-> HdrMetadataEXT es -> IO (HdrMetadataEXT es)
forall a b. (a -> b) -> a -> b
$ Chain es
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> Float
-> Float
-> Float
-> Float
-> HdrMetadataEXT es
forall (es :: [*]).
Chain es
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> Float
-> Float
-> Float
-> Float
-> HdrMetadataEXT es
HdrMetadataEXT
Chain es
next
XYColorEXT
displayPrimaryRed
XYColorEXT
displayPrimaryGreen
XYColorEXT
displayPrimaryBlue
XYColorEXT
whitePoint
(forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @CFloat @Float CFloat
maxLuminance)
(forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @CFloat @Float CFloat
minLuminance)
(forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @CFloat @Float CFloat
maxContentLightLevel)
(forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce @CFloat @Float CFloat
maxFrameAverageLightLevel)
instance es ~ '[] => Zero (HdrMetadataEXT es) where
zero :: HdrMetadataEXT es
zero = Chain es
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> Float
-> Float
-> Float
-> Float
-> HdrMetadataEXT es
forall (es :: [*]).
Chain es
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> Float
-> Float
-> Float
-> Float
-> HdrMetadataEXT es
HdrMetadataEXT
()
XYColorEXT
forall a. Zero a => a
zero
XYColorEXT
forall a. Zero a => a
zero
XYColorEXT
forall a. Zero a => a
zero
XYColorEXT
forall a. Zero a => a
zero
Float
forall a. Zero a => a
zero
Float
forall a. Zero a => a
zero
Float
forall a. Zero a => a
zero
Float
forall a. Zero a => a
zero
type EXT_HDR_METADATA_SPEC_VERSION = 3
pattern EXT_HDR_METADATA_SPEC_VERSION :: forall a . Integral a => a
pattern $mEXT_HDR_METADATA_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_HDR_METADATA_SPEC_VERSION :: forall a. Integral a => a
EXT_HDR_METADATA_SPEC_VERSION = 3
type EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"
pattern EXT_HDR_METADATA_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mEXT_HDR_METADATA_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_HDR_METADATA_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"