//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0015
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Foundation.Numerics.idl";
import "Windows.Graphics.DirectX.Direct3D11.idl";
import "Windows.Perception.idl";
import "Windows.Perception.Spatial.idl";
import "Windows.UI.Core.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Efoundation2Enumerics_h__)")
cpp_quote("#include <Windows.Foundation.Numerics.h>")
cpp_quote("#endif // !defined(__windows2Efoundation2Enumerics_h__)")
cpp_quote("#if !defined(__windows2Egraphics2Edirectx2Edirect3d11_h__)")
cpp_quote("#include <Windows.Graphics.DirectX.Direct3D11.h>")
cpp_quote("#endif // !defined(__windows2Egraphics2Edirectx2Edirect3d11_h__)")
cpp_quote("#if !defined(__windows2Eperception_h__)")
cpp_quote("#include <Windows.Perception.h>")
cpp_quote("#endif // !defined(__windows2Eperception_h__)")
cpp_quote("#if !defined(__windows2Eperception2Espatial_h__)")
cpp_quote("#include <Windows.Perception.Spatial.h>")
cpp_quote("#endif // !defined(__windows2Eperception2Espatial_h__)")
cpp_quote("#if !defined(__windows2Eui2Ecore_h__)")
cpp_quote("#include <Windows.UI.Core.h>")
cpp_quote("#endif // !defined(__windows2Eui2Ecore_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        runtimeclass Deferral;
    }
}
namespace Windows
{
    namespace Foundation
    {
        namespace Numerics
        {
            typedef struct Matrix4x4 Matrix4x4;

            typedef struct Vector3 Vector3;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        typedef struct Rect Rect;

        typedef struct Size Size;

        typedef struct TimeSpan TimeSpan;
    }
}
namespace Windows
{
    namespace Graphics
    {
        namespace DirectX
        {
            namespace Direct3D11
            {
                interface IDirect3DDevice;

                interface IDirect3DSurface;
            }
        }
    }
}
namespace Windows
{
    namespace Perception
    {
        runtimeclass PerceptionTimestamp;
    }
}
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            typedef struct SpatialBoundingFrustum SpatialBoundingFrustum;

            runtimeclass SpatialCoordinateSystem;
        }
    }
}
namespace Windows
{
    namespace UI
    {
        namespace Core
        {
            runtimeclass CoreWindow;
        }
    }
}
namespace Windows
{
    namespace Graphics
    {
        namespace Holographic
        {
            typedef enum HolographicFramePresentResult HolographicFramePresentResult;

            typedef enum HolographicFramePresentWaitBehavior HolographicFramePresentWaitBehavior;

            typedef struct HolographicAdapterId HolographicAdapterId;

            typedef struct HolographicStereoTransform HolographicStereoTransform;

            interface IHolographicCamera;

            interface IHolographicCameraPose;

            interface IHolographicCameraRenderingParameters;

            interface IHolographicFrame;

            interface IHolographicFramePrediction;

            interface IHolographicSpace;

            interface IHolographicSpaceCameraAddedEventArgs;

            interface IHolographicSpaceCameraRemovedEventArgs;

            interface IHolographicSpaceStatics;

            runtimeclass HolographicCamera;

            runtimeclass HolographicCameraPose;

            runtimeclass HolographicCameraRenderingParameters;

            runtimeclass HolographicFrame;

            runtimeclass HolographicFramePrediction;

            runtimeclass HolographicSpace;

            runtimeclass HolographicSpaceCameraAddedEventArgs;

