{-# language CPP #-}
-- | = Name
--
-- XR_MSFT_spatial_graph_bridge - instance extension
--
-- = Specification
--
-- See
-- <https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_MSFT_spatial_graph_bridge  XR_MSFT_spatial_graph_bridge>
-- in the main specification for complete information.
--
-- = Registered Extension Number
--
-- 50
--
-- = Revision
--
-- 1
--
-- = Extension and Version Dependencies
--
-- -   Requires OpenXR 1.0
--
-- = See Also
--
-- 'SpatialGraphNodeSpaceCreateInfoMSFT', 'SpatialGraphNodeTypeMSFT',
-- 'createSpatialGraphNodeSpaceMSFT'
--
-- = Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_MSFT_spatial_graph_bridge OpenXR Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module OpenXR.Extensions.XR_MSFT_spatial_graph_bridge  ( createSpatialGraphNodeSpaceMSFT
                                                       , withSpatialGraphNodeSpaceMSFT
                                                       , SpatialGraphNodeSpaceCreateInfoMSFT(..)
                                                       , SpatialGraphNodeTypeMSFT( SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT
                                                                                 , SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT
                                                                                 , ..
                                                                                 )
                                                       , MSFT_spatial_graph_bridge_SPEC_VERSION
                                                       , pattern MSFT_spatial_graph_bridge_SPEC_VERSION
                                                       , MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME
                                                       , pattern MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME
                                                       ) where

import OpenXR.CStruct.Utils (FixedArray)
import OpenXR.Internal.Utils (enumReadPrec)
import OpenXR.Internal.Utils (enumShowsPrec)
import OpenXR.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Foreign.Marshal.Alloc (allocaBytesAligned)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showsPrec)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import OpenXR.CStruct (FromCStruct)
import OpenXR.CStruct (FromCStruct(..))
import OpenXR.CStruct (ToCStruct)
import OpenXR.CStruct (ToCStruct(..))
import OpenXR.Zero (Zero)
import OpenXR.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Typeable (Typeable)
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 Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word8)
import Data.ByteString (ByteString)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import OpenXR.Core10.Space (destroySpace)
import OpenXR.CStruct.Utils (peekByteStringFromSizedVectorPtr)
import OpenXR.CStruct.Utils (pokeFixedLengthByteString)
import OpenXR.Dynamic (InstanceCmds(pXrCreateSpatialGraphNodeSpaceMSFT))
import OpenXR.Exception (OpenXrException(..))
import OpenXR.Core10.Space (Posef)
import OpenXR.Core10.Enums.Result (Result)
import OpenXR.Core10.Enums.Result (Result(..))
import OpenXR.Core10.Handles (Session)
import OpenXR.Core10.Handles (Session(..))
import OpenXR.Core10.Handles (Session_T)
import OpenXR.Core10.Handles (Space)
import OpenXR.Core10.Handles (Space(Space))
import OpenXR.Core10.Handles (Space_T)
import OpenXR.Core10.Enums.StructureType (StructureType)
import OpenXR.Core10.Enums.Result (Result(SUCCESS))
import OpenXR.Core10.Enums.StructureType (StructureType(TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkXrCreateSpatialGraphNodeSpaceMSFT
  :: FunPtr (Ptr Session_T -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Ptr (Ptr Space_T) -> IO Result) -> Ptr Session_T -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Ptr (Ptr Space_T) -> IO Result

-- | xrCreateSpatialGraphNodeSpaceMSFT - Create an
-- 'OpenXR.Core10.Handles.Space' from a spatial graph node.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-xrCreateSpatialGraphNodeSpaceMSFT-extension-notenabled# The @@
--     extension /must/ be enabled prior to calling
--     'createSpatialGraphNodeSpaceMSFT'
--
-- -   #VUID-xrCreateSpatialGraphNodeSpaceMSFT-session-parameter# @session@
--     /must/ be a valid 'OpenXR.Core10.Handles.Session' handle
--
-- -   #VUID-xrCreateSpatialGraphNodeSpaceMSFT-createInfo-parameter#
--     @createInfo@ /must/ be a pointer to a valid
--     'SpatialGraphNodeSpaceCreateInfoMSFT' structure
--
-- -   #VUID-xrCreateSpatialGraphNodeSpaceMSFT-space-parameter# @space@
--     /must/ be a pointer to an 'OpenXR.Core10.Handles.Space' handle
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#fundamentals-successcodes Success>]
--
--     -   'OpenXR.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#fundamentals-errorcodes Failure>]
--
--     -   'OpenXR.Core10.Enums.Result.ERROR_INSTANCE_LOST'
--
--     -   'OpenXR.Core10.Enums.Result.ERROR_OUT_OF_MEMORY'
--
--     -   'OpenXR.Core10.Enums.Result.ERROR_FUNCTION_UNSUPPORTED'
--
--     -   'OpenXR.Core10.Enums.Result.ERROR_VALIDATION_FAILURE'
--
--     -   'OpenXR.Core10.Enums.Result.ERROR_HANDLE_INVALID'
--
--     -   'OpenXR.Core10.Enums.Result.ERROR_SESSION_LOST'
--
--     -   'OpenXR.Core10.Enums.Result.SESSION_LOSS_PENDING'
--
--     -   'OpenXR.Core10.Enums.Result.ERROR_POSE_INVALID'
--
-- = See Also
--
-- 'OpenXR.Core10.Handles.Session', 'OpenXR.Core10.Handles.Space',
-- 'SpatialGraphNodeSpaceCreateInfoMSFT'
createSpatialGraphNodeSpaceMSFT :: forall io
                                 . (MonadIO io)
                                => -- | @session@ is the 'OpenXR.Core10.Handles.Session' which will use the
                                   -- created space.
                                   Session
                                -> -- | @createInfo@ is an 'SpatialGraphNodeSpaceCreateInfoMSFT' specifying the
                                   -- space to be created.
                                   SpatialGraphNodeSpaceCreateInfoMSFT
                                -> io (Space)
createSpatialGraphNodeSpaceMSFT :: Session -> SpatialGraphNodeSpaceCreateInfoMSFT -> io Space
createSpatialGraphNodeSpaceMSFT session :: Session
session createInfo :: SpatialGraphNodeSpaceCreateInfoMSFT
createInfo = IO Space -> io Space
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Space -> io Space)
-> (ContT Space IO Space -> IO Space)
-> ContT Space IO Space
-> io Space
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Space IO Space -> IO Space
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Space IO Space -> io Space)
-> ContT Space IO Space -> io Space
forall a b. (a -> b) -> a -> b
$ do
  let cmds :: InstanceCmds
