Browse Source

Deferred sample platforms

Nikos Kastellanos 11 months ago
parent
commit
379f8e1888
46 changed files with 1105 additions and 0 deletions
  1. 72 0
      Samples/Deferred.sln
  2. 7 0
      Samples/Deferred/Deferred.Android/AndroidManifest.xml
  3. 19 0
      Samples/Deferred/Deferred.Android/Assets/AboutAssets.txt
  4. 62 0
      Samples/Deferred/Deferred.Android/Deferred.Android.csproj
  5. 27 0
      Samples/Deferred/Deferred.Android/DeferredActivity.cs
  6. 4 0
      Samples/Deferred/Deferred.Android/Directory.Build.props
  7. 44 0
      Samples/Deferred/Deferred.Android/Resources/AboutResources.txt
  8. BIN
      Samples/Deferred/Deferred.Android/Resources/Drawable/Icon.png
  9. BIN
      Samples/Deferred/Deferred.Android/Resources/Drawable/Splash.png
  10. 65 0
      Samples/Deferred/Deferred.Android/Resources/Resource.Designer.cs
  11. 4 0
      Samples/Deferred/Deferred.Android/Resources/Values/Strings.xml
  12. 7 0
      Samples/Deferred/Deferred.Android/Resources/Values/Styles.xml
  13. 12 0
      Samples/Deferred/Deferred.BlazorGL/App.razor
  14. 62 0
      Samples/Deferred/Deferred.BlazorGL/Deferred.BlazorGL.csproj
  15. 4 0
      Samples/Deferred/Deferred.BlazorGL/Directory.Build.props
  16. 7 0
      Samples/Deferred/Deferred.BlazorGL/MainLayout.razor
  17. 98 0
      Samples/Deferred/Deferred.BlazorGL/MainLayout.razor.css
  18. 20 0
      Samples/Deferred/Deferred.BlazorGL/Pages/Index.razor
  19. 37 0
      Samples/Deferred/Deferred.BlazorGL/Pages/Index.razor.cs
  20. 24 0
      Samples/Deferred/Deferred.BlazorGL/Program.cs
  21. 30 0
      Samples/Deferred/Deferred.BlazorGL/Properties/launchSettings.json
  22. 10 0
      Samples/Deferred/Deferred.BlazorGL/_Imports.razor
  23. BIN
      Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/enemy_0.xnb
  24. BIN
      Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/font.xnb
  25. BIN
      Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/spaceship.xnb
  26. BIN
      Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/sphere.xnb
  27. 94 0
      Samples/Deferred/Deferred.BlazorGL/wwwroot/css/app.css
  28. 5 0
      Samples/Deferred/Deferred.BlazorGL/wwwroot/css/bootstrap/bootstrap.min.css
  29. 0 0
      Samples/Deferred/Deferred.BlazorGL/wwwroot/css/bootstrap/bootstrap.min.css.map
  30. BIN
      Samples/Deferred/Deferred.BlazorGL/wwwroot/favicon.ico
  31. 111 0
      Samples/Deferred/Deferred.BlazorGL/wwwroot/index.html
  32. 0 0
      Samples/Deferred/Deferred.BlazorGL/wwwroot/js/decode.min.js
  33. BIN
      Samples/Deferred/Deferred.BlazorGL/wwwroot/kni.png
  34. 60 0
      Samples/Deferred/Deferred.DesktopGL/Deferred.DesktopGL.csproj
  35. 4 0
      Samples/Deferred/Deferred.DesktopGL/Directory.Build.props
  36. BIN
      Samples/Deferred/Deferred.DesktopGL/Icon.bmp
  37. BIN
      Samples/Deferred/Deferred.DesktopGL/Icon.ico
  38. 20 0
      Samples/Deferred/Deferred.DesktopGL/Program.cs
  39. 42 0
      Samples/Deferred/Deferred.DesktopGL/app.manifest
  40. 18 0
      Samples/Deferred/Deferred.Shared/Deferred.Shared.projitems
  41. 12 0
      Samples/Deferred/Deferred.Shared/Deferred.Shared.shproj
  42. 58 0
      Samples/Deferred/Deferred.WindowsDX/Deferred.WindowsDX.csproj
  43. 4 0
      Samples/Deferred/Deferred.WindowsDX/Directory.Build.props
  44. BIN
      Samples/Deferred/Deferred.WindowsDX/Icon.ico
  45. 20 0
      Samples/Deferred/Deferred.WindowsDX/Program.cs
  46. 42 0
      Samples/Deferred/Deferred.WindowsDX/app.manifest

+ 72 - 0
Samples/Deferred.sln

