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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Foundation.Numerics.idl";
import "Windows.Graphics.DirectX.idl";
import "Windows.Perception.Spatial.idl";
import "Windows.Storage.Streams.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;
    }
}
namespace Windows
{
    namespace Foundation
    {
        namespace Numerics
        {
            typedef struct Vector3 Vector3;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Graphics
    {
        namespace DirectX
        {
            typedef enum DirectXPixelFormat DirectXPixelFormat;
        }
    }
}
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            typedef struct SpatialBoundingOrientedBox SpatialBoundingOrientedBox;

            runtimeclass SpatialBoundingVolume;

            runtimeclass SpatialCoordinateSystem;

            typedef enum SpatialPerceptionAccessStatus SpatialPerceptionAccessStatus;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;
        }
    }
}
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            namespace Surfaces
            {
                interface ISpatialSurfaceInfo;

                interface ISpatialSurfaceMesh;

                interface ISpatialSurfaceMeshBuffer;

                interface ISpatialSurfaceMeshOptions;

                interface ISpatialSurfaceMeshOptionsStatics;

                interface ISpatialSurfaceObserver;

                interface ISpatialSurfaceObserverStatics;

                interface ISpatialSurfaceObserverStatics2;

                runtimeclass SpatialSurfaceInfo;

                runtimeclass SpatialSurfaceMesh;

                runtimeclass SpatialSurfaceMeshBuffer;

                runtimeclass SpatialSurfaceMeshOptions;

                runtimeclass SpatialSurfaceObserver;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            namespace Surfaces
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<GUID, Windows.Perception.Spatial.Surfaces.SpatialSurfaceInfo*>*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Foundation.Collections.IKeyValuePair<GUID, Windows.Perception.Spatial.Surfaces.SpatialSurfaceInfo*>*>;

                    interface Windows.Foundation.Collections.IKeyValuePair<GUID, Windows.Perception.Spatial.Surfaces.SpatialSurfaceInfo*>;

                    interface Windows.Foundation.Collections.IMapView<GUID, Windows.Perception.Spatial.Surfaces.SpatialSurfaceInfo*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.Surfaces.SpatialSurfaceMesh*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.Surfaces.SpatialSurfaceObserver*, IInspectable*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            namespace Surfaces
            {
                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceInfo)]
                [uuid(F8E9EBE7-39B7-3962-BB03-57F56E1FB0A1)]
                interface ISpatialSurfaceInfo : IInspectable
                {
                    [propget] HRESULT Id([out] [retval] GUID* value);
                    [propget] HRESULT UpdateTime([out] [retval] Windows.Foundation.DateTime* value);
                    HRESULT TryGetBounds([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [out] [retval] Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialBoundingOrientedBox>** value);
                    [overload("TryComputeLatestMeshAsync")] HRESULT TryComputeLatestMeshAsync([in] DOUBLE maxTrianglesPerCubicMeter, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.Surfaces.SpatialSurfaceMesh*>** value);
                    [overload("TryComputeLatestMeshAsync")] HRESULT TryComputeLatestMeshWithOptionsAsync([in] DOUBLE maxTrianglesPerCubicMeter, [in] Windows.Perception.Spatial.Surfaces.SpatialSurfaceMeshOptions* options, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.Surfaces.SpatialSurfaceMesh*>** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceMesh)]
                [uuid(108F57D9-DF0D-3950-A0FD-F972C77C27B4)]
                interface ISpatialSurfaceMesh : IInspectable
                {
                    [propget] HRESULT SurfaceInfo([out] [retval] Windows.Perception.Spatial.Surfaces.SpatialSurfaceInfo** value);
                    [propget] HRESULT CoordinateSystem([out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** value);
                    [propget] HRESULT TriangleIndices([out] [retval] Windows.Perception.Spatial.Surfaces.SpatialSurfaceMeshBuffer** value);
                    [propget] HRESULT VertexPositions([out] [retval] Windows.Perception.Spatial.Surfaces.SpatialSurfaceMeshBuffer** value);
                    [propget] HRESULT VertexPositionScale([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                    [propget] HRESULT VertexNormals([out] [retval] Windows.Perception.Spatial.Surfaces.SpatialSurfaceMeshBuffer** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceMeshBuffer)]
                [uuid(93CF59E0-871F-33F8-98B2-03D101458F6F)]
                interface ISpatialSurfaceMeshBuffer : IInspectable
                {
                    [propget] HRESULT Format([out] [retval] Windows.Graphics.DirectX.DirectXPixelFormat* value);
                    [propget] HRESULT Stride([out] [retval] UINT32* value);
                    [propget] HRESULT ElementCount([out] [retval] UINT32* value);
                    [propget] HRESULT Data([out] [retval] Windows.Storage.Streams.IBuffer** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceMeshOptions)]
                [uuid(D2759F89-3572-3D2D-A10D-5FEE9394AA37)]
                interface ISpatialSurfaceMeshOptions : IInspectable
                {
                    [propget] HRESULT VertexPositionFormat([out] [retval] Windows.Graphics.DirectX.DirectXPixelFormat* value);
                    [propput] HRESULT VertexPositionFormat([in] Windows.Graphics.DirectX.DirectXPixelFormat value);
                    [propget] HRESULT TriangleIndexFormat([out] [retval] Windows.Graphics.DirectX.DirectXPixelFormat* value);
                    [propput] HRESULT TriangleIndexFormat([in] Windows.Graphics.DirectX.DirectXPixelFormat value);
                    [propget] HRESULT VertexNormalFormat([out] [retval] Windows.Graphics.DirectX.DirectXPixelFormat* value);
                    [propput] HRESULT VertexNormalFormat([in] Windows.Graphics.DirectX.DirectXPixelFormat value);
                    [propget] HRESULT IncludeVertexNormals([out] [retval] boolean* value);
                    [propput] HRESULT IncludeVertexNormals([in] boolean value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceMeshOptions)]
                [uuid(9B340ABF-9781-4505-8935-013575CAAE5E)]
                interface ISpatialSurfaceMeshOptionsStatics : IInspectable
                {
                    [propget] HRESULT SupportedVertexPositionFormats([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Graphics.DirectX.DirectXPixelFormat>** value);
                    [propget] HRESULT SupportedTriangleIndexFormats([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Graphics.DirectX.DirectXPixelFormat>** value);
                    [propget] HRESULT SupportedVertexNormalFormats([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Graphics.DirectX.DirectXPixelFormat>** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceObserver)]
                [uuid(10B69819-DDCA-3483-AC3A-748FE8C86DF5)]
                interface ISpatialSurfaceObserver : IInspectable
                {
                    HRESULT GetObservedSurfaces([out] [retval] Windows.Foundation.Collections.IMapView<GUID, Windows.Perception.Spatial.Surfaces.SpatialSurfaceInfo*>** value);
                    HRESULT SetBoundingVolume([in] Windows.Perception.Spatial.SpatialBoundingVolume* bounds);
                    HRESULT SetBoundingVolumes([in] Windows.Foundation.Collections.IIterable<Windows.Perception.Spatial.SpatialBoundingVolume*>* bounds);
                    [eventadd] HRESULT ObservedSurfacesChanged([in] Windows.Foundation.TypedEventHandler<Windows.Perception.Spatial.Surfaces.SpatialSurfaceObserver*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT ObservedSurfacesChanged([in] EventRegistrationToken token);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceObserver)]
                [uuid(165951ED-2108-4168-9175-87E027BC9285)]
                interface ISpatialSurfaceObserverStatics : IInspectable
                {
                    HRESULT RequestAccessAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Perception.Spatial.SpatialPerceptionAccessStatus>** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Perception.Spatial.Surfaces.SpatialSurfaceObserver)]
                [uuid(0F534261-C55D-4E6B-A895-A19DE69A42E3)]
                interface ISpatialSurfaceObserverStatics2 : IInspectable
                    requires
                        Windows.Perception.Spatial.Surfaces.ISpatialSurfaceObserverStatics
                {
                    HRESULT IsSupported([out] [retval] boolean* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass SpatialSurfaceInfo
                {
                    [default] interface Windows.Perception.Spatial.Surfaces.ISpatialSurfaceInfo;
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass SpatialSurfaceMesh
                {
                    [default] interface Windows.Perception.Spatial.Surfaces.ISpatialSurfaceMesh;
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass SpatialSurfaceMeshBuffer
                {
                    [default] interface Windows.Perception.Spatial.Surfaces.ISpatialSurfaceMeshBuffer;
                }

                [activatable(Windows.Foundation.UniversalApiContract, 2.0)]
                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Perception.Spatial.Surfaces.ISpatialSurfaceMeshOptionsStatics, Windows.Foundation.UniversalApiContract, 2.0)]
                [threading(both)]
                runtimeclass SpatialSurfaceMeshOptions
                {
                    [default] interface Windows.Perception.Spatial.Surfaces.ISpatialSurfaceMeshOptions;
                }

                [activatable(Windows.Foundation.UniversalApiContract, 2.0)]
                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Perception.Spatial.Surfaces.ISpatialSurfaceObserverStatics, Windows.Foundation.UniversalApiContract, 2.0)]
                [static(Windows.Perception.Spatial.Surfaces.ISpatialSurfaceObserverStatics2, Windows.Foundation.UniversalApiContract, 4.0)]
                [threading(both)]
                runtimeclass SpatialSurfaceObserver
                {
                    [default] interface Windows.Perception.Spatial.Surfaces.ISpatialSurfaceObserver;
                }
            }
        }
    }
}