cmds = Session -> InstanceCmds
instanceCmds (Session
session :: Session)
  let xrCreateSpatialGraphNodeSpaceMSFTPtr :: FunPtr
  (Ptr Session_T
   -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
   -> ("space" ::: Ptr (Ptr Space_T))
   -> IO Result)
xrCreateSpatialGraphNodeSpaceMSFTPtr = InstanceCmds
-> FunPtr
     (Ptr Session_T
      -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
      -> ("space" ::: Ptr (Ptr Space_T))
      -> IO Result)
pXrCreateSpatialGraphNodeSpaceMSFT InstanceCmds
cmds
  IO () -> ContT Space IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Space IO ()) -> IO () -> ContT Space IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Session_T
   -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
   -> ("space" ::: Ptr (Ptr Space_T))
   -> IO Result)
xrCreateSpatialGraphNodeSpaceMSFTPtr FunPtr
  (Ptr Session_T
   -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
   -> ("space" ::: Ptr (Ptr Space_T))
   -> IO Result)
-> FunPtr
     (Ptr Session_T
      -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
      -> ("space" ::: Ptr (Ptr Space_T))
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Session_T
   -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
   -> ("space" ::: Ptr (Ptr Space_T))
   -> IO Result)
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 "" "The function pointer for xrCreateSpatialGraphNodeSpaceMSFT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let xrCreateSpatialGraphNodeSpaceMSFT' :: Ptr Session_T
-> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> ("space" ::: Ptr (Ptr Space_T))
-> IO Result
xrCreateSpatialGraphNodeSpaceMSFT' = FunPtr
  (Ptr Session_T
   -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
   -> ("space" ::: Ptr (Ptr Space_T))
   -> IO Result)