@@ -0,0 +1,72 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.11.35222.181
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Deferred", "Deferred", "{D7BCCD0B-1814-426F-82C4-133AADFF3A8E}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Deferred.Shared", "Deferred\Deferred.Shared\Deferred.Shared.shproj", "{710E05C6-C4B4-4762-A685-02A8E4015174}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Deferred.Android", "Deferred\Deferred.Android\Deferred.Android.csproj", "{E6256BEE-7707-482C-B9F0-044C5C210F86}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Deferred.WindowsDX", "Deferred\Deferred.WindowsDX\Deferred.WindowsDX.csproj", "{F46F73C9-E79E-41E5-9498-B587E9701B07}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Deferred.DesktopGL", "Deferred\Deferred.DesktopGL\Deferred.DesktopGL.csproj", "{E126359E-513F-4623-B2EF-39EEEC6225F3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Deferred.BlazorGL", "Deferred\Deferred.BlazorGL\Deferred.BlazorGL.csproj", "{D188F761-8910-4442-8552-BB30BC451870}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Aether.Shaders", "Aether.Shaders", "{E0EC3ECF-86A0-4DB9-80FB-EABB5E3C3534}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aether.Shaders.Deferred.NETSTANDARD", "..\Shaders\Deferred\Aether.Shaders.Deferred.NETSTANDARD.csproj", "{4CDE0225-870D-4F11-B4C8-333DD42ED6DB}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E6256BEE-7707-482C-B9F0-044C5C210F86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E6256BEE-7707-482C-B9F0-044C5C210F86}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E6256BEE-7707-482C-B9F0-044C5C210F86}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+		{E6256BEE-7707-482C-B9F0-044C5C210F86}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E6256BEE-7707-482C-B9F0-044C5C210F86}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E6256BEE-7707-482C-B9F0-044C5C210F86}.Release|Any CPU.Deploy.0 = Release|Any CPU
+		{F46F73C9-E79E-41E5-9498-B587E9701B07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F46F73C9-E79E-41E5-9498-B587E9701B07}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F46F73C9-E79E-41E5-9498-B587E9701B07}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F46F73C9-E79E-41E5-9498-B587E9701B07}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E126359E-513F-4623-B2EF-39EEEC6225F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E126359E-513F-4623-B2EF-39EEEC6225F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E126359E-513F-4623-B2EF-39EEEC6225F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E126359E-513F-4623-B2EF-39EEEC6225F3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D188F761-8910-4442-8552-BB30BC451870}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D188F761-8910-4442-8552-BB30BC451870}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D188F761-8910-4442-8552-BB30BC451870}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D188F761-8910-4442-8552-BB30BC451870}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4CDE0225-870D-4F11-B4C8-333DD42ED6DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4CDE0225-870D-4F11-B4C8-333DD42ED6DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4CDE0225-870D-4F11-B4C8-333DD42ED6DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4CDE0225-870D-4F11-B4C8-333DD42ED6DB}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{710E05C6-C4B4-4762-A685-02A8E4015174} = {D7BCCD0B-1814-426F-82C4-133AADFF3A8E}
+		{E6256BEE-7707-482C-B9F0-044C5C210F86} = {D7BCCD0B-1814-426F-82C4-133AADFF3A8E}
+		{F46F73C9-E79E-41E5-9498-B587E9701B07} = {D7BCCD0B-1814-426F-82C4-133AADFF3A8E}
+		{E126359E-513F-4623-B2EF-39EEEC6225F3} = {D7BCCD0B-1814-426F-82C4-133AADFF3A8E}
+		{D188F761-8910-4442-8552-BB30BC451870} = {D7BCCD0B-1814-426F-82C4-133AADFF3A8E}
+		{4CDE0225-870D-4F11-B4C8-333DD42ED6DB} = {E0EC3ECF-86A0-4DB9-80FB-EABB5E3C3534}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {1187198A-FAF0-489D-B019-DCD818F676F3}
+	EndGlobalSection
+	GlobalSection(SharedMSBuildProjectFiles) = preSolution
+		Deferred\Deferred.Shared\Deferred.Shared.projitems*{710e05c6-c4b4-4762-a685-02a8e4015174}*SharedItemsImports = 13
+		Deferred\Deferred.Shared\Deferred.Shared.projitems*{d188f761-8910-4442-8552-bb30bc451870}*SharedItemsImports = 5
+		Deferred\Deferred.Shared\Deferred.Shared.projitems*{e126359e-513f-4623-b2ef-39eeec6225f3}*SharedItemsImports = 5
+		Deferred\Deferred.Shared\Deferred.Shared.projitems*{e6256bee-7707-482c-b9f0-044c5c210f86}*SharedItemsImports = 5
+		Deferred\Deferred.Shared\Deferred.Shared.projitems*{f46f73c9-e79e-41e5-9498-b587e9701b07}*SharedItemsImports = 5
+	EndGlobalSection
+EndGlobal

+ 7 - 0
Samples/Deferred/Deferred.Android/AndroidManifest.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Deferred.Deferred" android:versionCode="1" android:versionName="1.0">
+	<application android:label="Deferred"></application>
+	<uses-permission android:name="android.permission.VIBRATE" />
+	<uses-permission android:name="android.permission.INTERNET" />
+	<uses-permission android:name="com.android.vending.BILLING" />
+</manifest>

