From 55bf23606acb3412725272b7275c696733962760 Mon Sep 17 00:00:00 2001 From: Glatzemann Date: Wed, 9 Nov 2011 12:31:32 +0000 Subject: [PATCH] added a Kinect sample project for testing --- .../GraphicsDeviceWindowsDX10.cs | 21 +++ .../GraphicsDeviceWindowsGL3.cs | 21 +++ ANX.Framework.sln | 13 ++ ANX.Framework/Graphics/GraphicsDevice.cs | 103 +++++++++---- ANX.Framework/Input/Mouse.cs | 29 +++- .../RenderSystem/INativeGraphicsDevice.cs | 7 + .../GraphicsDeviceWindowsDX11_1.cs | 21 +++ Samples/ANX.Framework.Samples.sln | 8 + Samples/Kinect/Game.ico | Bin 0 -> 4286 bytes Samples/Kinect/Game1.cs | 57 +++++++ Samples/Kinect/GameThumbnail.png | Bin 0 -> 5734 bytes Samples/Kinect/Kinect.csproj | 141 ++++++++++++++++++ Samples/Kinect/Program.cs | 21 +++ Samples/Kinect/Properties/AssemblyInfo.cs | 34 +++++ media/Test_100x100.png | Bin 0 -> 2707 bytes 15 files changed, 443 insertions(+), 33 deletions(-) create mode 100644 Samples/Kinect/Game.ico create mode 100644 Samples/Kinect/Game1.cs create mode 100644 Samples/Kinect/GameThumbnail.png create mode 100644 Samples/Kinect/Kinect.csproj create mode 100644 Samples/Kinect/Program.cs create mode 100644 Samples/Kinect/Properties/AssemblyInfo.cs create mode 100644 media/Test_100x100.png diff --git a/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs b/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs index 2578c926..bffad100 100644 --- a/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs +++ b/ANX.Framework.Windows.DX10/GraphicsDeviceWindowsDX10.cs @@ -349,5 +349,26 @@ namespace ANX.Framework.Windows.DX10 { throw new NotImplementedException(); } + + + public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) + { + throw new NotImplementedException(); + } + + public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount) + { + throw new NotImplementedException(); + } + + public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, IndexElementSize indexFormat) where T : struct, IVertexType + { + throw new NotImplementedException(); + } + + public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType + { + throw new NotImplementedException(); + } } } diff --git a/ANX.Framework.Windows.GL3/GraphicsDeviceWindowsGL3.cs b/ANX.Framework.Windows.GL3/GraphicsDeviceWindowsGL3.cs index b36f6337..4d6f343b 100644 --- a/ANX.Framework.Windows.GL3/GraphicsDeviceWindowsGL3.cs +++ b/ANX.Framework.Windows.GL3/GraphicsDeviceWindowsGL3.cs @@ -239,5 +239,26 @@ namespace ANX.Framework.Windows.GL3 { throw new NotImplementedException(); } + + + public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) + { + throw new NotImplementedException(); + } + + public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount) + { + throw new NotImplementedException(); + } + + public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, IndexElementSize indexFormat) where T : struct, IVertexType + { + throw new NotImplementedException(); + } + + public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType + { + throw new NotImplementedException(); + } } } diff --git a/ANX.Framework.sln b/ANX.Framework.sln index 04ce33db..10b283d0 100644 --- a/ANX.Framework.sln +++ b/ANX.Framework.sln @@ -47,6 +47,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XNAToANXConverter", "Tools\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANX.InputSystem.Windows.Kinect", "ANX.InputSystem.Windows.Kinect\ANX.InputSystem.Windows.Kinect.csproj", "{E5D69E75-D77C-493F-BBDA-6F9E73B82549}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Samples\Kinect\Kinect.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}" +EndProject Global GlobalSection(SubversionScc) = preSolution Svn-Managed = True @@ -235,6 +237,16 @@ Global {E5D69E75-D77C-493F-BBDA-6F9E73B82549}.Release|Mixed Platforms.Build.0 = Release|x86 {E5D69E75-D77C-493F-BBDA-6F9E73B82549}.Release|x86.ActiveCfg = Release|x86 {E5D69E75-D77C-493F-BBDA-6F9E73B82549}.Release|x86.Build.0 = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|Any CPU.ActiveCfg = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|x86.ActiveCfg = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|x86.Build.0 = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|Any CPU.ActiveCfg = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|Mixed Platforms.Build.0 = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|x86.ActiveCfg = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -251,6 +263,7 @@ Global {FA6E229D-4504-47B1-8A23-2D3FCC13F778} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9} {45D6F4DE-5BB6-4E86-8C44-F9CA307AE43F} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9} {A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9} + {A42413A9-5189-40CB-AACA-D50F24865431} = {9B0DD48B-3912-4F33-AF3F-691AF02B73F9} {60D08399-244F-46A3-91F1-4CFD26D961A3} = {7AD65E6B-2A48-437F-81D9-4CA9C9A85C64} {E5D69E75-D77C-493F-BBDA-6F9E73B82549} = {7AD65E6B-2A48-437F-81D9-4CA9C9A85C64} {6A582788-C4D2-410C-96CD-177F75712D65} = {5725DA44-4F5C-4E93-A957-AC5C85603EE9} diff --git a/ANX.Framework/Graphics/GraphicsDevice.cs b/ANX.Framework/Graphics/GraphicsDevice.cs index 41edcdae..c2430729 100644 --- a/ANX.Framework/Graphics/GraphicsDevice.cs +++ b/ANX.Framework/Graphics/GraphicsDevice.cs @@ -85,9 +85,10 @@ namespace ANX.Framework.Graphics public event EventHandler DeviceLost; public event EventHandler DeviceReset; public event EventHandler DeviceResetting; - + #endregion // Events + #region Constructor & Destructor public GraphicsDevice(GraphicsAdapter adapter, GraphicsProfile graphicsProfile, PresentationParameters presentationParameters) { this.currentAdapter = adapter; @@ -108,21 +109,27 @@ namespace ANX.Framework.Graphics this.Dispose(false); } - public void Clear(ClearOptions options, Color color, float depth, int stencil) - { - throw new NotImplementedException(); - } + #endregion // Constructor & Destructor - public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) - { - throw new NotImplementedException(); - } - + #region Clear public void Clear(Color color) { nativeDevice.Clear(ref color); } + public void Clear(ClearOptions options, Color color, float depth, int stencil) + { + Clear(options, color.ToVector4(), depth, stencil); + } + + public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) + { + nativeDevice.Clear(options, color, depth, stencil); + } + + #endregion // Clear + + #region Present public void Present() { nativeDevice.Present(); @@ -133,51 +140,78 @@ namespace ANX.Framework.Graphics throw new NotImplementedException(); } + #endregion // Present + + #region DrawPrimitives & DrawIndexedPrimitives public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount) { nativeDevice.DrawIndexedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount); } - public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount) - { - throw new NotImplementedException(); - } - public void DrawPrimitives(PrimitiveType primitiveType, int startVertex, int primitiveCount) { nativeDevice.DrawPrimitives(primitiveType, startVertex, primitiveCount); } + #endregion // DrawPrimitives & DrawIndexedPrimitives + + #region DrawInstancedPrimitives + public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount) + { + nativeDevice.DrawInstancedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount, instanceCount); + } + + #endregion // DrawInstancedPrimitives + + #region DrawUserIndexedPrimitives public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType { - throw new NotImplementedException(); + //TODO: cache the instances to avoid reflection overhead + IVertexType vertexType = Activator.CreateInstance(); + VertexDeclaration vertexDeclaration = vertexType.VertexDeclaration; + + nativeDevice.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration, IndexElementSize.SixteenBits); } public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType { - throw new NotImplementedException(); + nativeDevice.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration, IndexElementSize.SixteenBits); } public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType { - throw new NotImplementedException(); + //TODO: cache the instances to avoid reflection overhead + IVertexType vertexType = Activator.CreateInstance(); + VertexDeclaration vertexDeclaration = vertexType.VertexDeclaration; + + nativeDevice.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration, IndexElementSize.ThirtyTwoBits); } public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType { - throw new NotImplementedException(); + nativeDevice.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration, IndexElementSize.ThirtyTwoBits); } + #endregion // DrawUserIndexedPrimitives + + #region DrawUserPrimitives public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount) where T : struct, IVertexType { - throw new NotImplementedException(); + //TODO: cache the instances to avoid reflection overhead + IVertexType vertexType = Activator.CreateInstance(); + VertexDeclaration vertexDeclaration = vertexType.VertexDeclaration; + + nativeDevice.DrawUserPrimitives(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration); } public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType { - throw new NotImplementedException(); + nativeDevice.DrawUserPrimitives(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration); } + #endregion // DrawUserPrimitives + + #region SetVertexBuffer public void SetVertexBuffer(VertexBuffer vertexBuffer) { VertexBufferBinding[] bindings = new VertexBufferBinding[] { new VertexBufferBinding(vertexBuffer) }; @@ -198,6 +232,9 @@ namespace ANX.Framework.Graphics nativeDevice.SetVertexBuffers(vertexBuffers); } + #endregion // SetVertexBuffer + + #region SetRenderTarget public void SetRenderTarget(RenderTarget2D renderTarget) { RenderTargetBinding[] renderTargetBindings = new RenderTargetBinding[] { new RenderTargetBinding(renderTarget) }; @@ -218,6 +255,9 @@ namespace ANX.Framework.Graphics nativeDevice.SetRenderTargets(renderTargets); } + #endregion // SetRenderTarget + + #region GetBackBufferData public void GetBackBufferData(Nullable rect, T[] data, int startIndex, int elementCount) where T : struct { nativeDevice.GetBackBufferData(rect, data, startIndex, elementCount); @@ -233,6 +273,8 @@ namespace ANX.Framework.Graphics nativeDevice.GetBackBufferData(data, startIndex, elementCount); } + #endregion // GetBackBufferData + public VertexBufferBinding[] GetVertexBuffers() { return this.currentVertexBufferBindings; @@ -243,6 +285,7 @@ namespace ANX.Framework.Graphics return this.currentRenderTargetBindings; } + #region Reset public void Reset() { this.Reset(this.currentPresentationParameters, this.currentAdapter); @@ -258,6 +301,8 @@ namespace ANX.Framework.Graphics throw new NotImplementedException(); } + #endregion // Reset + public void Dispose() { throw new NotImplementedException(); @@ -377,7 +422,7 @@ namespace ANX.Framework.Graphics return this.samplerStateCollection; } } - + public bool IsDisposed { get @@ -467,7 +512,7 @@ namespace ANX.Framework.Graphics } } } - + public Color BlendFactor { get @@ -517,15 +562,15 @@ namespace ANX.Framework.Graphics protected void raise_DeviceResetting(object sender, EventArgs args) { - if (DeviceResetting != null) + if (DeviceResetting != null) { DeviceResetting(sender, args); } } - + protected void raise_DeviceReset(object sender, EventArgs args) { - if (DeviceReset != null) + if (DeviceReset != null) { DeviceReset(sender, args); } @@ -533,7 +578,7 @@ namespace ANX.Framework.Graphics protected void raise_DeviceLost(object sender, EventArgs args) { - if (DeviceLost != null) + if (DeviceLost != null) { DeviceLost(sender, args); } @@ -541,7 +586,7 @@ namespace ANX.Framework.Graphics protected void raise_ResourceCreated(object sender, ResourceCreatedEventArgs args) { - if (ResourceCreated != null) + if (ResourceCreated != null) { ResourceCreated(sender, args); } @@ -549,7 +594,7 @@ namespace ANX.Framework.Graphics protected void raise_ResourceDestroyed(object sender, ResourceDestroyedEventArgs args) { - if (ResourceDestroyed != null) + if (ResourceDestroyed != null) { ResourceDestroyed(sender, args); } diff --git a/ANX.Framework/Input/Mouse.cs b/ANX.Framework/Input/Mouse.cs index c376b533..3538a42f 100644 --- a/ANX.Framework/Input/Mouse.cs +++ b/ANX.Framework/Input/Mouse.cs @@ -64,16 +64,37 @@ namespace ANX.Framework.Input public static IntPtr WindowHandle { - get { return mouse.WindowHandle; } - set { mouse.WindowHandle = value; } + get + { + return mouse != null ? mouse.WindowHandle : IntPtr.Zero; + } + set + { + if (mouse != null) + { + mouse.WindowHandle = value; + } + } } + public static MouseState GetState() { - return mouse.GetState(); + if (mouse != null) + { + return mouse.GetState(); + } + else + { + return new MouseState(); + } } + public static void SetPosition(int x, int y) { - mouse.SetPosition(x, y); + if (mouse != null) + { + mouse.SetPosition(x, y); + } } } } diff --git a/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs b/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs index ba323fe2..4875933d 100644 --- a/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs +++ b/ANX.Framework/NonXNA/RenderSystem/INativeGraphicsDevice.cs @@ -56,11 +56,18 @@ namespace ANX.Framework.NonXNA public interface INativeGraphicsDevice { void Clear(ref Color color); + void Clear(ClearOptions options, Vector4 color, float depth, int stencil); void Present(); void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount); + void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount); + + void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, IndexElementSize indexFormat) where T : struct, IVertexType; + + void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct, IVertexType; + void DrawPrimitives(PrimitiveType primitiveType, int vertexOffset, int primitiveCount); void SetVertexBuffers(VertexBufferBinding[] vertexBuffers); diff --git a/ANX.RenderSystem.Windows.DX11.1/GraphicsDeviceWindowsDX11_1.cs b/ANX.RenderSystem.Windows.DX11.1/GraphicsDeviceWindowsDX11_1.cs index 34ab7398..e04636fa 100644 --- a/ANX.RenderSystem.Windows.DX11.1/GraphicsDeviceWindowsDX11_1.cs +++ b/ANX.RenderSystem.Windows.DX11.1/GraphicsDeviceWindowsDX11_1.cs @@ -609,5 +609,26 @@ namespace ANX.RenderSystem.Windows.DX11_1 { throw new NotImplementedException(); } + + + public void Clear(Framework.Graphics.ClearOptions options, Framework.Vector4 color, float depth, int stencil) + { + throw new NotImplementedException(); + } + + public void DrawInstancedPrimitives(Framework.Graphics.PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount) + { + throw new NotImplementedException(); + } + + public void DrawUserIndexedPrimitives(Framework.Graphics.PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, Array indexData, int indexOffset, int primitiveCount, Framework.Graphics.VertexDeclaration vertexDeclaration, Framework.Graphics.IndexElementSize indexFormat) where T : struct, Framework.Graphics.IVertexType + { + throw new NotImplementedException(); + } + + public void DrawUserPrimitives(Framework.Graphics.PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, Framework.Graphics.VertexDeclaration vertexDeclaration) where T : struct, Framework.Graphics.IVertexType + { + throw new NotImplementedException(); + } } } diff --git a/Samples/ANX.Framework.Samples.sln b/Samples/ANX.Framework.Samples.sln index 0ac19dc7..345d7c9c 100644 --- a/Samples/ANX.Framework.Samples.sln +++ b/Samples/ANX.Framework.Samples.sln @@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xinput", "Xinput\Xinput.csp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsGame", "WindowsGame\WindowsGame.csproj", "{A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kinect", "Kinect\Kinect.csproj", "{A42413A9-5189-40CB-AACA-D50F24865431}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -55,6 +57,12 @@ Global {A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}.Release|Any CPU.ActiveCfg = Release|x86 {A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}.Release|x86.ActiveCfg = Release|x86 {A08575E0-7B21-4822-9D4C-6B9EEB7EFFF7}.Release|x86.Build.0 = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|Any CPU.ActiveCfg = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|x86.ActiveCfg = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Debug|x86.Build.0 = Debug|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|Any CPU.ActiveCfg = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|x86.ActiveCfg = Release|x86 + {A42413A9-5189-40CB-AACA-D50F24865431}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Samples/Kinect/Game.ico b/Samples/Kinect/Game.ico new file mode 100644 index 0000000000000000000000000000000000000000..8cff41eab28dc99e31a693a39d399f9eb05f1cce GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/Samples/Kinect/Game1.cs b/Samples/Kinect/Game1.cs new file mode 100644 index 00000000..046d520f --- /dev/null +++ b/Samples/Kinect/Game1.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using ANX.Framework; +using ANX.Framework.Content; +using ANX.Framework.Graphics; +using ANX.Framework.Input; + +namespace Kinect +{ + public class Game1 : ANX.Framework.Game + { + GraphicsDeviceManager graphics; + SpriteBatch spriteBatch; + + public Game1() + : base("DirectX10", "Kinect") + { + graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + } + + protected override void Initialize() + { + // TODO: Fügen Sie Ihre Initialisierungslogik hier hinzu + + base.Initialize(); + } + + protected override void LoadContent() + { + spriteBatch = new SpriteBatch(GraphicsDevice); + + // TODO: Verwenden Sie this.Content, um Ihren Spiel-Inhalt hier zu laden + } + + protected override void Update(GameTime gameTime) + { + //TODO: reactivate + //if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) + // this.Exit(); + + // TODO: Fügen Sie Ihre Aktualisierungslogik hier hinzu + + base.Update(gameTime); + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.Black); + + // TODO: Fügen Sie Ihren Zeichnungscode hier hinzu + + base.Draw(gameTime); + } + } +} diff --git a/Samples/Kinect/GameThumbnail.png b/Samples/Kinect/GameThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..462311aba2cd09de3992129ca43564755249ef09 GIT binary patch literal 5734 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 Y0L3g3-xp*i%>V!Z07*qoM6N<$f>>Wb>;M1& literal 0 HcmV?d00001 diff --git a/Samples/Kinect/Kinect.csproj b/Samples/Kinect/Kinect.csproj new file mode 100644 index 00000000..d070991a --- /dev/null +++ b/Samples/Kinect/Kinect.csproj @@ -0,0 +1,141 @@ + + + + {A42413A9-5189-40CB-AACA-D50F24865431} + {6D335F3A-9D43-41b4-9D22-F6F17C4BE596};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Debug + x86 + WinExe + Properties + Kinect + Kinect + v4.0 + Client + v4.0 + Windows + HiDef + fbb6b32f-d733-4167-932a-afacbf97818e + Game + Game.ico + GameThumbnail.png + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\x86\Debug + DEBUG;TRACE;WINDOWS + prompt + 4 + true + false + x86 + false + + + pdbonly + true + bin\x86\Release + TRACE;WINDOWS + prompt + 4 + true + false + x86 + true + + + + + + + + + + + + + + + + + + true + + + + + False + Microsoft .NET Framework 4 Client Profile %28x86 und x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Windows Installer 3.1 + true + + + False + Microsoft XNA Framework Redistributable 4.0 + true + + + + + {5BE49183-2F6F-4527-AC90-D816911FCF90} + ANX.Framework.Windows.DX10 + + + {6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35} + ANX.Framework + + + {E5D69E75-D77C-493F-BBDA-6F9E73B82549} + ANX.InputSystem.Windows.Kinect + + + {6A582788-C4D2-410C-96CD-177F75712D65} + ANX.SoundSystem.Windows.XAudio + + + {FA6E229D-4504-47B1-8A23-2D3FCC13F778} + SampleContent + Content + + + + + + \ No newline at end of file diff --git a/Samples/Kinect/Program.cs b/Samples/Kinect/Program.cs new file mode 100644 index 00000000..c7f402fa --- /dev/null +++ b/Samples/Kinect/Program.cs @@ -0,0 +1,21 @@ +using System; + +namespace Kinect +{ +#if WINDOWS || XBOX + static class Program + { + /// + /// Der Haupteinstiegspunkt für die Anwendung. + /// + static void Main(string[] args) + { + using (Game1 game = new Game1()) + { + game.Run(); + } + } + } +#endif +} + diff --git a/Samples/Kinect/Properties/AssemblyInfo.cs b/Samples/Kinect/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..7e311369 --- /dev/null +++ b/Samples/Kinect/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über den folgenden +// Satz von Attributen kontrolliert. Ändern Sie diese Attributwerte, um die mit einer Assembly +// verbundenen Informationen zu ändern. +[assembly: AssemblyTitle("Kinect")] +[assembly: AssemblyProduct("Kinect Sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("ANX.Framework Team")] +[assembly: AssemblyCopyright("Copyright © ANX.Framework Team 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Bei Einstellung von ComVisible auf falsch sind die Typen in dieser Assembly für +// COM-Komponenten nicht sichtbar. Wenn Sie von COM aus auf einen Typ in dieser Assembly +// zugreifen müssen, stellen Sie das Attribut ComVisible bei diesem Typ auf wahr ein. Nur Windows- +// Assemblys unterstützen COM. +[assembly: ComVisible(false)] + +// Auf Windows gilt die folgende GUID für die ID von typelib, wenn dieses +// COM ausgesetzt ist. Auf anderen Plattformen identifiziert sie den +// Titelspeichercontainer bei Bereitstellung dieser Assembly auf dem Gerät eindeutig. +[assembly: Guid("92a0397a-522d-455d-91a1-62c5dc85a764")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Größere Version +// Kleinere Version +// Build-Nummer +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] diff --git a/media/Test_100x100.png b/media/Test_100x100.png new file mode 100644 index 0000000000000000000000000000000000000000..2d479b86ed22180c373e95f36e66afe88f5b7732 GIT binary patch literal 2707 zcmeHI`8O1N7r!Ed!B8{GGMSJHGla7AR5SBfMrpDy6KWWH$d;tCK9(UyiZYdmH(8S` z%@bbx5{i&rWg=OMN|wqq{q&yGIq!M@f%kjv`nf;cbMC#L^Gz_L8jFd@hyZ|?3B|yI z=i7d%5I@gm#yS=89ABV?F&Rp_o2&X8`$z zP)dPECcrrkwN$7FXa(p7=mQu6mR@b44QUGd5m^lse&alXUZ*H*e0UKVxj)psbL0m25G9f=1O46Y88azse%1o$c z1Lro>-i3sEV0FOt9>^Sm+hg!x9*P#Bd>tw`p#B~-#jX~bR|Ns6ofjU9PAzmhYmSP_WAl~>( z`C9$*89Y!X$j~mx($6g@gdX4uW^_;AAOh9U3U^M6u%EC`L*q+8Hh|!=i2=##ywiN< zdU&4!y4eL;Ow02syl%52$40Vgca)HV9R{;V!k9N1_jsAB+(r5#n~h0LNBc1()$2Z= z!#Ot(4vjI&*?})j510QK{Z4M5USQPfO?NVs{bS2@TRP>bQgV$`dMyGmdAWO{Ciu$I z?T{hJLW`nZ1J2Td>Qdeb6=$m+sx;G_@#*wW&i}QXSWk;93A}Zu8J6N*&`ROl{&Cr3 z8D}~2!{Kt>CQ(UGXB?YuC_FiicUu41^Funm0U@m-{YZvEf(jXnSsMXAC^X4or{Fvajwov6Rlh=zT4gL^D zalbBMwdlnzeHTWyz4M)Z+<)#qa;bfoxui_oVciuX&`^^~SPfPa{xel4-9~Q^D9M>9 zL4}D@>VgT1k#FoW8WxwG^t6y5ajqv{eBWM0(LH2>zSKfMmcFA%_#}Tt z`jp*T{ila}Sxz5is``UMLbOj+CnFv$o6XqwpyNM$n%s{Idx@A?wL7$wxk+!eKa9=M z8HjknwV15tGDj@}uA8&;rO)e*C5^7qL;0MKrh2fRW{!nTKDxu*ntX;NZXn)K;ovb? zC>3)vitA^KGtP99WUld-$yJ`5#dV#EV`I5{4z<2YZa!JF5w0O4p}pkL)nDtUrjK_=liz{9V3_v)bTsx%cK^hZ1U`m6*X&$ zI;jn8@qXh=w`Nu}(bO7WH~&_itG1VWIfde*3wt`TJk1Tz`xsihn?6?5zamaCQc}Ds z*)F8I`AVYL&;yRWbcNl81ceo>#P1}qNjvH78!*D`jk`OqI?mC4POQgXt-k77JcKR2 z{@i|K;!d>rmJrm&P6RhjMHH3)L+xnPx7}t>p8eh7IoB%6svk~CM3A-=slO@s{2}T= zbdvEUr9;W7N}F!d+yuC{rmFuw+ZCLcaqj)bPeC5~B#w~!Na6GCg8t>GiN%|Q;GC^8 zPp?MgN93Y3vt@j0EF@naA+JlOD)F_Qs7HJWl$ zM%WaKj)l44(5ws$wF8&Boc-Xik|kr;a~hg8|I$9PbK;$&x;7XfVi7rN6?4vRIQMI~ zt;7LGDWT2Wh9DbUc)t6aZs%c~rB3L4t(EihCR!l>QPi|tL%lh#u`;eXs;)t#OYLj^ z_JIqe&0O1$+hQ@H$+@4BI}{m71YL?AZi?jL`z4ulz8D#8ieHo&H~bolv9~s7JUeAZ zcFivBCvQh*5!tak|BO*5o3y}Fj3oO`I6n5>Xk>~5&CDB$M8NtYp zpY82X`5q)s*AR$V*jO#-?L_-0GD=qRFc7d4%`(OKSE;bh`!z?K5eEcB$}O7?6lm=G-YYe*#)|WBLuDP;Eq|4B1D=?E zJM5988noqn+36Go0{-m5!dK?yU!nwtvde`GCVq53bDcyFn@BKRT_xjZ>yTq_YyP~o z5#qd`uKQxvj7=Q9&6%zbe>*L4f?P-(jsG?`*j?&_TNrwgfug?3Dht%d4CYa0zOE7X zcXUng6$T$9IfRsGJZz9H<_uif5G$bHQ%EX7980rL{95=IzQ|0|CgUmwDWuY}$q1jW kofE&O;eWI8chYX~YmQvmTW*J#`t_BX7*Y*N$fu+J0R&YVp#T5? literal 0 HcmV?d00001