-> Ptr Session_T
-> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> ("space" ::: Ptr (Ptr Space_T))
-> IO Result
mkXrCreateSpatialGraphNodeSpaceMSFT FunPtr
  (Ptr Session_T
   -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
   -> ("space" ::: Ptr (Ptr Space_T))
   -> IO Result)
xrCreateSpatialGraphNodeSpaceMSFTPtr
  Ptr SpatialGraphNodeSpaceCreateInfoMSFT
createInfo' <- ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO Space) -> IO Space)
-> ContT Space IO (Ptr SpatialGraphNodeSpaceCreateInfoMSFT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO Space)
  -> IO Space)
 -> ContT Space IO (Ptr SpatialGraphNodeSpaceCreateInfoMSFT))
-> ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO Space)
    -> IO Space)
-> ContT Space IO (Ptr SpatialGraphNodeSpaceCreateInfoMSFT)
forall a b. (a -> b) -> a -> b
$ SpatialGraphNodeSpaceCreateInfoMSFT
-> (Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO Space)
-> IO Space
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (SpatialGraphNodeSpaceCreateInfoMSFT
createInfo)
  "space" ::: Ptr (Ptr Space_T)
pSpace <- ((("space" ::: Ptr (Ptr Space_T)) -> IO Space) -> IO Space)
-> ContT Space IO ("space" ::: Ptr (Ptr Space_T))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("space" ::: Ptr (Ptr Space_T)) -> IO Space) -> IO Space)
 -> ContT Space IO ("space" ::: Ptr (Ptr Space_T)))
-> ((("space" ::: Ptr (Ptr Space_T)) -> IO Space) -> IO Space)
-> ContT Space IO ("space" ::: Ptr (Ptr Space_T))
forall a b. (a -> b) -> a -> b
$ IO ("space" ::: Ptr (Ptr Space_T))
-> (("space" ::: Ptr (Ptr Space_T)) -> IO ())
-> (("space" ::: Ptr (Ptr Space_T)) -> IO Space)
-> IO Space
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("space" ::: Ptr (Ptr Space_T))
forall a. Int -> IO (Ptr a)
callocBytes @(Ptr Space_T) 8) ("space" ::: Ptr (Ptr Space_T)) -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT Space IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT Space IO Result)
-> IO Result -> ContT Space IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent "xrCreateSpatialGraphNodeSpaceMSFT" (Ptr Session_T
-> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> ("space" ::: Ptr (Ptr Space_T))
-> IO Result
xrCreateSpatialGraphNodeSpaceMSFT' (Session -> Ptr Session_T
sessionHandle (Session
session)) Ptr SpatialGraphNodeSpaceCreateInfoMSFT
createInfo' ("space" ::: Ptr (Ptr Space_T)
pSpace))
  IO () -> ContT Space IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Space IO ()) -> IO () -> ContT Space IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (OpenXrException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> OpenXrException
OpenXrException Result
r))
  Ptr Space_T