+ 19 - 0
Samples/Deferred/Deferred.Android/Assets/AboutAssets.txt

@@ -0,0 +1,19 @@
+Any raw assets you want to be deployed with your application can be placed in
+this directory (and child directories) and given a Build Action of "AndroidAsset".
+
+These files will be deployed with you package and will be accessible using Android's
+AssetManager, like this:
+
+public class ReadAsset : Activity
+{
+	protected override void OnCreate (Bundle bundle)
+	{
+		base.OnCreate (bundle);
+
+		InputStream input = Assets.Open ("my_asset.txt");
+	}
+}
+
+Additionally, some Android functions will automatically load asset files:
+
+Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");

+ 62 - 0
Samples/Deferred/Deferred.Android/Deferred.Android.csproj

@@ -0,0 +1,62 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <TargetFramework>net8.0-android</TargetFramework>
+    <ProjectGuid>e6256bee-7707-482c-b9f0-044c5c210f86</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <IsTrimmable>True</IsTrimmable>
+	<TrimMode>partial</TrimMode>
+    <RootNamespace>Deferred</RootNamespace>
+    <AssemblyName>Deferred</AssemblyName>
+    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
+    <DefineConstants>$(DefineConstants);ANDROID</DefineConstants>
+    <KniPlatform>Android</KniPlatform>
+    <ApplicationId>com.companyname.Deferred</ApplicationId>
+    <ApplicationVersion>1</ApplicationVersion>
+    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
+    <AndroidStoreUncompressedFileExtensions>.m4a</AndroidStoreUncompressedFileExtensions>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="nkast.Xna.Framework" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Graphics" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Audio" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Media" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Input" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Game" Version="3.13.9001" />
+    <PackageReference Include="MonoGame.Framework.Android.9000" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content.Pipeline.Builder" Version="3.13.9001" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DeferredActivity.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="AndroidManifest.xml" />
+    <None Include="Assets\AboutAssets.txt" />
+    <None Include="Resources\AboutResources.txt" />
+    <AndroidResource Include="Resources\Drawable\Icon.png" />
+    <AndroidResource Include="Resources\Drawable\Splash.png" />
+    <AndroidResource Include="Resources\Values\Strings.xml" />
+    <AndroidResource Include="Resources\Values\Styles.xml" />
+    <Folder Include="Resources\Layout\" />
+  </ItemGroup>
+  <ItemGroup>
+    <KniContentReference Include="..\DeferredContent\DeferredContent.mgcb">   
+      <Link>Content\DeferredContent.mgcb</Link>
+    </KniContentReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Shaders\Deferred\Aether.Shaders.Deferred.NETSTANDARD.csproj" />
+  </ItemGroup>
+  <Import Project="..\Deferred.Shared\Deferred.Shared.projitems" Label="Shared" />
+
+</Project>

+ 27 - 0
Samples/Deferred/Deferred.Android/DeferredActivity.cs

@@ -0,0 +1,27 @@
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
+using Android.Views;
+
+namespace Samples.Deferred
+{
+    [Activity(Label = "Deferred"
+        , MainLauncher = true
+        , Icon = "@drawable/icon"
+        , Theme = "@style/Theme.Splash"
+        , AlwaysRetainTaskState = true
+        , LaunchMode = LaunchMode.SingleInstance
+        , ScreenOrientation = ScreenOrientation.FullSensor
+        , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize)]
+    public class DeferredActivity : Microsoft.Xna.Framework.AndroidGameActivity
+    {
+        protected override void OnCreate(Bundle bundle)
+        {
+            base.OnCreate(bundle);
+            var game = new DeferredGame();
+            SetContentView((View)game.Services.GetService(typeof(View)));
+            game.Run();
+        }
+    }
+}
+

+ 4 - 0
Samples/Deferred/Deferred.Android/Directory.Build.props

@@ -0,0 +1,4 @@
+<Project>
+
+</Project>
+

+ 44 - 0
Samples/Deferred/Deferred.Android/Resources/AboutResources.txt

@@ -0,0 +1,44 @@
+Images, layout descriptions, binary blobs and string dictionaries can be included 
+in your application as resource files.  Various Android APIs are designed to 
+operate on the resource IDs instead of dealing with images, strings or binary blobs 
+directly.
+
+For example, a sample Android app that contains a user interface layout (Main.xml),
+an internationalization string table (Strings.xml) and some icons (drawable/Icon.png) 
+would keep its resources in the "Resources" directory of the application:
+
+Resources/
+    Drawable/
+        Icon.png
+
+    Layout/
+        Main.axml
+
+    Values/
+        Strings.xml
+
+In order to get the build system to recognize Android resources, the build action should be set 
+to "AndroidResource".  The native Android APIs do not operate directly with filenames, but 
+instead operate on resource IDs.  When you compile an Android application that uses resources, 
+the build system will package the resources for distribution and generate a class called
+"Resource" that contains the tokens for each one of the resources included. For example, 
+for the above Resources layout, this is what the Resource class would expose:
+
+public class Resource {
+    public class Drawable {
+        public const int Icon = 0x123;
+    }
+
+    public class Layout {
+        public const int Main = 0x456;
+    }
+
+    public class String {
+        public const int FirstString = 0xabc;
+        public const int SecondString = 0xbcd;
+    }
+}
+
+You would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or 
+Resource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString
+to reference the first string in the dictionary file Values/Strings.xml.