            runtimeclass HolographicSpaceCameraRemovedEventArgs;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Graphics
    {
        namespace Holographic
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Graphics.Holographic.HolographicCamera*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Graphics.Holographic.HolographicCameraPose*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Graphics.Holographic.HolographicCamera*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Graphics.Holographic.HolographicCameraPose*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Graphics.Holographic.HolographicCamera*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Graphics.Holographic.HolographicCameraPose*>;

                interface Windows.Foundation.IReference<Windows.Graphics.Holographic.HolographicStereoTransform>;

                interface Windows.Foundation.TypedEventHandler<Windows.Graphics.Holographic.HolographicSpace*, Windows.Graphics.Holographic.HolographicSpaceCameraAddedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Graphics.Holographic.HolographicSpace*, Windows.Graphics.Holographic.HolographicSpaceCameraRemovedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Graphics
    {
        namespace Holographic
        {
            [version(0x0A000001)]
            enum HolographicFramePresentResult
            {
                Success       = 0,
                DeviceRemoved = 1
            };

            [version(0x0A000001)]
            enum HolographicFramePresentWaitBehavior
            {
                WaitForFrameToFinish      = 0,
                DoNotWaitForFrameToFinish = 1
            };

            [version(0x0A000001)]
            struct HolographicAdapterId
            {
                UINT32 LowPart;
                INT32 HighPart;
            };

            [version(0x0A000001)]
            struct HolographicStereoTransform
            {
                Windows.Foundation.Numerics.Matrix4x4 Left;
                Windows.Foundation.Numerics.Matrix4x4 Right;
            };

            [exclusiveto(Windows.Graphics.Holographic.HolographicCamera)]
            [uuid(E4E98445-9BED-4980-9BA0-E87680D1CB74)]
            [version(0x0A000001)]
            interface IHolographicCamera : IInspectable
            {
                [propget] HRESULT RenderTargetSize([out] [retval] Windows.Foundation.Size* value);
                [propget] HRESULT ViewportScaleFactor([out] [retval] DOUBLE* value);
                [propput] HRESULT ViewportScaleFactor([in] DOUBLE value);
                [propget] HRESULT IsStereo([out] [retval] boolean* value);
                [propget] HRESULT Id([out] [retval] UINT32* value);
                HRESULT SetNearPlaneDistance([in] DOUBLE value);
                HRESULT SetFarPlaneDistance([in] DOUBLE value);
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicCameraPose)]
            [uuid(0D7D7E30-12DE-45BD-912B-C7F6561599D1)]
            [version(0x0A000001)]
            interface IHolographicCameraPose : IInspectable
            {
                [propget] HRESULT HolographicCamera([out] [retval] Windows.Graphics.Holographic.HolographicCamera** value);
                [propget] HRESULT Viewport([out] [retval] Windows.Foundation.Rect* value);
                HRESULT TryGetViewTransform([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [out] [retval] Windows.Foundation.IReference<Windows.Graphics.Holographic.HolographicStereoTransform>** value);
                [propget] HRESULT ProjectionTransform([out] [retval] Windows.Graphics.Holographic.HolographicStereoTransform* value);
                HRESULT TryGetCullingFrustum([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [out] [retval] Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialBoundingFrustum>** value);
                HRESULT TryGetVisibleFrustum([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [out] [retval] Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialBoundingFrustum>** value);
                [propget] HRESULT NearPlaneDistance([out] [retval] DOUBLE* value);
                [propget] HRESULT FarPlaneDistance([out] [retval] DOUBLE* value);
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicCameraRenderingParameters)]
            [uuid(8EAC2ED1-5BF4-4E16-8236-AE0800C11D0D)]
            [version(0x0A000001)]
            interface IHolographicCameraRenderingParameters : IInspectable
            {
                [overload("SetFocusPoint")] HRESULT SetFocusPoint([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Foundation.Numerics.Vector3 position);
                [overload("SetFocusPoint")] HRESULT SetFocusPointWithNormal([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Foundation.Numerics.Vector3 position, [in] Windows.Foundation.Numerics.Vector3 normal);
                [overload("SetFocusPoint")] HRESULT SetFocusPointWithNormalLinearVelocity([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Foundation.Numerics.Vector3 position, [in] Windows.Foundation.Numerics.Vector3 normal, [in] Windows.Foundation.Numerics.Vector3 linearVelocity);
                [propget] HRESULT Direct3D11Device([out] [retval] Windows.Graphics.DirectX.Direct3D11.IDirect3DDevice** value);
                [propget] HRESULT Direct3D11BackBuffer([out] [retval] Windows.Graphics.DirectX.Direct3D11.IDirect3DSurface** value);
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicFrame)]
            [uuid(C6988EB6-A8B9-3054-A6EB-D624B6536375)]
            [version(0x0A000001)]
            interface IHolographicFrame : IInspectable
            {
                [propget] HRESULT AddedCameras([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Graphics.Holographic.HolographicCamera*>** value);
                [propget] HRESULT RemovedCameras([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Graphics.Holographic.HolographicCamera*>** value);
                HRESULT GetRenderingParameters([in] Windows.Graphics.Holographic.HolographicCameraPose* cameraPose, [out] [retval] Windows.Graphics.Holographic.HolographicCameraRenderingParameters** value);
                [propget] HRESULT Duration([out] [retval] Windows.Foundation.TimeSpan* value);
                [propget] HRESULT CurrentPrediction([out] [retval] Windows.Graphics.Holographic.HolographicFramePrediction** value);
                HRESULT UpdateCurrentPrediction();
                [overload("PresentUsingCurrentPrediction")] HRESULT PresentUsingCurrentPrediction([out] [retval] Windows.Graphics.Holographic.HolographicFramePresentResult* result);
                [overload("PresentUsingCurrentPrediction")] HRESULT PresentUsingCurrentPredictionWithBehavior([in] Windows.Graphics.Holographic.HolographicFramePresentWaitBehavior waitBehavior, [out] [retval] Windows.Graphics.Holographic.HolographicFramePresentResult* result);
                HRESULT WaitForFrameToFinish();
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicFramePrediction)]
            [uuid(520F4DE1-5C0A-4E79-A81E-6ABE02BB2739)]
            [version(0x0A000001)]
            interface IHolographicFramePrediction : IInspectable
            {
                [propget] HRESULT CameraPoses([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Graphics.Holographic.HolographicCameraPose*>** value);
                [propget] HRESULT Timestamp([out] [retval] Windows.Perception.PerceptionTimestamp** value);
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicSpace)]
            [uuid(4380DBA6-5E78-434F-807C-3433D1EFE8B7)]
            [version(0x0A000001)]
            interface IHolographicSpace : IInspectable
            {
                [propget] HRESULT PrimaryAdapterId([out] [retval] Windows.Graphics.Holographic.HolographicAdapterId* value);
                HRESULT SetDirect3D11Device([in] Windows.Graphics.DirectX.Direct3D11.IDirect3DDevice* value);
                [eventadd] HRESULT CameraAdded([in] Windows.Foundation.TypedEventHandler<Windows.Graphics.Holographic.HolographicSpace*, Windows.Graphics.Holographic.HolographicSpaceCameraAddedEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT CameraAdded([in] EventRegistrationToken cookie);
                [eventadd] HRESULT CameraRemoved([in] Windows.Foundation.TypedEventHandler<Windows.Graphics.Holographic.HolographicSpace*, Windows.Graphics.Holographic.HolographicSpaceCameraRemovedEventArgs*>* handler, [out] [retval] EventRegistrationToken* cookie);
                [eventremove] HRESULT CameraRemoved([in] EventRegistrationToken cookie);
                HRESULT CreateNextFrame([out] [retval] Windows.Graphics.Holographic.HolographicFrame** value);
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicSpaceCameraAddedEventArgs)]
            [uuid(58F1DA35-BBB3-3C8F-993D-6C80E7FEB99F)]
            [version(0x0A000001)]
            interface IHolographicSpaceCameraAddedEventArgs : IInspectable
            {
                [propget] HRESULT Camera([out] [retval] Windows.Graphics.Holographic.HolographicCamera** value);
                HRESULT GetDeferral([out] [retval] Windows.Foundation.Deferral** value);
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicSpaceCameraRemovedEventArgs)]
            [uuid(805444A8-F2AE-322E-8DA9-836A0A95A4C1)]
            [version(0x0A000001)]
            interface IHolographicSpaceCameraRemovedEventArgs : IInspectable
            {
                [propget] HRESULT Camera([out] [retval] Windows.Graphics.Holographic.HolographicCamera** value);
            }

            [exclusiveto(Windows.Graphics.Holographic.HolographicSpace)]
            [uuid(364E6064-C8F2-3BA1-8391-66B8489E67FD)]
            [version(0x0A000001)]
            interface IHolographicSpaceStatics : IInspectable
            {
                HRESULT CreateForCoreWindow([in] Windows.UI.Core.CoreWindow* window, [out] [retval] Windows.Graphics.Holographic.HolographicSpace** value);
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicCamera
            {
                [default] interface Windows.Graphics.Holographic.IHolographicCamera;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicCameraPose
            {
                [default] interface Windows.Graphics.Holographic.IHolographicCameraPose;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicCameraRenderingParameters
            {
                [default] interface Windows.Graphics.Holographic.IHolographicCameraRenderingParameters;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicFrame
            {
                [default] interface Windows.Graphics.Holographic.IHolographicFrame;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicFramePrediction
            {
                [default] interface Windows.Graphics.Holographic.IHolographicFramePrediction;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Graphics.Holographic.IHolographicSpaceStatics, 0x0A000001)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicSpace
            {
                [default] interface Windows.Graphics.Holographic.IHolographicSpace;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicSpaceCameraAddedEventArgs
            {
                [default] interface Windows.Graphics.Holographic.IHolographicSpaceCameraAddedEventArgs;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000001)]
            runtimeclass HolographicSpaceCameraRemovedEventArgs
            {
                [default] interface Windows.Graphics.Holographic.IHolographicSpaceCameraRemovedEventArgs;
            }
        }
    }
}