space <- IO (Ptr Space_T) -> ContT Space IO (Ptr Space_T)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO (Ptr Space_T) -> ContT Space IO (Ptr Space_T))
-> IO (Ptr Space_T) -> ContT Space IO (Ptr Space_T)
forall a b. (a -> b) -> a -> b
$ ("space" ::: Ptr (Ptr Space_T)) -> IO (Ptr Space_T)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr Space_T) "space" ::: Ptr (Ptr Space_T)
pSpace
  Space -> ContT Space IO Space
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Space -> ContT Space IO Space) -> Space -> ContT Space IO Space
forall a b. (a -> b) -> a -> b
$ (((\h :: Ptr Space_T
h -> Ptr Space_T -> InstanceCmds -> Space
Space Ptr Space_T
h InstanceCmds
cmds ) Ptr Space_T
space))

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createSpatialGraphNodeSpaceMSFT' and 'destroySpace'
--
-- To ensure that 'destroySpace' is always called: pass
-- 'Control.Exception.bracket' (or the allocate function from your
-- favourite resource management library) as the last argument.
-- To just extract the pair pass '(,)' as the last argument.
--
withSpatialGraphNodeSpaceMSFT :: forall io r . MonadIO io => Session -> SpatialGraphNodeSpaceCreateInfoMSFT -> (io Space -> (Space -> io ()) -> r) -> r
withSpatialGraphNodeSpaceMSFT :: Session
-> SpatialGraphNodeSpaceCreateInfoMSFT
-> (io Space -> (Space -> io ()) -> r)
-> r
withSpatialGraphNodeSpaceMSFT session :: Session
session createInfo :: SpatialGraphNodeSpaceCreateInfoMSFT
createInfo b :: io Space -> (Space -> io ()) -> r
b =
  io Space -> (Space -> io ()) -> r
b (Session -> SpatialGraphNodeSpaceCreateInfoMSFT -> io Space
forall (io :: * -> *).
MonadIO io =>
Session -> SpatialGraphNodeSpaceCreateInfoMSFT -> io Space
createSpatialGraphNodeSpaceMSFT Session
session SpatialGraphNodeSpaceCreateInfoMSFT
createInfo)
    (\(Space
o0) -> Space -> io ()
forall (io :: * -> *). MonadIO io => Space -> io ()
destroySpace Space
o0)


-- | XrSpatialGraphNodeSpaceCreateInfoMSFT - The information to create space
-- from a spatial graph node.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-extension-notenabled#
--     The @@ extension /must/ be enabled prior to using
--     'SpatialGraphNodeSpaceCreateInfoMSFT'
--
-- -   #VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-type-type# @type@ /must/
--     be
--     'OpenXR.Core10.Enums.StructureType.TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT'
--
-- -   #VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-next-next# @next@ /must/
--     be @NULL@ or a valid pointer to the
--     <https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#valid-usage-for-structure-pointer-chains next structure in a structure chain>
--
-- -   #VUID-XrSpatialGraphNodeSpaceCreateInfoMSFT-nodeType-parameter#
--     @nodeType@ /must/ be a valid 'SpatialGraphNodeTypeMSFT' value
--
-- = See Also
--
-- 'OpenXR.Core10.Space.Posef', 'SpatialGraphNodeTypeMSFT',
-- 'OpenXR.Core10.Enums.StructureType.StructureType',
-- 'createSpatialGraphNodeSpaceMSFT'
data SpatialGraphNodeSpaceCreateInfoMSFT = SpatialGraphNodeSpaceCreateInfoMSFT
  { -- | @nodeType@ is an 'SpatialGraphNodeTypeMSFT' specifying the spatial node
    -- type.
    SpatialGraphNodeSpaceCreateInfoMSFT -> SpatialGraphNodeTypeMSFT
nodeType :: SpatialGraphNodeTypeMSFT
  , -- | @nodeId@ is a global unique identifier (a.k.a. GUID or 16 byte array),
    -- representing the spatial node that is being tracked.
    SpatialGraphNodeSpaceCreateInfoMSFT -> ByteString
nodeId :: ByteString
  , -- | @pose@ is an 'OpenXR.Core10.Space.Posef' defining the position and
    -- orientation of the new space’s origin within the natural reference frame
    -- of the spatial graph node.
    SpatialGraphNodeSpaceCreateInfoMSFT -> Posef
pose :: Posef
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (SpatialGraphNodeSpaceCreateInfoMSFT)
#endif
deriving instance Show SpatialGraphNodeSpaceCreateInfoMSFT

instance ToCStruct SpatialGraphNodeSpaceCreateInfoMSFT where
  withCStruct :: SpatialGraphNodeSpaceCreateInfoMSFT
-> (Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO b) -> IO b
withCStruct x :: SpatialGraphNodeSpaceCreateInfoMSFT
x f :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO b
f = Int
-> Int -> (Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO b) -> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 64 8 ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO b) -> IO b)
-> (Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p -> Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> SpatialGraphNodeSpaceCreateInfoMSFT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p SpatialGraphNodeSpaceCreateInfoMSFT
x (Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO b
f Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p)
  pokeCStruct :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> SpatialGraphNodeSpaceCreateInfoMSFT -> IO b -> IO b
pokeCStruct p :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p SpatialGraphNodeSpaceCreateInfoMSFT{..} f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> Int -> Ptr SpatialGraphNodeTypeMSFT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr SpatialGraphNodeTypeMSFT)) (SpatialGraphNodeTypeMSFT
nodeType)
    Ptr (FixedArray 16 Word8) -> ByteString -> IO ()
forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n Word8) -> ByteString -> IO ()
pokeFixedLengthByteString ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> Int -> Ptr (FixedArray 16 Word8)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr (FixedArray 16 Word8))) (ByteString
nodeId)
    Ptr Posef -> Posef -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Int -> Ptr Posef
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 36 :: Ptr Posef)) (Posef
pose)
    IO b
f
  cStructSize :: Int
cStructSize = 64
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> IO b -> IO b
pokeZeroCStruct p :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> Int -> Ptr SpatialGraphNodeTypeMSFT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr SpatialGraphNodeTypeMSFT)) (SpatialGraphNodeTypeMSFT
forall a. Zero a => a
zero)
    Ptr (FixedArray 16 Word8) -> ByteString -> IO ()
forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n Word8) -> ByteString -> IO ()
pokeFixedLengthByteString ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> Int -> Ptr (FixedArray 16 Word8)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr (FixedArray 16 Word8))) (ByteString
forall a. Monoid a => a
mempty)
    Ptr Posef -> Posef -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Int -> Ptr Posef
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 36 :: Ptr Posef)) (Posef
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct SpatialGraphNodeSpaceCreateInfoMSFT where
  peekCStruct :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> IO SpatialGraphNodeSpaceCreateInfoMSFT
peekCStruct p :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p = do
    SpatialGraphNodeTypeMSFT
nodeType <- Ptr SpatialGraphNodeTypeMSFT -> IO SpatialGraphNodeTypeMSFT
forall a. Storable a => Ptr a -> IO a
peek @SpatialGraphNodeTypeMSFT ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> Int -> Ptr SpatialGraphNodeTypeMSFT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr SpatialGraphNodeTypeMSFT))
    ByteString
nodeId <- Ptr (FixedArray 16 Word8) -> IO ByteString
forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n Word8) -> IO ByteString
peekByteStringFromSizedVectorPtr ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> Int -> Ptr (FixedArray 16 Word8)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr (FixedArray 16 Word8)))
    Posef
pose <- Ptr Posef -> IO Posef
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @Posef ((Ptr SpatialGraphNodeSpaceCreateInfoMSFT
p Ptr SpatialGraphNodeSpaceCreateInfoMSFT -> Int -> Ptr Posef
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 36 :: Ptr Posef))
    SpatialGraphNodeSpaceCreateInfoMSFT
-> IO SpatialGraphNodeSpaceCreateInfoMSFT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SpatialGraphNodeSpaceCreateInfoMSFT
 -> IO SpatialGraphNodeSpaceCreateInfoMSFT)
-> SpatialGraphNodeSpaceCreateInfoMSFT
-> IO SpatialGraphNodeSpaceCreateInfoMSFT
forall a b. (a -> b) -> a -> b
$ SpatialGraphNodeTypeMSFT
-> ByteString -> Posef -> SpatialGraphNodeSpaceCreateInfoMSFT
SpatialGraphNodeSpaceCreateInfoMSFT
             SpatialGraphNodeTypeMSFT