BIN
Samples/Deferred/Deferred.Android/Resources/Drawable/Icon.png


BIN
Samples/Deferred/Deferred.Android/Resources/Drawable/Splash.png


+ 65 - 0
Samples/Deferred/Deferred.Android/Resources/Resource.Designer.cs

@@ -0,0 +1,65 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.269
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Deferred
+{
+	
+	
+	public partial class Resource
+	{
+		
+		public partial class Attribute
+		{
+			
+			private Attribute()
+			{
+			}
+		}
+		
+		public partial class Drawable
+		{
+			
+			// aapt resource value: 0x7f020000
+			public const int Icon = 2130837504;
+			
+			// aapt resource value: 0x7f020001
+			public const int Splash = 2130837505;
+			
+			private Drawable()
+			{
+			}
+		}
+		
+		public partial class String
+		{
+			
+			// aapt resource value: 0x7f030001
+			public const int ApplicationName = 2130903041;
+			
+			// aapt resource value: 0x7f030000
+			public const int Hello = 2130903040;
+			
+			private String()
+			{
+			}
+		}
+		
+		public partial class Style
+		{
+			
+			// aapt resource value: 0x7f040000
+			public const int Theme_Splash = 2130968576;
+			
+			private Style()
+			{
+			}
+		}
+	}
+}

+ 4 - 0
Samples/Deferred/Deferred.Android/Resources/Values/Strings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="ApplicationName">Deferred</string>
+</resources>

+ 7 - 0
Samples/Deferred/Deferred.Android/Resources/Values/Styles.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+  <style name="Theme.Splash" parent="android:Theme">
+    <item name="android:windowBackground">@drawable/splash</item>
+    <item name="android:windowNoTitle">true</item>
+  </style>
+</resources>

+ 12 - 0
Samples/Deferred/Deferred.BlazorGL/App.razor

@@ -0,0 +1,12 @@
+<Router AppAssembly="@typeof(App).Assembly">
+    <Found Context="routeData">
+        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
+        <FocusOnNavigate RouteData="@routeData" Selector="h1" />
+    </Found>
+    <NotFound>
+        <PageTitle>Not found</PageTitle>
+        <LayoutView Layout="@typeof(MainLayout)">
+            <p role="alert">Sorry, there's nothing at this address.</p>
+        </LayoutView>
+    </NotFound>
+</Router>

+ 62 - 0
Samples/Deferred/Deferred.BlazorGL/Deferred.BlazorGL.csproj

@@ -0,0 +1,62 @@
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
+
+  <PropertyGroup>
+    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+    <TargetFramework>net8.0</TargetFramework>
+    <Nullable>disable</Nullable>
+    <ImplicitUsings>disable</ImplicitUsings>
+    <ProjectGuid>{d188f761-8910-4442-8552-bb30bc451870}</ProjectGuid>
+    <RootNamespace>Deferred</RootNamespace>
+    <AssemblyName>Deferred</AssemblyName>
+    <DefineConstants>$(DefineConstants);BLAZORGL</DefineConstants>
+	<KniPlatform>BlazorGL</KniPlatform>
+  </PropertyGroup>
+  
+  <PropertyGroup>
+    <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Include="Pages\Index.razor.cs" />
+    <Compile Include="Program.cs" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="nkast.Xna.Framework" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Graphics" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Audio" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Media" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Input" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Game" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Blazor" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content.Pipeline.Builder" Version="3.13.9001" />
+  </ItemGroup>
+
+  <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
+    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.32" />
+    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.32" PrivateAssets="all" />
+  </ItemGroup>
+  <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
+    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.7" />
+    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.7" PrivateAssets="all" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <KniContentReference Include="..\DeferredContent\DeferredContent.mgcb">   
+      <Link>Content\DeferredContent.mgcb</Link>
+    </KniContentReference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Shaders\Deferred\Aether.Shaders.Deferred.NETSTANDARD.csproj" />
+  </ItemGroup>
+  <Import Project="..\Deferred.Shared\Deferred.Shared.projitems" Label="Shared" />
+
+</Project>

+ 4 - 0
Samples/Deferred/Deferred.BlazorGL/Directory.Build.props

@@ -0,0 +1,4 @@
+<Project>
+  
+</Project>
+

+ 7 - 0
Samples/Deferred/Deferred.BlazorGL/MainLayout.razor

