--------------------------------------------------------------------------------
-- <auto-generated>                                                           --
--     This code was generated by a tool.                                     --
--                                                                            --
--     Changes to this file may cause incorrect behavior and will be lost if  --
--     the code is regenerated.                                               --
-- </auto-generated>                                                          --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--                                                                            --
--    Copyright(c) 2018 Alexander Gamper, All Rights Reserved.                --
--                                                                            --
--    Ada-WinRT                                                               --
--                                                                            --
-- This program is free software: you can redistribute it and / or modify     --
-- it under the terms of the GNU Lesser General Public License as published by--
-- the Free Software Foundation, either version 3 of the License, or          --
-- (at your option) any later version.                                        --
--                                                                            --
-- This program is distributed in the hope that it will be useful,            --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of             --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the               --
-- GNU Lesser General Public License for more details.                        --
--                                                                            --
-- You should have received a copy of the GNU Lesser General Public License   --
-- along with this program.If not, see http://www.gnu.org/licenses            --
--                                                                            --
--------------------------------------------------------------------------------
with Windows.Foundation;
with Windows.Foundation.Collections;
with Windows.Foundation.Numerics;
limited with Windows.Graphics.DirectX;
--------------------------------------------------------------------------------
package Windows.UI.Composition.Scenes is

   pragma preelaborate;
   
   ------------------------------------------------------------------------
   -- Enums
   ------------------------------------------------------------------------
   
   type SceneAlphaMode is (
      Opaque,
      AlphaTest,
      Blend
   );
   for SceneAlphaMode use (
      Opaque => 0,
      AlphaTest => 1,
      Blend => 2
   );
   for SceneAlphaMode'Size use 32;
   
   type SceneAlphaMode_Ptr is access SceneAlphaMode;
   
   type SceneAttributeSemantic is (
      Index,
      Vertex,
      Normal,
      TexCoord0,
      TexCoord1,
      Color,
      Tangent
   );
   for SceneAttributeSemantic use (
      Index => 0,
      Vertex => 1,
      Normal => 2,
      TexCoord0 => 3,
      TexCoord1 => 4,
      Color => 5,
      Tangent => 6
   );
   for SceneAttributeSemantic'Size use 32;
   
   type SceneAttributeSemantic_Ptr is access SceneAttributeSemantic;
   
   type SceneComponentType is (
      MeshRendererComponent
   );
   for SceneComponentType use (
      MeshRendererComponent => 0
   );
   for SceneComponentType'Size use 32;
   
   type SceneComponentType_Ptr is access SceneComponentType;
   
   type SceneWrappingMode is (
      ClampToEdge,
      MirroredRepeat,
      Repeat
   );
   for SceneWrappingMode use (
      ClampToEdge => 0,
      MirroredRepeat => 1,
      Repeat => 2
   );
   for SceneWrappingMode'Size use 32;
   
   type SceneWrappingMode_Ptr is access SceneWrappingMode;
   
   ------------------------------------------------------------------------
   -- Forward Declaration - Interfaces
   ------------------------------------------------------------------------
   
   type IIterable_SceneAttributeSemantic_Interface;
   type IIterable_SceneAttributeSemantic is access all IIterable_SceneAttributeSemantic_Interface'Class;
   type IIterable_SceneAttributeSemantic_Ptr is access all IIterable_SceneAttributeSemantic;
   type IIterable_SceneComponent_Interface;
   type IIterable_SceneComponent is access all IIterable_SceneComponent_Interface'Class;
   type IIterable_SceneComponent_Ptr is access all IIterable_SceneComponent;
   type IIterable_SceneNode_Interface;
   type IIterable_SceneNode is access all IIterable_SceneNode_Interface'Class;
   type IIterable_SceneNode_Ptr is access all IIterable_SceneNode;
   type IMap_String_SceneAttributeSemantic_Interface;
   type IMap_String_SceneAttributeSemantic is access all IMap_String_SceneAttributeSemantic_Interface'Class;
   type IMap_String_SceneAttributeSemantic_Ptr is access all IMap_String_SceneAttributeSemantic;
   type ISceneBoundingBox_Interface;
   type ISceneBoundingBox is access all ISceneBoundingBox_Interface'Class;
   type ISceneBoundingBox_Ptr is access all ISceneBoundingBox;
   type ISceneComponent_Interface;
   type ISceneComponent is access all ISceneComponent_Interface'Class;
   type ISceneComponent_Ptr is access all ISceneComponent;
   type ISceneComponentCollection_Interface;
   type ISceneComponentCollection is access all ISceneComponentCollection_Interface'Class;
   type ISceneComponentCollection_Ptr is access all ISceneComponentCollection;
   type ISceneComponentFactory_Interface;
   type ISceneComponentFactory is access all ISceneComponentFactory_Interface'Class;
   type ISceneComponentFactory_Ptr is access all ISceneComponentFactory;
   type ISceneMaterial_Interface;
   type ISceneMaterial is access all ISceneMaterial_Interface'Class;
   type ISceneMaterial_Ptr is access all ISceneMaterial;
   type ISceneMaterialFactory_Interface;
   type ISceneMaterialFactory is access all ISceneMaterialFactory_Interface'Class;
   type ISceneMaterialFactory_Ptr is access all ISceneMaterialFactory;
   type ISceneMaterialInput_Interface;
   type ISceneMaterialInput is access all ISceneMaterialInput_Interface'Class;
   type ISceneMaterialInput_Ptr is access all ISceneMaterialInput;
   type ISceneMaterialInputFactory_Interface;
   type ISceneMaterialInputFactory is access all ISceneMaterialInputFactory_Interface'Class;
   type ISceneMaterialInputFactory_Ptr is access all ISceneMaterialInputFactory;
   type ISceneMesh_Interface;
   type ISceneMesh is access all ISceneMesh_Interface'Class;
   type ISceneMesh_Ptr is access all ISceneMesh;
   type ISceneMeshMaterialAttributeMap_Interface;
   type ISceneMeshMaterialAttributeMap is access all ISceneMeshMaterialAttributeMap_Interface'Class;
   type ISceneMeshMaterialAttributeMap_Ptr is access all ISceneMeshMaterialAttributeMap;
   type ISceneMeshRendererComponent_Interface;
   type ISceneMeshRendererComponent is access all ISceneMeshRendererComponent_Interface'Class;
   type ISceneMeshRendererComponent_Ptr is access all ISceneMeshRendererComponent;
   type ISceneMeshRendererComponentStatics_Interface;
   type ISceneMeshRendererComponentStatics is access all ISceneMeshRendererComponentStatics_Interface'Class;
   type ISceneMeshRendererComponentStatics_Ptr is access all ISceneMeshRendererComponentStatics;
   type ISceneMeshStatics_Interface;
   type ISceneMeshStatics is access all ISceneMeshStatics_Interface'Class;
   type ISceneMeshStatics_Ptr is access all ISceneMeshStatics;
   type ISceneMetallicRoughnessMaterial_Interface;
   type ISceneMetallicRoughnessMaterial is access all ISceneMetallicRoughnessMaterial_Interface'Class;
   type ISceneMetallicRoughnessMaterial_Ptr is access all ISceneMetallicRoughnessMaterial;
   type ISceneMetallicRoughnessMaterialStatics_Interface;
   type ISceneMetallicRoughnessMaterialStatics is access all ISceneMetallicRoughnessMaterialStatics_Interface'Class;
   type ISceneMetallicRoughnessMaterialStatics_Ptr is access all ISceneMetallicRoughnessMaterialStatics;
   type ISceneModelTransform_Interface;
   type ISceneModelTransform is access all ISceneModelTransform_Interface'Class;
   type ISceneModelTransform_Ptr is access all ISceneModelTransform;
   type ISceneNode_Interface;
   type ISceneNode is access all ISceneNode_Interface'Class;
   type ISceneNode_Ptr is access all ISceneNode;
   type ISceneNodeCollection_Interface;
   type ISceneNodeCollection is access all ISceneNodeCollection_Interface'Class;
   type ISceneNodeCollection_Ptr is access all ISceneNodeCollection;
   type ISceneNodeStatics_Interface;
   type ISceneNodeStatics is access all ISceneNodeStatics_Interface'Class;
   type ISceneNodeStatics_Ptr is access all ISceneNodeStatics;
   type ISceneObject_Interface;
   type ISceneObject is access all ISceneObject_Interface'Class;
   type ISceneObject_Ptr is access all ISceneObject;
   type ISceneObjectFactory_Interface;
   type ISceneObjectFactory is access all ISceneObjectFactory_Interface'Class;
   type ISceneObjectFactory_Ptr is access all ISceneObjectFactory;
   type IScenePbrMaterial_Interface;
   type IScenePbrMaterial is access all IScenePbrMaterial_Interface'Class;
   type IScenePbrMaterial_Ptr is access all IScenePbrMaterial;
   type IScenePbrMaterialFactory_Interface;
   type IScenePbrMaterialFactory is access all IScenePbrMaterialFactory_Interface'Class;
   type IScenePbrMaterialFactory_Ptr is access all IScenePbrMaterialFactory;
   type ISceneRendererComponent_Interface;
   type ISceneRendererComponent is access all ISceneRendererComponent_Interface'Class;
   type ISceneRendererComponent_Ptr is access all ISceneRendererComponent;
   type ISceneRendererComponentFactory_Interface;
   type ISceneRendererComponentFactory is access all ISceneRendererComponentFactory_Interface'Class;
   type ISceneRendererComponentFactory_Ptr is access all ISceneRendererComponentFactory;
   type ISceneSurfaceMaterialInput_Interface;
   type ISceneSurfaceMaterialInput is access all ISceneSurfaceMaterialInput_Interface'Class;
   type ISceneSurfaceMaterialInput_Ptr is access all ISceneSurfaceMaterialInput;
   type ISceneSurfaceMaterialInputStatics_Interface;
   type ISceneSurfaceMaterialInputStatics is access all ISceneSurfaceMaterialInputStatics_Interface'Class;
   type ISceneSurfaceMaterialInputStatics_Ptr is access all ISceneSurfaceMaterialInputStatics;
   type ISceneVisual_Interface;
   type ISceneVisual is access all ISceneVisual_Interface'Class;
   type ISceneVisual_Ptr is access all ISceneVisual;
   type ISceneVisualStatics_Interface;
   type ISceneVisualStatics is access all ISceneVisualStatics_Interface'Class;
   type ISceneVisualStatics_Ptr is access all ISceneVisualStatics;
   type IVector_SceneComponent_Interface;
   type IVector_SceneComponent is access all IVector_SceneComponent_Interface'Class;
   type IVector_SceneComponent_Ptr is access all IVector_SceneComponent;
   type IVector_SceneNode_Interface;
   type IVector_SceneNode is access all IVector_SceneNode_Interface'Class;
   type IVector_SceneNode_Ptr is access all IVector_SceneNode;
   
   ------------------------------------------------------------------------
   -- Interfaces
   ------------------------------------------------------------------------
   
   ------------------------------------------------------------------------
   
   IID_IIterable_SceneAttributeSemantic : aliased constant Windows.IID := (0, 0, 0, (0, 0, 0, 0, 0, 0, 0, 0 ));
   
   type IIterable_SceneAttributeSemantic_Interface is interface and Windows.IInspectable_Interface;
   
   function First
   (
      This       : access IIterable_SceneAttributeSemantic_Interface
      ; RetVal : access Windows.Address -- Generic Parameter Type
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_IIterable_SceneComponent : aliased constant Windows.IID := (2622572763, 1445, 20570, (187, 20, 160, 229, 223, 187, 44, 212 ));
   
   type IIterable_SceneComponent_Interface is interface and Windows.IInspectable_Interface;
   
   function First
   (
      This       : access IIterable_SceneComponent_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneComponent
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_IIterable_SceneNode : aliased constant Windows.IID := (3678875876, 62308, 22379, (135, 142, 89, 167, 196, 89, 167, 82 ));
   
   type IIterable_SceneNode_Interface is interface and Windows.IInspectable_Interface;
   
   function First
   (
      This       : access IIterable_SceneNode_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_IMap_String_SceneAttributeSemantic : aliased constant Windows.IID := (0, 0, 0, (0, 0, 0, 0, 0, 0, 0, 0 ));
   
   type IMap_String_SceneAttributeSemantic_Interface is interface and Windows.IInspectable_Interface;
   
   function Lookup
   (
      This       : access IMap_String_SceneAttributeSemantic_Interface
      ; key : Windows.String
      ; RetVal : access Windows.String
   )
   return Windows.HRESULT is abstract;
   
   function get_Size
   (
      This       : access IMap_String_SceneAttributeSemantic_Interface
      ; RetVal : access Windows.UInt32
   )
   return Windows.HRESULT is abstract;
   
   function HasKey
   (
      This       : access IMap_String_SceneAttributeSemantic_Interface
      ; key : Windows.String
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function GetView
   (
      This       : access IMap_String_SceneAttributeSemantic_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.SceneAttributeSemantic
   )
   return Windows.HRESULT is abstract;
   
   function Insert
   (
      This       : access IMap_String_SceneAttributeSemantic_Interface
      ; key : Windows.String
      ; value : Windows.String
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function Remove
   (
      This       : access IMap_String_SceneAttributeSemantic_Interface
      ; key : Windows.String
   )
   return Windows.HRESULT is abstract;
   
   function Clear
   (
      This       : access IMap_String_SceneAttributeSemantic_Interface
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneBoundingBox : aliased constant Windows.IID := (1569717360, 50712, 16515, (130, 81, 153, 98, 89, 49, 20, 170 ));
   
   type ISceneBoundingBox_Interface is interface and Windows.IInspectable_Interface;
   
   function get_Center
   (
      This       : access ISceneBoundingBox_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_Extents
   (
      This       : access ISceneBoundingBox_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_Max
   (
      This       : access ISceneBoundingBox_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_Min
   (
      This       : access ISceneBoundingBox_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_Size
   (
      This       : access ISceneBoundingBox_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneComponent : aliased constant Windows.IID := (2921397398, 8812, 17597, (149, 203, 221, 94, 217, 235, 233, 165 ));
   
   type ISceneComponent_Interface is interface and Windows.IInspectable_Interface;
   
   function get_ComponentType
   (
      This       : access ISceneComponent_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.SceneComponentType
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneComponentCollection : aliased constant Windows.IID := (3296950556, 24390, 17892, (182, 102, 163, 210, 37, 159, 155, 46 ));
   
   type ISceneComponentCollection_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneComponentFactory : aliased constant Windows.IID := (1606178164, 56792, 22665, (171, 91, 216, 250, 113, 110, 124, 158 ));
   
   type ISceneComponentFactory_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMaterial : aliased constant Windows.IID := (2359774076, 12511, 19975, (148, 144, 55, 135, 90, 241, 161, 35 ));
   
   type ISceneMaterial_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMaterialFactory : aliased constant Windows.IID := (1733520409, 42759, 21076, (164, 149, 127, 220, 121, 152, 147, 185 ));
   
   type ISceneMaterialFactory_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMaterialInput : aliased constant Windows.IID := (1110054466, 7921, 18524, (151, 233, 174, 111, 149, 173, 129, 47 ));
   
   type ISceneMaterialInput_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMaterialInputFactory : aliased constant Windows.IID := (2828004212, 32010, 24140, (167, 72, 16, 21, 175, 156, 167, 79 ));
   
   type ISceneMaterialInputFactory_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMesh : aliased constant Windows.IID := (4003075376, 4437, 19468, (146, 189, 64, 2, 12, 247, 131, 71 ));
   
   type ISceneMesh_Interface is interface and Windows.IInspectable_Interface;
   
   function get_Bounds
   (
      This       : access ISceneMesh_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneBoundingBox
   )
   return Windows.HRESULT is abstract;
   
   function get_PrimitiveTopology
   (
      This       : access ISceneMesh_Interface
      ; RetVal : access Windows.Graphics.DirectX.DirectXPrimitiveTopology
   )
   return Windows.HRESULT is abstract;
   
   function put_PrimitiveTopology
   (
      This       : access ISceneMesh_Interface
      ; value : Windows.Graphics.DirectX.DirectXPrimitiveTopology
   )
   return Windows.HRESULT is abstract;
   
   function FillMeshAttribute
   (
      This       : access ISceneMesh_Interface
      ; semantic : Windows.UI.Composition.Scenes.SceneAttributeSemantic
      ; format : Windows.Graphics.DirectX.DirectXPixelFormat
      ; memory : Windows.Foundation.IMemoryBuffer
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMeshMaterialAttributeMap : aliased constant Windows.IID := (3464769905, 15683, 18517, (170, 105, 49, 255, 152, 141, 4, 157 ));
   
   type ISceneMeshMaterialAttributeMap_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMeshRendererComponent : aliased constant Windows.IID := (2569664483, 25444, 18302, (152, 254, 116, 237, 159, 212, 194, 222 ));
   
   type ISceneMeshRendererComponent_Interface is interface and Windows.IInspectable_Interface;
   
   function get_Material
   (
      This       : access ISceneMeshRendererComponent_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMaterial
   )
   return Windows.HRESULT is abstract;
   
   function put_Material
   (
      This       : access ISceneMeshRendererComponent_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneMaterial
   )
   return Windows.HRESULT is abstract;
   
   function get_Mesh
   (
      This       : access ISceneMeshRendererComponent_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMesh
   )
   return Windows.HRESULT is abstract;
   
   function put_Mesh
   (
      This       : access ISceneMeshRendererComponent_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneMesh
   )
   return Windows.HRESULT is abstract;
   
   function get_UVMappings
   (
      This       : access ISceneMeshRendererComponent_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMeshMaterialAttributeMap
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMeshRendererComponentStatics : aliased constant Windows.IID := (1230304122, 17497, 17697, (189, 110, 43, 56, 184, 215, 17, 234 ));
   
   type ISceneMeshRendererComponentStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function Create
   (
      This       : access ISceneMeshRendererComponentStatics_Interface
      ; compositor : Windows.UI.Composition.ICompositor
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMeshRendererComponent
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMeshStatics : aliased constant Windows.IID := (2215784812, 31575, 18239, (150, 107, 129, 220, 39, 123, 23, 81 ));
   
   type ISceneMeshStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function Create
   (
      This       : access ISceneMeshStatics_Interface
      ; compositor : Windows.UI.Composition.ICompositor
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMesh
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMetallicRoughnessMaterial : aliased constant Windows.IID := (3252229190, 31132, 17054, (164, 228, 93, 166, 69, 241, 142, 97 ));
   
   type ISceneMetallicRoughnessMaterial_Interface is interface and Windows.IInspectable_Interface;
   
   function get_BaseColorInput
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function put_BaseColorInput
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function get_BaseColorFactor
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector4
   )
   return Windows.HRESULT is abstract;
   
   function put_BaseColorFactor
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; value : Windows.Foundation.Numerics.Vector4
   )
   return Windows.HRESULT is abstract;
   
   function get_MetallicFactor
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_MetallicFactor
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function get_MetallicRoughnessInput
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function put_MetallicRoughnessInput
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function get_RoughnessFactor
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_RoughnessFactor
   (
      This       : access ISceneMetallicRoughnessMaterial_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneMetallicRoughnessMaterialStatics : aliased constant Windows.IID := (1004390992, 28061, 17713, (141, 196, 178, 126, 62, 73, 183, 171 ));
   
   type ISceneMetallicRoughnessMaterialStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function Create
   (
      This       : access ISceneMetallicRoughnessMaterialStatics_Interface
      ; compositor : Windows.UI.Composition.ICompositor
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMetallicRoughnessMaterial
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneModelTransform : aliased constant Windows.IID := (3226826434, 12977, 17001, (152, 13, 185, 133, 55, 16, 10, 228 ));
   
   type ISceneModelTransform_Interface is interface and Windows.IInspectable_Interface;
   
   function get_Orientation
   (
      This       : access ISceneModelTransform_Interface
      ; RetVal : access Windows.Foundation.Numerics.Quaternion
   )
   return Windows.HRESULT is abstract;
   
   function put_Orientation
   (
      This       : access ISceneModelTransform_Interface
      ; value : Windows.Foundation.Numerics.Quaternion
   )
   return Windows.HRESULT is abstract;
   
   function get_RotationAngle
   (
      This       : access ISceneModelTransform_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_RotationAngle
   (
      This       : access ISceneModelTransform_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function get_RotationAngleInDegrees
   (
      This       : access ISceneModelTransform_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_RotationAngleInDegrees
   (
      This       : access ISceneModelTransform_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function get_RotationAxis
   (
      This       : access ISceneModelTransform_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function put_RotationAxis
   (
      This       : access ISceneModelTransform_Interface
      ; value : Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_Scale
   (
      This       : access ISceneModelTransform_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function put_Scale
   (
      This       : access ISceneModelTransform_Interface
      ; value : Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_Translation
   (
      This       : access ISceneModelTransform_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function put_Translation
   (
      This       : access ISceneModelTransform_Interface
      ; value : Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneNode : aliased constant Windows.IID := (2901590599, 62215, 17793, (156, 65, 175, 46, 41, 195, 176, 22 ));
   
   type ISceneNode_Interface is interface and Windows.IInspectable_Interface;
   
   function get_Children
   (
      This       : access ISceneNode_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.IVector_SceneNode
   )
   return Windows.HRESULT is abstract;
   
   function get_Components
   (
      This       : access ISceneNode_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.IVector_SceneComponent
   )
   return Windows.HRESULT is abstract;
   
   function get_Parent
   (
      This       : access ISceneNode_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   function get_Transform
   (
      This       : access ISceneNode_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneModelTransform
   )
   return Windows.HRESULT is abstract;
   
   function FindFirstComponentOfType
   (
      This       : access ISceneNode_Interface
      ; value : Windows.UI.Composition.Scenes.SceneComponentType
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneComponent
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneNodeCollection : aliased constant Windows.IID := (699244801, 11737, 17202, (190, 99, 96, 210, 207, 66, 105, 242 ));
   
   type ISceneNodeCollection_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneNodeStatics : aliased constant Windows.IID := (1469714346, 48797, 16912, (144, 140, 147, 209, 95, 238, 208, 183 ));
   
   type ISceneNodeStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function Create
   (
      This       : access ISceneNodeStatics_Interface
      ; compositor : Windows.UI.Composition.ICompositor
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneObject : aliased constant Windows.IID := (513025179, 3867, 18923, (168, 25, 135, 125, 132, 80, 0, 91 ));
   
   type ISceneObject_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneObjectFactory : aliased constant Windows.IID := (352221594, 13284, 21231, (149, 108, 68, 34, 157, 33, 242, 193 ));
   
   type ISceneObjectFactory_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_IScenePbrMaterial : aliased constant Windows.IID := (2864114622, 54912, 18143, (130, 148, 182, 128, 10, 159, 149, 231 ));
   
   type IScenePbrMaterial_Interface is interface and Windows.IInspectable_Interface;
   
   function get_AlphaCutoff
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_AlphaCutoff
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function get_AlphaMode
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.SceneAlphaMode
   )
   return Windows.HRESULT is abstract;
   
   function put_AlphaMode
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.UI.Composition.Scenes.SceneAlphaMode
   )
   return Windows.HRESULT is abstract;
   
   function get_EmissiveInput
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function put_EmissiveInput
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function get_EmissiveFactor
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function put_EmissiveFactor
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_IsDoubleSided
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function put_IsDoubleSided
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function get_NormalInput
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function put_NormalInput
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function get_NormalScale
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_NormalScale
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function get_OcclusionInput
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function put_OcclusionInput
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   function get_OcclusionStrength
   (
      This       : access IScenePbrMaterial_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_OcclusionStrength
   (
      This       : access IScenePbrMaterial_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_IScenePbrMaterialFactory : aliased constant Windows.IID := (775896574, 2949, 22311, (181, 190, 183, 211, 203, 172, 55, 250 ));
   
   type IScenePbrMaterialFactory_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneRendererComponent : aliased constant Windows.IID := (4054628439, 53071, 16421, (155, 37, 162, 209, 148, 76, 245, 7 ));
   
   type ISceneRendererComponent_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneRendererComponentFactory : aliased constant Windows.IID := (498527596, 43564, 22887, (144, 53, 86, 53, 45, 198, 150, 88 ));
   
   type ISceneRendererComponentFactory_Interface is interface and Windows.IInspectable_Interface;
   
   ------------------------------------------------------------------------
   
   IID_ISceneSurfaceMaterialInput : aliased constant Windows.IID := (2570574428, 43466, 19708, (179, 170, 8, 131, 86, 81, 135, 66 ));
   
   type ISceneSurfaceMaterialInput_Interface is interface and Windows.IInspectable_Interface;
   
   function get_BitmapInterpolationMode
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; RetVal : access Windows.UI.Composition.CompositionBitmapInterpolationMode
   )
   return Windows.HRESULT is abstract;
   
   function put_BitmapInterpolationMode
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; value : Windows.UI.Composition.CompositionBitmapInterpolationMode
   )
   return Windows.HRESULT is abstract;
   
   function get_Surface
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; RetVal : access Windows.UI.Composition.ICompositionSurface
   )
   return Windows.HRESULT is abstract;
   
   function put_Surface
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; value : Windows.UI.Composition.ICompositionSurface
   )
   return Windows.HRESULT is abstract;
   
   function get_WrappingUMode
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.SceneWrappingMode
   )
   return Windows.HRESULT is abstract;
   
   function put_WrappingUMode
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; value : Windows.UI.Composition.Scenes.SceneWrappingMode
   )
   return Windows.HRESULT is abstract;
   
   function get_WrappingVMode
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.SceneWrappingMode
   )
   return Windows.HRESULT is abstract;
   
   function put_WrappingVMode
   (
      This       : access ISceneSurfaceMaterialInput_Interface
      ; value : Windows.UI.Composition.Scenes.SceneWrappingMode
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneSurfaceMaterialInputStatics : aliased constant Windows.IID := (1512281299, 25641, 17801, (187, 207, 184, 79, 79, 60, 251, 254 ));
   
   type ISceneSurfaceMaterialInputStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function Create
   (
      This       : access ISceneSurfaceMaterialInputStatics_Interface
      ; compositor : Windows.UI.Composition.ICompositor
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneSurfaceMaterialInput
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneVisual : aliased constant Windows.IID := (2389126174, 55092, 18353, (190, 20, 61, 105, 79, 250, 67, 1 ));
   
   type ISceneVisual_Interface is interface and Windows.IInspectable_Interface;
   
   function get_Root
   (
      This       : access ISceneVisual_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   function put_Root
   (
      This       : access ISceneVisual_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ISceneVisualStatics : aliased constant Windows.IID := (3090448026, 20650, 17703, (141, 52, 222, 76, 184, 234, 136, 180 ));
   
   type ISceneVisualStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function Create
   (
      This       : access ISceneVisualStatics_Interface
      ; compositor : Windows.UI.Composition.ICompositor
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneVisual
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_IVector_SceneComponent : aliased constant Windows.IID := (3668774705, 50256, 20576, (151, 50, 240, 44, 136, 94, 155, 63 ));
   
   type IVector_SceneComponent_Interface is interface and Windows.IInspectable_Interface;
   
   function GetAt
   (
      This       : access IVector_SceneComponent_Interface
      ; index : Windows.UInt32
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneComponent
   )
   return Windows.HRESULT is abstract;
   
   function get_Size
   (
      This       : access IVector_SceneComponent_Interface
      ; RetVal : access Windows.UInt32
   )
   return Windows.HRESULT is abstract;
   
   function GetView
   (
      This       : access IVector_SceneComponent_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneComponent
   )
   return Windows.HRESULT is abstract;
   
   function IndexOf
   (
      This       : access IVector_SceneComponent_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneComponent
      ; index : access Windows.UInt32
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function SetAt
   (
      This       : access IVector_SceneComponent_Interface
      ; index : Windows.UInt32
      ; value : Windows.UI.Composition.Scenes.ISceneComponent
   )
   return Windows.HRESULT is abstract;
   
   function InsertAt
   (
      This       : access IVector_SceneComponent_Interface
      ; index : Windows.UInt32
      ; value : Windows.UI.Composition.Scenes.ISceneComponent
   )
   return Windows.HRESULT is abstract;
   
   function RemoveAt
   (
      This       : access IVector_SceneComponent_Interface
      ; index : Windows.UInt32
   )
   return Windows.HRESULT is abstract;
   
   function Append
   (
      This       : access IVector_SceneComponent_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneComponent
   )
   return Windows.HRESULT is abstract;
   
   function RemoveAtEnd
   (
      This       : access IVector_SceneComponent_Interface
   )
   return Windows.HRESULT is abstract;
   
   function Clear
   (
      This       : access IVector_SceneComponent_Interface
   )
   return Windows.HRESULT is abstract;
   
   function GetMany
   (
      This       : access IVector_SceneComponent_Interface
      ; startIndex : Windows.UInt32
      ; items : Windows.UI.Composition.Scenes.ISceneComponent_Ptr
      ; RetVal : access Windows.UInt32
   )
   return Windows.HRESULT is abstract;
   
   function ReplaceAll
   (
      This       : access IVector_SceneComponent_Interface
      ; items : Windows.UI.Composition.Scenes.ISceneComponent_Ptr
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_IVector_SceneNode : aliased constant Windows.IID := (1931843232, 27958, 23129, (138, 11, 143, 241, 97, 66, 184, 147 ));
   
   type IVector_SceneNode_Interface is interface and Windows.IInspectable_Interface;
   
   function GetAt
   (
      This       : access IVector_SceneNode_Interface
      ; index : Windows.UInt32
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   function get_Size
   (
      This       : access IVector_SceneNode_Interface
      ; RetVal : access Windows.UInt32
   )
   return Windows.HRESULT is abstract;
   
   function GetView
   (
      This       : access IVector_SceneNode_Interface
      ; RetVal : access Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   function IndexOf
   (
      This       : access IVector_SceneNode_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneNode
      ; index : access Windows.UInt32
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function SetAt
   (
      This       : access IVector_SceneNode_Interface
      ; index : Windows.UInt32
      ; value : Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   function InsertAt
   (
      This       : access IVector_SceneNode_Interface
      ; index : Windows.UInt32
      ; value : Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   function RemoveAt
   (
      This       : access IVector_SceneNode_Interface
      ; index : Windows.UInt32
   )
   return Windows.HRESULT is abstract;
   
   function Append
   (
      This       : access IVector_SceneNode_Interface
      ; value : Windows.UI.Composition.Scenes.ISceneNode
   )
   return Windows.HRESULT is abstract;
   
   function RemoveAtEnd
   (
      This       : access IVector_SceneNode_Interface
   )
   return Windows.HRESULT is abstract;
   
   function Clear
   (
      This       : access IVector_SceneNode_Interface
   )
   return Windows.HRESULT is abstract;
   
   function GetMany
   (
      This       : access IVector_SceneNode_Interface
      ; startIndex : Windows.UInt32
      ; items : Windows.UI.Composition.Scenes.ISceneNode_Ptr
      ; RetVal : access Windows.UInt32
   )
   return Windows.HRESULT is abstract;
   
   function ReplaceAll
   (
      This       : access IVector_SceneNode_Interface
      ; items : Windows.UI.Composition.Scenes.ISceneNode_Ptr
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   -- Classes
   ------------------------------------------------------------------------
   
   subtype SceneBoundingBox is Windows.UI.Composition.Scenes.ISceneBoundingBox;
   subtype SceneComponent is Windows.UI.Composition.Scenes.ISceneComponent;
   subtype SceneComponentCollection is Windows.UI.Composition.Scenes.IVector_SceneComponent;
   subtype SceneMaterial is Windows.UI.Composition.Scenes.ISceneMaterial;
   subtype SceneMaterialInput is Windows.UI.Composition.Scenes.ISceneMaterialInput;
   subtype SceneMesh is Windows.UI.Composition.Scenes.ISceneMesh;
   subtype SceneMeshMaterialAttributeMap is Windows.UI.Composition.Scenes.ISceneMeshMaterialAttributeMap;
   subtype SceneMeshRendererComponent is Windows.UI.Composition.Scenes.ISceneMeshRendererComponent;
   subtype SceneMetallicRoughnessMaterial is Windows.UI.Composition.Scenes.ISceneMetallicRoughnessMaterial;
   subtype SceneModelTransform is Windows.UI.Composition.Scenes.ISceneModelTransform;
   subtype SceneNode is Windows.UI.Composition.Scenes.ISceneNode;
   subtype SceneNodeCollection is Windows.UI.Composition.Scenes.IVector_SceneNode;
   subtype SceneObject is Windows.UI.Composition.Scenes.ISceneObject;
   subtype ScenePbrMaterial is Windows.UI.Composition.Scenes.IScenePbrMaterial;
   subtype SceneRendererComponent is Windows.UI.Composition.Scenes.ISceneRendererComponent;
   subtype SceneSurfaceMaterialInput is Windows.UI.Composition.Scenes.ISceneSurfaceMaterialInput;
   subtype SceneVisual is Windows.UI.Composition.Scenes.ISceneVisual;
   
   ------------------------------------------------------------------------
   -- Static Procedures/functions
   ------------------------------------------------------------------------
   
   function Create
   (
      compositor : Windows.UI.Composition.ICompositor
   )
   return Windows.UI.Composition.Scenes.ISceneMesh;
   
   function Create
   (
      compositor : Windows.UI.Composition.ICompositor
   )
   return Windows.UI.Composition.Scenes.ISceneMeshRendererComponent;
   
   function Create
   (
      compositor : Windows.UI.Composition.ICompositor
   )
   return Windows.UI.Composition.Scenes.ISceneMetallicRoughnessMaterial;
   
   function Create
   (
      compositor : Windows.UI.Composition.ICompositor
   )
   return Windows.UI.Composition.Scenes.ISceneNode;
   
   function Create
   (
      compositor : Windows.UI.Composition.ICompositor
   )
   return Windows.UI.Composition.Scenes.ISceneSurfaceMaterialInput;
   
   function Create
   (
      compositor : Windows.UI.Composition.ICompositor
   )
   return Windows.UI.Composition.Scenes.ISceneVisual;
   
end;