nodeType ByteString
nodeId Posef
pose

instance Storable SpatialGraphNodeSpaceCreateInfoMSFT where
  sizeOf :: SpatialGraphNodeSpaceCreateInfoMSFT -> Int
sizeOf ~SpatialGraphNodeSpaceCreateInfoMSFT
_ = 64
  alignment :: SpatialGraphNodeSpaceCreateInfoMSFT -> Int
alignment ~SpatialGraphNodeSpaceCreateInfoMSFT
_ = 8
  peek :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> IO SpatialGraphNodeSpaceCreateInfoMSFT
peek = Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> IO SpatialGraphNodeSpaceCreateInfoMSFT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> SpatialGraphNodeSpaceCreateInfoMSFT -> IO ()
poke ptr :: Ptr SpatialGraphNodeSpaceCreateInfoMSFT
ptr poked :: SpatialGraphNodeSpaceCreateInfoMSFT
poked = Ptr SpatialGraphNodeSpaceCreateInfoMSFT
-> SpatialGraphNodeSpaceCreateInfoMSFT -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr SpatialGraphNodeSpaceCreateInfoMSFT
ptr SpatialGraphNodeSpaceCreateInfoMSFT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero SpatialGraphNodeSpaceCreateInfoMSFT where
  zero :: SpatialGraphNodeSpaceCreateInfoMSFT
zero = SpatialGraphNodeTypeMSFT
-> ByteString -> Posef -> SpatialGraphNodeSpaceCreateInfoMSFT
SpatialGraphNodeSpaceCreateInfoMSFT
           SpatialGraphNodeTypeMSFT
forall a. Zero a => a
zero
           ByteString
forall a. Monoid a => a
mempty
           Posef
forall a. Zero a => a
zero