@@ -0,0 +1,7 @@
+@inherits LayoutComponentBase
+
+<div class="page">
+    <main>
+            @Body
+    </main>
+</div>

+ 98 - 0
Samples/Deferred/Deferred.BlazorGL/MainLayout.razor.css

@@ -0,0 +1,98 @@
+.page
+{
+    position: relative;
+    display: flex;
+    flex-direction: column;
+}
+
+main
+{
+    flex: 1;
+}
+
+.sidebar
+{
+    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
+}
+
+.top-row
+{
+    background-color: #f7f7f7;
+    border-bottom: 1px solid #d6d5d5;
+    justify-content: flex-end;
+    height: 3.5rem;
+    display: flex;
+    align-items: center;
+}
+
+    .top-row ::deep a, .top-row ::deep .btn-link
+    {
+        white-space: nowrap;
+        margin-left: 1.5rem;
+        text-decoration: none;
+    }
+
+    .top-row ::deep a:hover, .top-row ::deep .btn-link:hover
+    {
+        text-decoration: underline;
+    }
+
+    .top-row ::deep a:first-child
+    {
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+@media (max-width: 640.98px)
+{
+    .top-row:not(.auth)
+    {
+        display: none;
+    }
+
+    .top-row.auth
+    {
+        justify-content: space-between;
+    }
+
+    .top-row ::deep a, .top-row ::deep .btn-link
+    {
+        margin-left: 0;
+    }
+}
+
+@media (min-width: 641px)
+{
+    .page
+    {
+        flex-direction: row;
+    }
+
+    .sidebar
+    {
+        width: 250px;
+        height: 100vh;
+        position: sticky;
+        top: 0;
+    }
+
+    .top-row
+    {
+        position: sticky;
+        top: 0;
+        z-index: 1;
+    }
+
+    .top-row.auth ::deep a:first-child
+    {
+        flex: 1;
+        text-align: right;
+        width: 0;
+    }
+
+    .top-row, article
+    {
+        padding-left: 2rem !important;
+        padding-right: 1.5rem !important;
+    }
+}

+ 20 - 0
Samples/Deferred/Deferred.BlazorGL/Pages/Index.razor

@@ -0,0 +1,20 @@
+@page "/"
+@page "/index.html"
+@inject IJSRuntime JsRuntime
+@using nkast.Wasm.Canvas
+
+<PageTitle>Deferred</PageTitle>
+
+<div id="canvasHolder" style="
+    background: #000;
+    margin:0%;
+    position: fixed;
+    top: 0px;
+    right: 0px;
+    bottom: 0px;
+    left: 0px;
+    width:100vw;
+    height:100vh;
+">
+    <canvas id="theCanvas" style="touch-action:none;"></canvas>
+</div>

+ 37 - 0
Samples/Deferred/Deferred.BlazorGL/Pages/Index.razor.cs

@@ -0,0 +1,37 @@
+using System;
+using Microsoft.JSInterop;
+using Microsoft.Xna.Framework;
+using Samples.Deferred;
+
+namespace Deferred.Pages
+{
+    public partial class Index
+    {
+        Game _game;
+
+        protected override void OnAfterRender(bool firstRender)
+        {
+            base.OnAfterRender(firstRender);
+
+            if (firstRender)
+            {
+                JsRuntime.InvokeAsync<object>("initRenderJS", DotNetObjectReference.Create(this));
+            }
+        }
+
+        [JSInvokable]
+        public void TickDotNet()
+        {
+            // init game
+            if (_game == null)
+            {
+                _game = new DeferredGame();
+                _game.Run();
+            }
+
+            // run gameloop
+            _game.Tick();
+        }
+
+    }
+}

+ 24 - 0
Samples/Deferred/Deferred.BlazorGL/Program.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Components.Web;
+using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Deferred
+{
+    internal class Program
+    {
+        private static async Task Main(string[] args)
+        {
+            var builder = WebAssemblyHostBuilder.CreateDefault(args);
+            builder.RootComponents.Add<App>("#app");
+            builder.RootComponents.Add<HeadOutlet>("head::after");
+            builder.Services.AddScoped(sp => new HttpClient()
+            {
+                BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
+            });
+            await builder.Build().RunAsync();
+        }
+    }
+}

+ 30 - 0
Samples/Deferred/Deferred.BlazorGL/Properties/launchSettings.json

@@ -0,0 +1,30 @@
+{
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:56897",
+      "sslPort": 0
+    }
+  },
+  "profiles": {
+    "Deferred": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "launchBrowser": true,
+      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
+      "applicationUrl": "http://localhost:5259",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}

+ 10 - 0
Samples/Deferred/Deferred.BlazorGL/_Imports.razor