-- | XrSpatialGraphNodeTypeMSFT - The type of spatial graph node.
--
-- = Description
--
-- There are two types of spatial graph nodes: static and dynamic.
--
-- Static spatial nodes track the pose of a fixed location in the world
-- relative to reference spaces. The tracking of static nodes /may/ slowly
-- adjust the pose over time for better accuracy but the pose is relatively
-- stable in the short term, such as between rendering frames. For example,
-- a QR code tracking library can use a static node to represent the
-- location of the tracked QR code. Static spatial nodes are represented by
-- 'SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT'.
--
-- Dynamic spatial nodes track the pose of a physical object that moves
-- continuously relative to reference spaces. The pose of dynamic spatial
-- nodes /can/ be very different within the duration of a rendering frame.
-- It is important for the application to use the correct timestamp to
-- query the space location using 'OpenXR.Core10.Space.locateSpace'. For
-- example, a color camera mounted in front of a HMD is also tracked by the
-- HMD so a web camera library can use a dynamic node to represent the
-- camera location. Dynamic spatial nodes are represented by
-- 'SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT'.
--
-- = See Also
--
-- 'SpatialGraphNodeSpaceCreateInfoMSFT'
newtype SpatialGraphNodeTypeMSFT = SpatialGraphNodeTypeMSFT Int32
  deriving newtype (SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
(SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool)
-> (SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool)
-> Eq SpatialGraphNodeTypeMSFT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
$c/= :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
== :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
$c== :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
Eq, Eq SpatialGraphNodeTypeMSFT
Eq SpatialGraphNodeTypeMSFT =>
(SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Ordering)
-> (SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool)
-> (SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool)
-> (SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool)
-> (SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool)
-> (SpatialGraphNodeTypeMSFT
    -> SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT)
-> (SpatialGraphNodeTypeMSFT
    -> SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT)
-> Ord SpatialGraphNodeTypeMSFT
SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Ordering
SpatialGraphNodeTypeMSFT
-> SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SpatialGraphNodeTypeMSFT
-> SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT
$cmin :: SpatialGraphNodeTypeMSFT
-> SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT
max :: SpatialGraphNodeTypeMSFT
-> SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT
$cmax :: SpatialGraphNodeTypeMSFT
-> SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT
>= :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
$c>= :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
> :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
$c> :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
<= :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
$c<= :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
< :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
$c< :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Bool
compare :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Ordering
$ccompare :: SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> Ordering
$cp1Ord :: Eq SpatialGraphNodeTypeMSFT
Ord, Ptr b -> Int -> IO SpatialGraphNodeTypeMSFT
Ptr b -> Int -> SpatialGraphNodeTypeMSFT -> IO ()
Ptr SpatialGraphNodeTypeMSFT -> IO SpatialGraphNodeTypeMSFT
Ptr SpatialGraphNodeTypeMSFT -> Int -> IO SpatialGraphNodeTypeMSFT
Ptr SpatialGraphNodeTypeMSFT
-> Int -> SpatialGraphNodeTypeMSFT -> IO ()
Ptr SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> IO ()
SpatialGraphNodeTypeMSFT -> Int
(SpatialGraphNodeTypeMSFT -> Int)
-> (SpatialGraphNodeTypeMSFT -> Int)
-> (Ptr SpatialGraphNodeTypeMSFT
    -> Int -> IO SpatialGraphNodeTypeMSFT)
-> (Ptr SpatialGraphNodeTypeMSFT
    -> Int -> SpatialGraphNodeTypeMSFT -> IO ())
-> (forall b. Ptr b -> Int -> IO SpatialGraphNodeTypeMSFT)
-> (forall b. Ptr b -> Int -> SpatialGraphNodeTypeMSFT -> IO ())
-> (Ptr SpatialGraphNodeTypeMSFT -> IO SpatialGraphNodeTypeMSFT)
-> (Ptr SpatialGraphNodeTypeMSFT
    -> SpatialGraphNodeTypeMSFT -> IO ())
-> Storable SpatialGraphNodeTypeMSFT
forall b. Ptr b -> Int -> IO SpatialGraphNodeTypeMSFT
forall b. Ptr b -> Int -> SpatialGraphNodeTypeMSFT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> IO ()
$cpoke :: Ptr SpatialGraphNodeTypeMSFT -> SpatialGraphNodeTypeMSFT -> IO ()
peek :: Ptr SpatialGraphNodeTypeMSFT -> IO SpatialGraphNodeTypeMSFT
$cpeek :: Ptr SpatialGraphNodeTypeMSFT -> IO SpatialGraphNodeTypeMSFT
pokeByteOff :: Ptr b -> Int -> SpatialGraphNodeTypeMSFT -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> SpatialGraphNodeTypeMSFT -> IO ()
peekByteOff :: Ptr b -> Int -> IO SpatialGraphNodeTypeMSFT
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SpatialGraphNodeTypeMSFT
pokeElemOff :: Ptr SpatialGraphNodeTypeMSFT
-> Int -> SpatialGraphNodeTypeMSFT -> IO ()
$cpokeElemOff :: Ptr SpatialGraphNodeTypeMSFT
-> Int -> SpatialGraphNodeTypeMSFT -> IO ()
peekElemOff :: Ptr SpatialGraphNodeTypeMSFT -> Int -> IO SpatialGraphNodeTypeMSFT
$cpeekElemOff :: Ptr SpatialGraphNodeTypeMSFT -> Int -> IO SpatialGraphNodeTypeMSFT
alignment :: SpatialGraphNodeTypeMSFT -> Int
$calignment :: SpatialGraphNodeTypeMSFT -> Int
sizeOf :: SpatialGraphNodeTypeMSFT -> Int
$csizeOf :: SpatialGraphNodeTypeMSFT -> Int
Storable, SpatialGraphNodeTypeMSFT
SpatialGraphNodeTypeMSFT -> Zero SpatialGraphNodeTypeMSFT
forall a. a -> Zero a
zero :: SpatialGraphNodeTypeMSFT
$czero :: SpatialGraphNodeTypeMSFT
Zero)
-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error

-- No documentation found for Nested "XrSpatialGraphNodeTypeMSFT" "XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT"
pattern $bSPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT :: SpatialGraphNodeTypeMSFT
$mSPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT :: forall r.
SpatialGraphNodeTypeMSFT -> (Void# -> r) -> (Void# -> r) -> r
SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT  = SpatialGraphNodeTypeMSFT 1
-- No documentation found for Nested "XrSpatialGraphNodeTypeMSFT" "XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT"
pattern $bSPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT :: SpatialGraphNodeTypeMSFT
$mSPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT :: forall r.
SpatialGraphNodeTypeMSFT -> (Void# -> r) -> (Void# -> r) -> r
SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT = SpatialGraphNodeTypeMSFT 2
{-# complete SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT,
             SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT :: SpatialGraphNodeTypeMSFT #-}

conNameSpatialGraphNodeTypeMSFT :: String
conNameSpatialGraphNodeTypeMSFT :: String
conNameSpatialGraphNodeTypeMSFT = "SpatialGraphNodeTypeMSFT"

enumPrefixSpatialGraphNodeTypeMSFT :: String
enumPrefixSpatialGraphNodeTypeMSFT :: String
enumPrefixSpatialGraphNodeTypeMSFT = "SPATIAL_GRAPH_NODE_TYPE_"

showTableSpatialGraphNodeTypeMSFT :: [(SpatialGraphNodeTypeMSFT, String)]
showTableSpatialGraphNodeTypeMSFT :: [(SpatialGraphNodeTypeMSFT, String)]
showTableSpatialGraphNodeTypeMSFT =
  [(SpatialGraphNodeTypeMSFT
SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT, "STATIC_MSFT"), (SpatialGraphNodeTypeMSFT
SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT, "DYNAMIC_MSFT")]

instance Show SpatialGraphNodeTypeMSFT where
  showsPrec :: Int -> SpatialGraphNodeTypeMSFT -> ShowS
showsPrec = String
-> [(SpatialGraphNodeTypeMSFT, String)]
-> String
-> (SpatialGraphNodeTypeMSFT -> Int32)
-> (Int32 -> ShowS)
-> Int
-> SpatialGraphNodeTypeMSFT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixSpatialGraphNodeTypeMSFT
                            [(SpatialGraphNodeTypeMSFT, String)]
showTableSpatialGraphNodeTypeMSFT
                            String
conNameSpatialGraphNodeTypeMSFT
                            (\(SpatialGraphNodeTypeMSFT x :: Int32
x) -> Int32
x)
                            (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 11)

instance Read SpatialGraphNodeTypeMSFT where
  readPrec :: ReadPrec SpatialGraphNodeTypeMSFT
readPrec = String
-> [(SpatialGraphNodeTypeMSFT, String)]
-> String
-> (Int32 -> SpatialGraphNodeTypeMSFT)
-> ReadPrec SpatialGraphNodeTypeMSFT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixSpatialGraphNodeTypeMSFT
                          [(SpatialGraphNodeTypeMSFT, String)]
showTableSpatialGraphNodeTypeMSFT
                          String
conNameSpatialGraphNodeTypeMSFT
                          Int32 -> SpatialGraphNodeTypeMSFT
SpatialGraphNodeTypeMSFT


type MSFT_spatial_graph_bridge_SPEC_VERSION = 1

-- No documentation found for TopLevel "XR_MSFT_spatial_graph_bridge_SPEC_VERSION"
pattern MSFT_spatial_graph_bridge_SPEC_VERSION :: forall a . Integral a => a
pattern $bMSFT_spatial_graph_bridge_SPEC_VERSION :: a
$mMSFT_spatial_graph_bridge_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
MSFT_spatial_graph_bridge_SPEC_VERSION = 1


type MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME = "XR_MSFT_spatial_graph_bridge"

-- No documentation found for TopLevel "XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME"
pattern MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bMSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME :: a
$mMSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME = "XR_MSFT_spatial_graph_bridge"