@@ -0,0 +1,10 @@
+@using System.Net.Http
+@using System.Net.Http.Json
+@using Microsoft.AspNetCore.Components.Forms
+@using Microsoft.AspNetCore.Components.Routing
+@using Microsoft.AspNetCore.Components.Web
+@using Microsoft.AspNetCore.Components.Web.Virtualization
+@using Microsoft.AspNetCore.Components.WebAssembly.Http
+@using Microsoft.JSInterop
+@using nkast.Wasm.Canvas
+@using Deferred

BIN
Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/enemy_0.xnb


BIN
Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/font.xnb


BIN
Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/spaceship.xnb


BIN
Samples/Deferred/Deferred.BlazorGL/wwwroot/Content/sphere.xnb


+ 94 - 0
Samples/Deferred/Deferred.BlazorGL/wwwroot/css/app.css

@@ -0,0 +1,94 @@
+
+html, body
+{
+    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+
+h1:focus
+{
+    outline: none;
+}
+
+a, .btn-link
+{
+    color: #0077cc;
+}
+
+.btn-primary
+{
+    color: #fff;
+    background-color: #1b6ec2;
+    border-color: #1861ac;
+}
+
+.content
+{
+    padding-top: 1.1rem;
+}
+
+.valid.modified:not([type=checkbox])
+{
+    outline: 1px solid #26b050;
+}
+
+.invalid
+{
+    outline: 1px solid red;
+}
+
+.validation-message
+{
+    color: red;
+}
+
+#blazor-error-ui
+{
+    background: lightyellow;
+    bottom: 0;
+    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
+    display: none;
+    left: 0;
+    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
+    position: fixed;
+    width: 100%;
+    z-index: 1000;
+}
+
+    #blazor-error-ui .dismiss
+    {
+        cursor: pointer;
+        position: absolute;
+        right: 0.75rem;
+        top: 0.5rem;
+    }
+
+.blazor-error-boundary
+{
+    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
+    padding: 1rem 1rem 1rem 3.7rem;
+    color: white;
+}
+
+    .blazor-error-boundary::after
+    {
+        content: "An error has occurred."
+    }
+
+#theCanvas 
+{
+    position: fixed;
+    top: 0px;
+    right: 0px;
+    bottom: 0px;
+    left: 0px;
+}
+
+
+#canvas 
+{
+    position: fixed;
+    top: 0px;
+    right: 0px;
+    bottom: 0px;
+    left: 0px;
+}

File diff suppressed because it is too large
+ 5 - 0
Samples/Deferred/Deferred.BlazorGL/wwwroot/css/bootstrap/bootstrap.min.css


File diff suppressed because it is too large
+ 0 - 0
Samples/Deferred/Deferred.BlazorGL/wwwroot/css/bootstrap/bootstrap.min.css.map


BIN
Samples/Deferred/Deferred.BlazorGL/wwwroot/favicon.ico


+ 111 - 0
Samples/Deferred/Deferred.BlazorGL/wwwroot/index.html

@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+    <title>Deferred</title>
+    <base href="./" />
+    <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
+    <link href="css/app.css" rel="stylesheet" />
+    <link href="Deferred.styles.css" rel="stylesheet" />
+</head>
+
+<body>
+
+    <div id="app">
+        <div id="loading" style="display: table-cell; margin: auto; width:100vw; height:100vh; vertical-align: middle; background: #ffcc10;">
+            <div style="display: block; margin: auto; width: 9em; color: white;font-family: 'Segoe UI', sans-serif;">
+            <div style="text-align: center; font-size: 0.85em;">Made with<br/><a href="https://github.com/kniEngine/kni"><img src="kni.png" border="0" alt="Kni"></a></div>
+            <div style="text-align: center; font-size: 1.8em;">loading&nbsp;<marquee style="width:0.9em; vertical-align: bottom;">.&nbsp;.&nbsp;.&nbsp;&nbsp;&nbsp;</marquee></div>
+        </div>
+    </div>
+
+    <div id="blazor-error-ui">
+        An unhandled error has occurred.
+        <a href="" class="reload">Reload</a>
+        <a class="dismiss">?</a>
+    </div>
+
+    <script src="_framework/blazor.webassembly.js" autostart="false"></script>
+    <script type="module">
+        import { BrotliDecode } from './js/decode.min.js';
+        // Set this to enable Brotli (.br) decompression on static webServers
+        // that don't support content compression and http://.
+        var enableBrotliDecompression = false;
+        Blazor.start({
+            loadBootResource: function (type, name, defaultUri, integrity)
+            {
+                if (enableBrotliDecompression === true && type !== 'dotnetjs' && location.hostname !== 'localhost')
+                {
+                    return (async function()
+                    {
+                        const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
+                        if (!response.ok)
+                            throw new Error(response.statusText);
+                        const originalResponseBuffer = await response.arrayBuffer();
+                        const originalResponseArray = new Int8Array(originalResponseBuffer);
+                        const contentType = (type === 'dotnetwasm')
+                                          ? 'application/wasm'
+                                          : 'application/octet-stream';
+                        const decompressedResponseArray = BrotliDecode(originalResponseArray);
+                        return new Response(decompressedResponseArray,
+                                            { headers: { 'content-type': contentType }
+                                   });
+                    })();
+                }
+            }
+        });
+    </script>
+
+    <script src="_content/nkast.Wasm.Dom/js/JSObject.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Dom/js/Window.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Dom/js/Document.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Dom/js/Navigator.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Dom/js/Gamepad.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Dom/js/Media.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.XHR/js/XHR.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Canvas/js/Canvas.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Canvas/js/CanvasGLContext.8.0.1.js"></script>
+    <script src="_content/nkast.Wasm.Audio/js/Audio.8.0.1.js"></script>
+
+    <script>
+        function tickJS()
+        {
+            window.theInstance.invokeMethod('TickDotNet');
+            window.requestAnimationFrame(tickJS);
+        }
+
+        window.initRenderJS = (instance) =>
+        {
+            window.theInstance = instance;
+
+            // set initial canvas size
+            var canvas = document.getElementById('theCanvas');
+            var holder = document.getElementById('canvasHolder');
+            canvas.width = holder.clientWidth;
+            canvas.height = holder.clientHeight;
+            // disable context menu on right click
+            canvas.addEventListener("contextmenu", e => e.preventDefault());
+            
+            // begin game loop
+            window.requestAnimationFrame(tickJS);
+        };
+
+        window.onkeydown = function(event)
+        {
+            // Prevent Arrows Keys and Spacebar scrolling the outer page
+            // when running inside an iframe. e.g: itch.io embedding.
+            if ([32, 37, 38, 39, 40].indexOf(event.keyCode) > -1)
+                event.preventDefault();
+        };
+        window.onmousewheel = function(event)
+        {
+            // Prevent Mousewheel scrolling the outer page
+            // when running inside an iframe. e.g: itch.io embedding.
+            event.preventDefault();
+        };
+    </script>
+</body>
+
+</html>

File diff suppressed because it is too large
+ 0 - 0
Samples/Deferred/Deferred.BlazorGL/wwwroot/js/decode.min.js


BIN
Samples/Deferred/Deferred.BlazorGL/wwwroot/kni.png


+ 60 - 0
Samples/Deferred/Deferred.DesktopGL/Deferred.DesktopGL.csproj

@@ -0,0 +1,60 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <TargetFramework>net8.0</TargetFramework>
+    <RollForward>Major</RollForward>
+    <ProjectGuid>e126359e-513f-4623-b2ef-39eeec6225f3</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <PublishTrimmed>True</PublishTrimmed>
+    <PublishAot>True</PublishAot>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Deferred</RootNamespace>
+    <AssemblyName>Deferred</AssemblyName>
+    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
+    <DefineConstants>$(DefineConstants);DESKTOPGL</DefineConstants>
+    <KniPlatform>DesktopGL</KniPlatform>
+  </PropertyGroup>
+	
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+	
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+	
+  <PropertyGroup>
+    <ApplicationIcon>Icon.ico</ApplicationIcon>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationManifest>app.manifest</ApplicationManifest>
+  </PropertyGroup>
+  <ItemGroup>
+    <PackageReference Include="nkast.Xna.Framework" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Graphics" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Audio" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Media" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Input" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Game" Version="3.13.9001" />
+    <PackageReference Include="MonoGame.Framework.DesktopGL.9000" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content.Pipeline.Builder" Version="3.13.9001" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Icon.ico" />
+    <EmbeddedResource Include="Icon.bmp" />
+  </ItemGroup>
+  <ItemGroup>
+    <KniContentReference Include="..\DeferredContent\DeferredContent.mgcb">
+      <Link>Content\DeferredContent.mgcb</Link>
+    </KniContentReference>
+    <None Include="app.manifest" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Shaders\Deferred\Aether.Shaders.Deferred.NETSTANDARD.csproj" />
+  </ItemGroup>
+  <Import Project="..\Deferred.Shared\Deferred.Shared.projitems" Label="Shared" />
+
+</Project>

+ 4 - 0
Samples/Deferred/Deferred.DesktopGL/Directory.Build.props

@@ -0,0 +1,4 @@
+<Project>
+
+</Project>
+

BIN
Samples/Deferred/Deferred.DesktopGL/Icon.bmp


BIN
Samples/Deferred/Deferred.DesktopGL/Icon.ico


+ 20 - 0
Samples/Deferred/Deferred.DesktopGL/Program.cs

@@ -0,0 +1,20 @@
+using System;
+
+namespace Samples.Deferred
+{
+    /// <summary>
+    /// The main class.
+    /// </summary>
+    public static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            using (var game = new DeferredGame())
+                game.Run();
+        }
+    }
+}

+ 42 - 0
Samples/Deferred/Deferred.DesktopGL/app.manifest

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+  <assemblyIdentity version="1.0.0.0" name="Deferred"/>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+    <security>
+      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <!-- A list of the Windows versions that this application has been tested on and is
+           is designed to work with. Uncomment the appropriate elements and Windows will 
+           automatically selected the most compatible environment. -->
+
+      <!-- Windows Vista -->
+      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
+
+      <!-- Windows 7 -->
+      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
+
+      <!-- Windows 8 -->
+      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
+
+      <!-- Windows 8.1 -->
+      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
+
+      <!-- Windows 10 -->
+      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
+
+    </application>
+  </compatibility>
+
+  <application xmlns="urn:schemas-microsoft-com:asm.v3">
+    <windowsSettings>
+      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
+    </windowsSettings>
+  </application>
+
+</assembly>

+ 18 - 0
Samples/Deferred/Deferred.Shared/Deferred.Shared.projitems

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+    <HasSharedItems>true</HasSharedItems>
+    <SharedGUID>710e05c6-c4b4-4762-a685-02a8e4015174</SharedGUID>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration">
+    <Import_RootNamespace>Deferred</Import_RootNamespace>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="$(MSBuildThisFileDirectory)DeferredGame.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)DeferredRendering.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)DeferredSampleComponent.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)QuadRenderer.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Spaceship.cs" />
+  </ItemGroup>
+</Project>

+ 12 - 0
Samples/Deferred/Deferred.Shared/Deferred.Shared.shproj

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>710e05c6-c4b4-4762-a685-02a8e4015174</ProjectGuid>
+  </PropertyGroup>
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.Default.props" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.props" />
+  <PropertyGroup />
+  <Import Project="Deferred.Shared.projitems" Label="Shared" />
+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.CSharp.targets" />
+</Project>

+ 58 - 0
Samples/Deferred/Deferred.WindowsDX/Deferred.WindowsDX.csproj

@@ -0,0 +1,58 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <TargetFramework>net8.0-windows</TargetFramework>
+    <RollForward>Major</RollForward>
+    <UseWindowsForms>true</UseWindowsForms>
+    <ProjectGuid>f46f73c9-e79e-41e5-9498-b587e9701b07</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Deferred</RootNamespace>
+    <AssemblyName>Deferred</AssemblyName>
+    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
+    <DefineConstants>$(DefineConstants);WINDOWSDX</DefineConstants>
+    <KniPlatform>Windows</KniPlatform>
+  </PropertyGroup>
+	
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+	
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+  </PropertyGroup>
+	
+  <PropertyGroup>
+    <ApplicationIcon>Icon.ico</ApplicationIcon>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationManifest>app.manifest</ApplicationManifest>
+  </PropertyGroup>
+  <ItemGroup>
+    <PackageReference Include="nkast.Xna.Framework" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Graphics" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Audio" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Media" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Input" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Game" Version="3.13.9001" />
+    <PackageReference Include="MonoGame.Framework.WindowsDX.9000" Version="3.13.9001" />
+    <PackageReference Include="nkast.Xna.Framework.Content.Pipeline.Builder" Version="3.13.9001" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Icon.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <KniContentReference Include="..\DeferredContent\DeferredContent.mgcb">
+      <Link>Content\DeferredContent.mgcb</Link>
+    </KniContentReference>
+    <None Include="app.manifest" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Shaders\Deferred\Aether.Shaders.Deferred.NETSTANDARD.csproj" />
+  </ItemGroup>
+  <Import Project="..\Deferred.Shared\Deferred.Shared.projitems" Label="Shared" />
+
+</Project>

+ 4 - 0
Samples/Deferred/Deferred.WindowsDX/Directory.Build.props

@@ -0,0 +1,4 @@
+<Project>
+
+</Project>
+

BIN
Samples/Deferred/Deferred.WindowsDX/Icon.ico


+ 20 - 0
Samples/Deferred/Deferred.WindowsDX/Program.cs

@@ -0,0 +1,20 @@
+using System;
+
+namespace Samples.Deferred
+{
+    /// <summary>
+    /// The main class.
+    /// </summary>
+    public static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            using (var game = new DeferredGame())
+                game.Run();
+        }
+    }
+}

+ 42 - 0
Samples/Deferred/Deferred.WindowsDX/app.manifest

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+  <assemblyIdentity version="1.0.0.0" name="Deferred"/>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+    <security>
+      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <!-- A list of the Windows versions that this application has been tested on and is
+           is designed to work with. Uncomment the appropriate elements and Windows will 
+           automatically selected the most compatible environment. -->
+
+      <!-- Windows Vista -->
+      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
+
+      <!-- Windows 7 -->
+      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
+
+      <!-- Windows 8 -->
+      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
+
+      <!-- Windows 8.1 -->
+      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
+
+      <!-- Windows 10 -->
+      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
+
+    </application>
+  </compatibility>
+
+  <application xmlns="urn:schemas-microsoft-com:asm.v3">
+    <windowsSettings>
+      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
+    </windowsSettings>
+  </application>
+
+</assembly>

Some files were not shown because too many files changed in this diff