Drop support for UWP
This commit is contained in:
Родитель
c21272cc5b
Коммит
625d4af238
|
@ -1,2 +1,2 @@
|
|||
set StridePlatforms=Windows;UWP;Android;iOS;Linux
|
||||
set StridePlatforms=Windows;Android;iOS;Linux
|
||||
Stride.sln
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
set StridePlatforms=Windows;UWP
|
||||
Stride.Runtime.sln
|
|
@ -92,7 +92,7 @@ Example of use:
|
|||
</Target>
|
||||
|
||||
<!--
|
||||
Build Stride: Windows, Android, iOS, Windows 10 (UWP)
|
||||
Build Stride: Windows, Android, iOS
|
||||
-->
|
||||
<Target Name="Clean">
|
||||
<Exec Command="RMDIR /Q /S $(StrideRoot)\Bin"/>
|
||||
|
@ -185,15 +185,6 @@ Example of use:
|
|||
<MSBuild Targets="Build" Projects="$(StrideSolution).iOS.sln" Properties="$(BuildProperties);StridePlatforms=iOS;StrideSkipAutoPack=true;StrideSkipUnitTests=true"/>
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildUWP">
|
||||
<PropertyGroup>
|
||||
<StrideSolution>$(StrideSolution).Runtime</StrideSolution>
|
||||
<StridePlatforms>UWP</StridePlatforms>
|
||||
</PropertyGroup>
|
||||
<MSBuild Targets="Restore" Projects="$(MSBuildThisFileFullPath)" Properties="StridePlatforms=$(StridePlatforms);StrideSolution=$(StrideSolution)"/>
|
||||
<MSBuild Targets="Build" Projects="$(StrideSolution).sln" Properties="$(BuildProperties);StridePlatforms=$(StridePlatforms);StrideSkipAutoPack=true;StrideSkipUnitTests=true"/>
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildWindowsVulkan">
|
||||
<MSBuild Targets="Restore" Projects="$(MSBuildThisFileFullPath)" Properties="StridePlatforms=$(StridePlatforms);StrideSolution=$(StrideSolution).Runtime;StrideGraphicsApis=Vulkan"/>
|
||||
<MSBuild Targets="Build" Projects="$(StrideSolution).Runtime.sln" Properties="$(BuildProperties);StrideGraphicsApis=Vulkan;StrideSkipAutoPack=true;StrideSkipUnitTests=true"/>
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e66db69a02c1d423dc5dd01354129c459b9f6207ee4f94e4f81ebe7bc671c10c
|
||||
size 1321472
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a3216d1b3ee9829fdb1eba3d007f36ef22f2fd32f5af7b8c62262ab874037cd5
|
||||
size 1835520
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6d10abaf888b6d62b6f792b13984af90b7f4948dea6893b75d81763979be0ea6
|
||||
size 1605632
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:681cd1b79152993198be30c9f2775d4ac42cff4ac5c94ec43369baae5e94683d
|
||||
size 86948
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bca2e4a5193fd0d092572e2bd7fea64bb669b9bb5e18b1130bcbf80f65c7158c
|
||||
size 131760
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c539591353b0699f107f3b316ffb47a27078ad8f14351df6c4e065aeac5346ee
|
||||
size 128102
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7ee12921b100599a4f0175e310beae8c78e99105103cc76884be23ff77d4b475
|
||||
size 100602
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7ecba0f1f0184957128a8103390f601679bbf388b64ec2adb69a29883b4051c2
|
||||
size 965946
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e5aa31cc874045666b65723df029896b45c192eef8f78f88be70af344e35af8b
|
||||
size 137198
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:edf28e661a99dc08ac80b4f4eeda267cdd3fd692ddda6ec1cc645b1d005a6fd5
|
||||
size 250276
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fb95b3b8143e4273e252ccf4ce8c80625022603e8333678d21e81a11cae2518f
|
||||
size 209544
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a3b160fc69b348bb3251de3d4fcdedc933bf5455d13ec6f0932f3db53e079143
|
||||
size 136992
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5fe3da1c87cbeace07db41e6b53f4165e6079b16c1a69b5299fe0c44e5522af6
|
||||
size 935704
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:659b79943f4eb2b45051f3ccec02df4cd1c178b55804ca5860f199d8f88c333e
|
||||
size 112966
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e0b65f503483f5bd5b08b0285e399c9c44602b18177773b9c790f50bb30f2771
|
||||
size 202526
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b454d45945ca912a221d3a173c68e322a196a7350d7d53baf4d29678e6f54057
|
||||
size 179866
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:35c276ddb54da74b7318f75abda8e0f6827f76a2e26b5380bf5f2057f1f0254f
|
||||
size 127910
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:34dee8da53e831040e58e43c50a62cbafed0ba23204f96c054b11c80509f4cdf
|
||||
size 932924
|
|
@ -1,4 +1,3 @@
|
|||
Forks:
|
||||
WIN8.1/UWP: https://github.com/sinkingsugar/openal-soft-winphone
|
||||
iOS: Due to LGPL limitations on openal-soft, we are using Apple OpenAL implementation
|
||||
Other platforms: https://github.com/sinkingsugar/openal-soft
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0a09e3e55f0a281f0b314978fc2f2f672c99bfbb2e6dca6680c35602f869e95c
|
||||
size 391680
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4486b7e189f427fcc5c514abe9aec707b6f840c45688159b4212df7e7d9a72e7
|
||||
size 2387968
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f62b9561d8f29cd67dab70d626bc940f48ccde52d08bac296bd35c484f710820
|
||||
size 573952
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9909872d149a4259b46bc4abd7682cf8a8b639cea819dfa1f07a066b50129bc1
|
||||
size 2404352
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2ceca2ae9425906e2fe119b42aa4602bf43a8d4ca761e7706dee2d14fbc78b4e
|
||||
size 464384
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c02365ce580c66c8e670c34d55d0bb8aafe799e1d35fa993254b651ea45ff739
|
||||
size 2592768
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b67c53b92ee7560552d8cc3d87a6ede45c0455b757b68f3127308e5e607a679e
|
||||
size 133120
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:079a5d03b84bab78cc451b148163e2a224738e87a609f74d5bf0c77681b306ee
|
||||
size 139776
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a5d4c9d21a84bec3583626218e7abbca921a125cc7f0ae95d62e997a99e3149e
|
||||
size 115200
|
|
@ -165,16 +165,8 @@
|
|||
<RemoveDir Condition="Exists('$(StrideCompileAssetOutputPath)')" ContinueOnError="true" Directories="$(StrideCompileAssetOutputPath)"/>
|
||||
</Target>
|
||||
|
||||
<!-- UWP: Adjust Appx folders -->
|
||||
<PropertyGroup Condition="'$(StrideIsExecutable)' == 'true' And '$(StridePlatform)' == 'UWP'">
|
||||
<!-- Use OutputPath to define AppxPackage directory -->
|
||||
<AppxPackageDir>$(OutputPath)\$(AppxPackageDirName)\</AppxPackageDir>
|
||||
<AppxPackageTestDir>$(AppxPackageDir)Test\</AppxPackageTestDir>
|
||||
<AppxPackageName>$(AssemblyName)</AppxPackageName>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- UWP & iOS: Compile and Transform Assets into Content during PrepareResources phase -->
|
||||
<PropertyGroup Condition="'$(StrideIsExecutable)' == 'true' And ('$(StridePlatform)' == 'UWP' Or '$(StridePlatform)' == 'Android')">
|
||||
<!-- iOS: Compile and Transform Assets into Content during PrepareResources phase -->
|
||||
<PropertyGroup Condition="'$(StrideIsExecutable)' == 'true' And '$(StridePlatform)' == 'Android'">
|
||||
<PrepareResourcesDependsOn>
|
||||
_StrideDeployAssetsAsContent;
|
||||
$(PrepareResourcesDependsOn)
|
||||
|
|
|
@ -64,7 +64,6 @@ namespace Stride.Core.Assets
|
|||
|
||||
var outputType = msProject.GetPropertyValue("OutputType");
|
||||
project.Type = outputType.ToLowerInvariant() == "winexe" || outputType.ToLowerInvariant() == "exe"
|
||||
|| outputType.ToLowerInvariant() == "appcontainerexe" // UWP
|
||||
|| msProject.GetPropertyValue("AndroidApplication").ToLowerInvariant() == "true" // Android
|
||||
? ProjectType.Executable
|
||||
: ProjectType.Library;
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace Stride.Core.IO
|
|||
count = (count + offset > int.MaxValue) ? int.MaxValue - offset : count;
|
||||
}
|
||||
|
||||
if (Platform.Type == PlatformType.Windows || Platform.Type == PlatformType.UWP)
|
||||
if (Platform.Type == PlatformType.Windows)
|
||||
{
|
||||
var countLow = (uint)count;
|
||||
var countHigh = (uint)(count >> 32);
|
||||
|
@ -74,7 +74,7 @@ namespace Stride.Core.IO
|
|||
count = (count + offset > int.MaxValue) ? int.MaxValue - offset : count;
|
||||
}
|
||||
|
||||
if (Platform.Type == PlatformType.Windows || Platform.Type == PlatformType.UWP)
|
||||
if (Platform.Type == PlatformType.Windows)
|
||||
{
|
||||
var countLow = (uint)count;
|
||||
var countHigh = (uint)(count >> 32);
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
<ProjectReference Include="..\Stride.Core\Stride.Core.csproj">
|
||||
<PrivateAssets>contentfiles;analyzers</PrivateAssets>
|
||||
</ProjectReference>
|
||||
<PackageReference Include="SharpDX" Condition="'$(TargetFramework)' == '$(StrideFrameworkUWP)'" />
|
||||
</ItemGroup>
|
||||
|
||||
<Import Project="$(StrideSdkTargets)" />
|
||||
|
|
|
@ -112,14 +112,12 @@ namespace Stride.Core.Diagnostics
|
|||
}
|
||||
}
|
||||
|
||||
#if !STRIDE_PLATFORM_UWP
|
||||
// Log the actual message
|
||||
Console.WriteLine(GetDefaultText(logMessage));
|
||||
if (!string.IsNullOrEmpty(exceptionMsg))
|
||||
{
|
||||
Console.WriteLine(exceptionMsg);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if STRIDE_PLATFORM_DESKTOP
|
||||
|
||||
|
|
|
@ -14,12 +14,6 @@ namespace Stride.Core
|
|||
/// </summary>
|
||||
public static class Platform
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
/// <summary>
|
||||
/// The current running <see cref="PlatformType"/>.
|
||||
/// </summary>
|
||||
public static readonly PlatformType Type = PlatformType.UWP;
|
||||
#else
|
||||
/// <summary>
|
||||
/// The current running <see cref="PlatformType"/>.
|
||||
/// </summary>
|
||||
|
@ -30,7 +24,6 @@ namespace Stride.Core
|
|||
: OperatingSystem.IsAndroid() ? PlatformType.Android
|
||||
: OperatingSystem.IsIOS() ? PlatformType.iOS
|
||||
: PlatformType.Windows; // For now we use Windows as fallback, but it might be better to throw an exception?
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the running platform is windows desktop.
|
||||
|
|
|
@ -98,8 +98,6 @@ namespace Stride.Core
|
|||
var directory = Path.Combine(PlatformAndroid.Context.FilesDir.AbsolutePath, "local");
|
||||
Directory.CreateDirectory(directory);
|
||||
return directory;
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
return Windows.Storage.ApplicationData.Current.LocalFolder.Path;
|
||||
#elif STRIDE_PLATFORM_IOS
|
||||
var directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", "Local");
|
||||
Directory.CreateDirectory(directory);
|
||||
|
@ -117,20 +115,14 @@ namespace Stride.Core
|
|||
{
|
||||
#if STRIDE_PLATFORM_ANDROID
|
||||
var directory = Path.Combine(PlatformAndroid.Context.FilesDir.AbsolutePath, "roaming");
|
||||
Directory.CreateDirectory(directory);
|
||||
return directory;
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
return Windows.Storage.ApplicationData.Current.RoamingFolder.Path;
|
||||
#elif STRIDE_PLATFORM_IOS
|
||||
var directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", "Roaming");
|
||||
Directory.CreateDirectory(directory);
|
||||
return directory;
|
||||
#else
|
||||
// TODO: Should we add "local" ?
|
||||
var directory = Path.Combine(GetApplicationBinaryDirectory(), "roaming");
|
||||
#endif
|
||||
Directory.CreateDirectory(directory);
|
||||
return directory;
|
||||
#endif
|
||||
}
|
||||
|
||||
[NotNull]
|
||||
|
@ -138,8 +130,6 @@ namespace Stride.Core
|
|||
{
|
||||
#if STRIDE_PLATFORM_ANDROID
|
||||
var directory = Path.Combine(PlatformAndroid.Context.FilesDir.AbsolutePath, "cache");
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
var directory = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "cache");
|
||||
#elif STRIDE_PLATFORM_IOS
|
||||
var directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", "Caches");
|
||||
#else
|
||||
|
@ -177,8 +167,6 @@ namespace Stride.Core
|
|||
{
|
||||
#if STRIDE_PLATFORM_ANDROID
|
||||
return PlatformAndroid.Context.CacheDir.AbsolutePath;
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
return Windows.Storage.ApplicationData.Current.TemporaryFolder.Path;
|
||||
#elif STRIDE_PLATFORM_IOS
|
||||
return Path.Combine (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "tmp");
|
||||
#else
|
||||
|
@ -211,8 +199,6 @@ namespace Stride.Core
|
|||
#else
|
||||
return AppDomain.CurrentDomain.BaseDirectory;
|
||||
#endif
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
return Windows.ApplicationModel.Package.Current.InstalledLocation.Path;
|
||||
#else
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
|
@ -225,8 +211,6 @@ namespace Stride.Core
|
|||
return Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Android/data/" + PlatformAndroid.Context.PackageName + "/data";
|
||||
#elif STRIDE_PLATFORM_IOS
|
||||
return Foundation.NSBundle.MainBundle.BundlePath + "/data";
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
return Windows.ApplicationModel.Package.Current.InstalledLocation.Path + @"\data";
|
||||
#else
|
||||
return Path.Combine(GetApplicationBinaryDirectory(), "data");
|
||||
#endif
|
||||
|
|
|
@ -45,11 +45,6 @@ namespace Stride.Core
|
|||
iOS,
|
||||
#pragma warning restore SA1300 // Element must begin with upper-case letter
|
||||
|
||||
/// <summary>
|
||||
/// The Universal Windows Platform (UWP).
|
||||
/// </summary>
|
||||
UWP,
|
||||
|
||||
/// <summary>
|
||||
/// The Linux OS.
|
||||
/// </summary>
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
<StrideAssemblyProcessorOptions>--auto-module-initializer --serialization</StrideAssemblyProcessorOptions>
|
||||
<StrideBuildTags>*</StrideBuildTags>
|
||||
<RestorePackages>true</RestorePackages>
|
||||
<ExtrasUwpMetaPackageVersion>6.2.12</ExtrasUwpMetaPackageVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
-->
|
||||
<PropertyGroup>
|
||||
<!-- Default mappings -->
|
||||
<StridePlatform Condition="'$(StridePlatform)' == '' And '$(TargetPlatformIdentifier)' == 'UAP'">UWP</StridePlatform>
|
||||
<StridePlatform Condition="'$(StridePlatform)' == '' And '$(TargetPlatformIdentifier)' == 'Android'">Android</StridePlatform>
|
||||
<StridePlatform Condition="'$(StridePlatform)' == '' And '$(TargetPlatformIdentifier)' == 'iOS'">iOS</StridePlatform>
|
||||
<StridePlatform Condition="'$(StridePlatform)' == '' And '$(TargetPlatformIdentifier)' == 'macOS'">macOS</StridePlatform>
|
||||
|
@ -177,19 +176,6 @@
|
|||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="_StrideSetupNativeLibrariesUWP" DependsOnTargets="_StrideBuildDependencies" AfterTargets="ResolveAssemblyReferences" Condition="'$(StridePlatform)' == 'UWP'">
|
||||
<PropertyGroup>
|
||||
<StrideCPU Condition="'$(Platform)' == 'x86'">x86</StrideCPU>
|
||||
<StrideCPU Condition="'$(Platform)' == 'x64'">x64</StrideCPU>
|
||||
<StrideCPU Condition="'$(Platform)' == 'ARM'">ARM</StrideCPU>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="@(_StrideDependencyNativeLib)" Condition="$([System.String]::Copy('%(_StrideDependencyNativeLib.Link)').StartsWith('$(StrideCPU)'))">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<Link Condition="'$(StrideCPU)' != ''">$([System.String]::Copy('%(_StrideDependencyNativeLib.Link)').Replace('$(StrideCPU)\', ''))</Link>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
<Target Name="_StrideSetupNativeLibrariesAndroid" DependsOnTargets="_StrideBuildDependencies" AfterTargets="ResolveAssemblyReferences" Condition="'$(StridePlatform)' == 'Android'">
|
||||
<ItemGroup>
|
||||
<AndroidNativeLibrary Include="@(_StrideDependencyNativeLib)"/>
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e153c15bff3544be86cc386c2bc964715de579940b3e789cc6b66fbdb1aff525
|
||||
size 400
|
|
@ -1,22 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<#
|
||||
var currentPlatform = (Stride.Core.PlatformType)Properties.CurrentPlatform;
|
||||
var orientation = "landscape";
|
||||
switch ((Stride.Graphics.DisplayOrientation)Properties.Orientation)
|
||||
{
|
||||
case Stride.Graphics.DisplayOrientation.LandscapeRight:
|
||||
orientation = "landscape";
|
||||
break;
|
||||
case Stride.Graphics.DisplayOrientation.LandscapeLeft:
|
||||
orientation = "landscapeFlipped";
|
||||
break;
|
||||
case Stride.Graphics.DisplayOrientation.Portrait:
|
||||
orientation = "portrait";
|
||||
break;
|
||||
}
|
||||
#>
|
||||
<# if (orientation != null) { #>
|
||||
<uap:InitialRotationPreference>
|
||||
<uap:Rotation Preference="<#= orientation #>" />
|
||||
</uap:InitialRotationPreference>
|
||||
<# } #>
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8df9a7eb201c9b5791689d772536d19b8ca49f28f6080f21d5fd55122bfc2637
|
||||
size 2143
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:87a685d6c49d6b28347a1abf8330949d4736945b2899b6ddfaf322245c818450
|
||||
size 2942
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:42531391f97e2b92c8f8544d9a7fbbb1f46500024dcf06bf38b4ca1713ef337f
|
||||
size 6207
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7b695ff9bbedee79816e06e31194bb52643a9a791ffdd84ed193ea9830fbd237
|
||||
size 1170
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6ca2cd25cc79acc4b39cc1c7c927e3bc1ee4deb66a2ca86fe43002b903592663
|
||||
size 1282
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:dcd9915e836c286f69e20039d450c77c4370593d299c1c5d129659db752b1ee3
|
||||
size 1850
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9fe96890fd8f6bf612efec69844b8b89be31bd5f02fe4df67ce01f4b6882aa84
|
||||
size 25455
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a15881fa169c3339fa0daa542104aa8177e6ae6e4e4ab6949a2620173f0f3e50
|
||||
size 10821
|
|
@ -1,74 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProjectGuid>{<#= ProjectGuid.ToString().ToUpperInvariant() #>}</ProjectGuid>
|
||||
<OutputType>AppContainerExe</OutputType>
|
||||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace><#= Properties.Namespace #></RootNamespace>
|
||||
<AssemblyName><#= Properties.PackageName #></AssemblyName>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
||||
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.17134.0</TargetPlatformVersion>
|
||||
<TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>
|
||||
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
||||
<EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<PackageCertificateKeyFile><#= ProjectName #>.TemporaryKey.pfx</PackageCertificateKeyFile>
|
||||
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
|
||||
<!-- Force msbuild to check to rebuild this assembly instead of letting VS IDE guess -->
|
||||
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
|
||||
</PropertyGroup>
|
||||
<#@ include file="..\..\Common.PropertyGroups.targets.t4" #>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<SDKReference Include="Microsoft.VCLibs, Version=14.0">
|
||||
<Name>Microsoft Visual C++ 2015 Runtime Package for Windows Universal</Name>
|
||||
</SDKReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\<#= Properties.ProjectGameRelativePath #>">
|
||||
<Project>{<#= Properties.ProjectGameGuid #>}</Project>
|
||||
<Name><#= Properties.PackageGameAssemblyName #></Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="App.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="Package.appxmanifest">
|
||||
<SubType>Designer</SubType>
|
||||
</AppxManifest>
|
||||
|
||||
<None Include="<#= ProjectName #>.TemporaryKey.pfx" />
|
||||
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Properties\Default.rd.xml" />
|
||||
<Content Include="Assets\Logo.scale-200.png" />
|
||||
<Content Include="Assets\SmallLogo.scale-200.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||
<Content Include="Assets\StoreLogo.scale-200.png" />
|
||||
<Content Include="Assets\Logo.scale-100.png" />
|
||||
<Content Include="Assets\SmallLogo.scale-100.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-100.png" />
|
||||
<Content Include="Assets\StoreLogo.scale-100.png" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,85 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
using System;
|
||||
using Windows.ApplicationModel.Activation;
|
||||
using Windows.ApplicationModel.Core;
|
||||
using Windows.UI.Core;
|
||||
using Windows.UI.Popups;
|
||||
using Windows.UI.ViewManagement;
|
||||
using Stride.Engine;
|
||||
using Stride.Games;
|
||||
|
||||
namespace <#= Properties.Namespace #>
|
||||
{
|
||||
class App
|
||||
{
|
||||
[MTAThread]
|
||||
private static void Main()
|
||||
{
|
||||
var viewFactory = new FrameworkViewSource();
|
||||
CoreApplication.Run(viewFactory);
|
||||
}
|
||||
|
||||
class FrameworkViewSource : IFrameworkViewSource
|
||||
{
|
||||
public IFrameworkView CreateView()
|
||||
{
|
||||
var frameworkView = new FrameworkView();
|
||||
return frameworkView;
|
||||
}
|
||||
}
|
||||
|
||||
class FrameworkView : IFrameworkView
|
||||
{
|
||||
Game Game;
|
||||
CoreWindow m_window;
|
||||
|
||||
public void Initialize(CoreApplicationView applicationView)
|
||||
{
|
||||
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;
|
||||
applicationView.Activated += OnActivated;
|
||||
}
|
||||
|
||||
void OnActivated(CoreApplicationView applicationView, IActivatedEventArgs args)
|
||||
{
|
||||
CoreWindow.GetForCurrentThread().Activate();
|
||||
}
|
||||
|
||||
public void Load(string entryPoint)
|
||||
{
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
Game = new Game();
|
||||
Game.GraphicsDeviceManager.IsFullScreen = true;
|
||||
Game.UnhandledException += Game_UnhandledException;
|
||||
|
||||
Game.Run(new GameContextUWPCoreWindow(m_window));
|
||||
}
|
||||
|
||||
private async void Game_UnhandledException(object sender, GameUnhandledExceptionEventArgs e)
|
||||
{
|
||||
// If something went wrong (i.e. GPU feature level is not enough), display an error message instead of crashing to properly pass certifications
|
||||
var exception = e.ExceptionObject as Exception;
|
||||
if (exception != null)
|
||||
{
|
||||
// Display error message
|
||||
var messageDialog = new MessageDialog(exception.Message);
|
||||
await messageDialog.ShowAsync();
|
||||
|
||||
// Exit application
|
||||
CoreApplication.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetWindow(CoreWindow window)
|
||||
{
|
||||
m_window = window;
|
||||
}
|
||||
|
||||
public void Uninitialize()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package
|
||||
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
||||
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
|
||||
IgnorableNamespaces="uap mp rescap">
|
||||
|
||||
<#@ include file="..\Package.appxmanifest.common.t4" #>
|
||||
<Capabilities>
|
||||
<Capability Name="internetClient" />
|
||||
<rescap:Capability Name="expandedResources" />
|
||||
</Capabilities>
|
||||
</Package>
|
|
@ -1,15 +0,0 @@
|
|||
!ProjectTemplate
|
||||
Files:
|
||||
- {Source: $ProjectName$.csproj.t4, Target: $ProjectName$.csproj, IsTemplate: true}
|
||||
- {Source: App.cs.t4, Target: App.cs, IsTemplate: true}
|
||||
- {Source: Package.appxmanifest.t4, Target: Package.appxmanifest, IsTemplate: true}
|
||||
- {Source: ..\Properties\AssemblyInfo.cs.t4, Target: Properties\AssemblyInfo.cs, IsTemplate: true}
|
||||
- {Source: ..\Properties\Default.rd.xml, Target: Properties\Default.rd.xml}
|
||||
- {Source: ..\Assets\GameIcon150x150.png, Target: Assets\Logo.scale-100.png}
|
||||
- {Source: ..\Assets\GameIcon300x300.png, Target: Assets\Logo.scale-200.png}
|
||||
- {Source: ..\Assets\GameSplashScreen620x300.png, Target: Assets\SplashScreen.scale-100.png}
|
||||
- {Source: ..\Assets\GameSplashScreen1240x600.png, Target: Assets\SplashScreen.scale-200.png}
|
||||
- {Source: ..\Assets\GameIcon44x44.png, Target: Assets\SmallLogo.scale-100.png}
|
||||
- {Source: ..\Assets\GameIcon88x88.png, Target: Assets\SmallLogo.scale-200.png}
|
||||
- {Source: ..\Assets\GameIcon50x50.png, Target: Assets\StoreLogo.scale-100.png}
|
||||
- {Source: ..\Assets\GameIcon100x100.png, Target: Assets\StoreLogo.scale-200.png}
|
|
@ -1,38 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<# var identityGuid = System.Guid.NewGuid(); #>
|
||||
<Identity
|
||||
Name="<#= identityGuid.ToString().ToLowerInvariant() #>"
|
||||
Publisher="CN=MyCompany"
|
||||
Version="1.0.0.0" />
|
||||
|
||||
<mp:PhoneIdentity PhoneProductId="<#= identityGuid.ToString().ToLowerInvariant() #>" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||
|
||||
<Properties>
|
||||
<DisplayName><#= Properties.PackageGameDisplayName #></DisplayName>
|
||||
<PublisherDisplayName>publisher</PublisherDisplayName>
|
||||
<Logo>Assets\StoreLogo.png</Logo>
|
||||
</Properties>
|
||||
|
||||
<Dependencies>
|
||||
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
|
||||
</Dependencies>
|
||||
|
||||
<Resources>
|
||||
<Resource Language="x-generate"/>
|
||||
</Resources>
|
||||
|
||||
<Applications>
|
||||
<Application Id="<#= Properties.PackageGameNameShort #>"
|
||||
Executable="$targetnametoken$.exe"
|
||||
EntryPoint="<#= Properties.Namespace #>.App">
|
||||
<uap:VisualElements
|
||||
DisplayName="<#= Properties.PackageGameDisplayName #>"
|
||||
Square150x150Logo="Assets\Logo.png"
|
||||
Square44x44Logo="Assets\SmallLogo.png"
|
||||
Description="<#= Properties.PackageGameName #>"
|
||||
BackgroundColor="#464646">
|
||||
<uap:SplashScreen Image="Assets\SplashScreen.png" />
|
||||
<#@ include file="..\Common.UWP.targets.t4" #>
|
||||
</uap:VisualElements>
|
||||
</Application>
|
||||
</Applications>
|
|
@ -1,29 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
using System.Reflection;
|
||||
using System.Resources;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("<#= Properties.PackageGameName #>")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("<#= Properties.PackageGameName #>")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2014")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: NeutralResourcesLanguage("en")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -1,31 +0,0 @@
|
|||
<!--
|
||||
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
|
||||
developers. However, you can modify these parameters to modify the behavior of the .NET Native
|
||||
optimizer.
|
||||
|
||||
Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
|
||||
|
||||
To fully enable reflection for App1.MyClass and all of its public/private members
|
||||
<Type Name="App1.MyClass" Dynamic="Required All"/>
|
||||
|
||||
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
|
||||
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
|
||||
|
||||
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
|
||||
<Namespace Name="DataClasses.ViewModels" Seralize="All" />
|
||||
-->
|
||||
|
||||
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
|
||||
<Application>
|
||||
<!--
|
||||
An Assembly element with Name="*Application*" applies to all assemblies in
|
||||
the application package. The asterisks are not wildcards.
|
||||
-->
|
||||
<Assembly Name="*Application*" Dynamic="Required All" />
|
||||
|
||||
|
||||
<!-- Add your application specific runtime directives here. -->
|
||||
|
||||
|
||||
</Application>
|
||||
</Directives>
|
|
@ -1,56 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices.WindowsRuntime;
|
||||
using Windows.Foundation;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.UI.Popups;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Controls.Primitives;
|
||||
using Windows.UI.Xaml.Data;
|
||||
using Windows.UI.Xaml.Input;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Navigation;
|
||||
|
||||
using Stride.Engine;
|
||||
using Stride.Games;
|
||||
|
||||
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
|
||||
|
||||
namespace <#= Properties.Namespace #>
|
||||
{
|
||||
/// <summary>
|
||||
/// An empty page that can be used on its own or navigated to within a Frame.
|
||||
/// </summary>
|
||||
public sealed partial class <#= Properties.PackageGameNameShort #>MainPage : Page
|
||||
{
|
||||
Game Game;
|
||||
|
||||
public <#= Properties.PackageGameNameShort #>MainPage()
|
||||
{
|
||||
this.InitializeComponent();
|
||||
|
||||
Game = new Game();
|
||||
Game.UnhandledException += Game_UnhandledException;
|
||||
Game.Run(new GameContextUWPXaml(SwapChainPanel));
|
||||
}
|
||||
|
||||
private async void Game_UnhandledException(object sender, GameUnhandledExceptionEventArgs e)
|
||||
{
|
||||
// If something went wrong (i.e. GPU feature level is not enough), display an error message instead of crashing to properly pass certifications
|
||||
var exception = e.ExceptionObject as Exception;
|
||||
if (exception != null)
|
||||
{
|
||||
// Display error message
|
||||
var messageDialog = new MessageDialog(exception.Message);
|
||||
await messageDialog.ShowAsync();
|
||||
|
||||
// Exit application
|
||||
Application.Current.Exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<Page
|
||||
x:Class="<#= Properties.Namespace #>.<#= Properties.PackageGameNameShort #>MainPage"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="using:<#= Properties.Namespace #>"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d">
|
||||
|
||||
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
|
||||
<SwapChainPanel x:Name="SwapChainPanel" />
|
||||
</Grid>
|
||||
</Page>
|
|
@ -1,90 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProjectGuid>{<#= ProjectGuid.ToString().ToUpperInvariant() #>}</ProjectGuid>
|
||||
<OutputType>AppContainerExe</OutputType>
|
||||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace><#= Properties.Namespace #></RootNamespace>
|
||||
<AssemblyName><#= Properties.PackageName #></AssemblyName>
|
||||
<DefaultLanguage>en-US</DefaultLanguage>
|
||||
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
||||
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.17134.0</TargetPlatformVersion>
|
||||
<TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>
|
||||
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
||||
<EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<PackageCertificateKeyFile><#= ProjectName #>.TemporaryKey.pfx</PackageCertificateKeyFile>
|
||||
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
|
||||
<!-- Force msbuild to check to rebuild this assembly instead of letting VS IDE guess -->
|
||||
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
|
||||
</PropertyGroup>
|
||||
<#@ include file="..\..\Common.PropertyGroups.targets.t4" #>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<SDKReference Include="Microsoft.VCLibs, Version=14.0">
|
||||
<Name>Microsoft Visual C++ 2015 Runtime Package for Windows Universal</Name>
|
||||
</SDKReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\<#= Properties.ProjectGameRelativePath #>">
|
||||
<Project>{<#= Properties.ProjectGameGuid #>}</Project>
|
||||
<Name><#= Properties.PackageGameAssemblyName #></Name>
|
||||
</ProjectReference>
|
||||
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="6.2.12" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="<#= Properties.PackageGameNameShort #>MainPage.xaml.cs">
|
||||
<DependentUpon><#= Properties.PackageGameNameShort #>MainPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="Package.appxmanifest">
|
||||
<SubType>Designer</SubType>
|
||||
</AppxManifest>
|
||||
|
||||
<None Include="<#= ProjectName #>.TemporaryKey.pfx" />
|
||||
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Properties\Default.rd.xml" />
|
||||
<Content Include="Assets\Logo.scale-200.png" />
|
||||
<Content Include="Assets\SmallLogo.scale-200.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||
<Content Include="Assets\StoreLogo.scale-200.png" />
|
||||
<Content Include="Assets\Logo.scale-100.png" />
|
||||
<Content Include="Assets\SmallLogo.scale-100.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-100.png" />
|
||||
<Content Include="Assets\StoreLogo.scale-100.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Page Include="<#= Properties.PackageGameNameShort #>MainPage.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,113 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices.WindowsRuntime;
|
||||
using Windows.ApplicationModel;
|
||||
using Windows.ApplicationModel.Activation;
|
||||
using Windows.Foundation;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Controls.Primitives;
|
||||
using Windows.UI.Xaml.Data;
|
||||
using Windows.UI.Xaml.Input;
|
||||
using Windows.UI.Xaml.Media;
|
||||
using Windows.UI.Xaml.Navigation;
|
||||
|
||||
// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=402347&clcid=0x409
|
||||
|
||||
namespace <#= Properties.Namespace #>
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides application-specific behavior to supplement the default Application class.
|
||||
/// </summary>
|
||||
public sealed partial class App : Application
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes the singleton application object. This is the first line of authored code
|
||||
/// executed, and as such is the logical equivalent of main() or WinMain().
|
||||
/// </summary>
|
||||
public App()
|
||||
{
|
||||
this.InitializeComponent();
|
||||
this.Suspending += this.OnSuspending;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when the application is launched normally by the end user. Other entry points
|
||||
/// will be used when the application is launched to open a specific file, to display
|
||||
/// search results, and so forth.
|
||||
/// </summary>
|
||||
/// <param name="e">Details about the launch request and process.</param>
|
||||
protected override void OnLaunched(LaunchActivatedEventArgs e)
|
||||
{
|
||||
#if DEBUG
|
||||
if (System.Diagnostics.Debugger.IsAttached)
|
||||
{
|
||||
this.DebugSettings.EnableFrameRateCounter = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
Frame rootFrame = Window.Current.Content as Frame;
|
||||
|
||||
// Do not repeat app initialization when the Window already has content,
|
||||
// just ensure that the window is active
|
||||
if (rootFrame == null)
|
||||
{
|
||||
// Create a Frame to act as the navigation context and navigate to the first page
|
||||
rootFrame = new Frame();
|
||||
|
||||
rootFrame.NavigationFailed += OnNavigationFailed;
|
||||
|
||||
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
|
||||
{
|
||||
// TODO: Load state from previously suspended application
|
||||
}
|
||||
|
||||
// Place the frame in the current Window
|
||||
Window.Current.Content = rootFrame;
|
||||
}
|
||||
|
||||
if (rootFrame.Content == null)
|
||||
{
|
||||
// When the navigation stack isn't restored navigate to the first page,
|
||||
// configuring the new page by passing required information as a navigation
|
||||
// parameter
|
||||
if (!rootFrame.Navigate(typeof(<#= Properties.PackageGameNameShort #>MainPage), e.Arguments))
|
||||
{
|
||||
throw new Exception("Failed to create initial page");
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure the current window is active
|
||||
Window.Current.Activate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when Navigation to a certain page fails
|
||||
/// </summary>
|
||||
/// <param name="sender">The Frame which failed navigation</param>
|
||||
/// <param name="e">Details about the navigation failure</param>
|
||||
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
|
||||
{
|
||||
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoked when application execution is being suspended. Application state is saved
|
||||
/// without knowing whether the application will be terminated or resumed with the contents
|
||||
/// of memory still intact.
|
||||
/// </summary>
|
||||
/// <param name="sender">The source of the suspend request.</param>
|
||||
/// <param name="e">Details about the suspend request.</param>
|
||||
private void OnSuspending(object sender, SuspendingEventArgs e)
|
||||
{
|
||||
var deferral = e.SuspendingOperation.GetDeferral();
|
||||
|
||||
// TODO: Save application state and stop any background activity
|
||||
deferral.Complete();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<Application
|
||||
x:Class="<#= Properties.Namespace #>.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="using:<#= Properties.Namespace #>"
|
||||
RequestedTheme="Dark">
|
||||
|
||||
</Application>
|
|
@ -1,13 +0,0 @@
|
|||
<#@ template inherits="ProjectTemplateTransformation" language="C#" #>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package
|
||||
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
||||
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||
IgnorableNamespaces="uap mp">
|
||||
|
||||
<#@ include file="..\Package.appxmanifest.common.t4" #>
|
||||
<Capabilities>
|
||||
<Capability Name="internetClient" />
|
||||
</Capabilities>
|
||||
</Package>
|
|
@ -1,18 +0,0 @@
|
|||
!ProjectTemplate
|
||||
Files:
|
||||
- {Source: $ProjectName$.csproj.t4, Target: $ProjectName$.csproj, IsTemplate: true}
|
||||
- {Source: App.xaml.cs.t4, Target: App.xaml.cs, IsTemplate: true}
|
||||
- {Source: App.xaml.t4, Target: App.xaml, IsTemplate: true}
|
||||
- {Source: $PackageGameNameShort$MainPage.xaml.cs.t4, Target: $PackageGameNameShort$MainPage.xaml.cs, IsTemplate: true}
|
||||
- {Source: $PackageGameNameShort$MainPage.xaml.t4, Target: $PackageGameNameShort$MainPage.xaml, IsTemplate: true}
|
||||
- {Source: Package.appxmanifest.t4, Target: Package.appxmanifest, IsTemplate: true}
|
||||
- {Source: ..\Properties\AssemblyInfo.cs.t4, Target: Properties\AssemblyInfo.cs, IsTemplate: true}
|
||||
- {Source: ..\Properties\Default.rd.xml, Target: Properties\Default.rd.xml}
|
||||
- {Source: ..\Assets\GameIcon150x150.png, Target: Assets\Logo.scale-100.png}
|
||||
- {Source: ..\Assets\GameIcon300x300.png, Target: Assets\Logo.scale-200.png}
|
||||
- {Source: ..\Assets\GameSplashScreen620x300.png, Target: Assets\SplashScreen.scale-100.png}
|
||||
- {Source: ..\Assets\GameSplashScreen1240x600.png, Target: Assets\SplashScreen.scale-200.png}
|
||||
- {Source: ..\Assets\GameIcon44x44.png, Target: Assets\SmallLogo.scale-100.png}
|
||||
- {Source: ..\Assets\GameIcon88x88.png, Target: Assets\SmallLogo.scale-200.png}
|
||||
- {Source: ..\Assets\GameIcon50x50.png, Target: Assets\StoreLogo.scale-100.png}
|
||||
- {Source: ..\Assets\GameIcon100x100.png, Target: Assets\StoreLogo.scale-200.png}
|
|
@ -487,18 +487,6 @@
|
|||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="{x:Static data:ConfigPlatforms.UWP}">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 20 25 L 6 25 L 6 37.074219 L 20 38.992188 Z "/>
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 20 9.101563 L 6 11.066406 L 6 23 L 20 23 Z "/>
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 22 8.820313 L 22 23 L 42 23 L 42 6.011719 Z "/>
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 22 25 L 22 39.269531 L 42 42.011719 L 42 25 Z "/>
|
||||
</DrawingGroup>
|
||||
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="ImageFetchEntity" >
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e153c15bff3544be86cc386c2bc964715de579940b3e789cc6b66fbdb1aff525
|
||||
size 400
|
|
@ -1339,18 +1339,6 @@
|
|||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<DrawingImage x:Key="{x:Static core:PlatformType.UWP}">
|
||||
<DrawingImage.Drawing>
|
||||
<DrawingGroup>
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 20 25 L 6 25 L 6 37.074219 L 20 38.992188 Z " />
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 20 9.101563 L 6 11.066406 L 6 23 L 20 23 Z " />
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 22 8.820313 L 22 23 L 42 23 L 42 6.011719 Z " />
|
||||
<GeometryDrawing Brush="#03A9F4" Geometry="M 22 25 L 22 39.269531 L 42 42.011719 L 42 25 Z " />
|
||||
</DrawingGroup>
|
||||
|
||||
</DrawingImage.Drawing>
|
||||
</DrawingImage>
|
||||
|
||||
<!-- Build icons -->
|
||||
<DrawingImage x:Key="ImageBuildProject">
|
||||
<DrawingImage.Drawing>
|
||||
|
|
|
@ -25,11 +25,6 @@ namespace Stride.Assets.Tests2
|
|||
{ Tuple.Create(PlatformType.Windows, AlphaFormat.Explicit), PixelFormat.BC2_UNorm },
|
||||
{ Tuple.Create(PlatformType.Windows, AlphaFormat.Interpolated), PixelFormat.BC3_UNorm },
|
||||
|
||||
{ Tuple.Create(PlatformType.UWP, AlphaFormat.None), PixelFormat.BC1_UNorm },
|
||||
{ Tuple.Create(PlatformType.UWP, AlphaFormat.Mask), PixelFormat.BC1_UNorm },
|
||||
{ Tuple.Create(PlatformType.UWP, AlphaFormat.Explicit), PixelFormat.BC2_UNorm },
|
||||
{ Tuple.Create(PlatformType.UWP, AlphaFormat.Interpolated), PixelFormat.BC3_UNorm },
|
||||
|
||||
{ Tuple.Create(PlatformType.Android, AlphaFormat.None), PixelFormat.ETC1 },
|
||||
{ Tuple.Create(PlatformType.Android, AlphaFormat.Mask), PixelFormat.ETC2_RGB_A1 },
|
||||
{ Tuple.Create(PlatformType.Android, AlphaFormat.Explicit), PixelFormat.ETC2_RGBA },
|
||||
|
|
|
@ -45,7 +45,6 @@ namespace Stride.Assets
|
|||
switch (platformType)
|
||||
{
|
||||
case PlatformType.Windows:
|
||||
case PlatformType.UWP:
|
||||
return GraphicsPlatform.Direct3D11;
|
||||
case PlatformType.Android:
|
||||
case PlatformType.iOS:
|
||||
|
|
|
@ -143,9 +143,6 @@ namespace Stride.Assets
|
|||
case PlatformType.iOS:
|
||||
configPlatform = ConfigPlatforms.iOS;
|
||||
break;
|
||||
case PlatformType.UWP:
|
||||
configPlatform = ConfigPlatforms.UWP;
|
||||
break;
|
||||
case PlatformType.Linux:
|
||||
configPlatform = ConfigPlatforms.Linux;
|
||||
break;
|
||||
|
|
|
@ -35,12 +35,6 @@ namespace Stride.Assets
|
|||
{ VS2015Version, @"MSBuild\Xamarin\Android\Xamarin.Android.CSharp.targets" }
|
||||
};
|
||||
|
||||
internal static readonly Dictionary<Version, string> UniversalWindowsPlatformComponents = new Dictionary<Version, string>
|
||||
{
|
||||
{ VSAnyVersion, @"Microsoft.VisualStudio.Component.UWP.Support" },
|
||||
{ VS2015Version, @"MSBuild\Microsoft\WindowsXaml\v14.0\8.2\Microsoft.Windows.UI.Xaml.Common.Targets" }
|
||||
};
|
||||
|
||||
public static PackageDependency GetLatestPackageDependency()
|
||||
{
|
||||
return new PackageDependency(PackageName, new PackageVersionRange()
|
||||
|
@ -68,53 +62,6 @@ namespace Stride.Assets
|
|||
};
|
||||
solutionPlatforms.Add(windowsPlatform);
|
||||
|
||||
// Universal Windows Platform (UWP)
|
||||
var uwpPlatform = new SolutionPlatform()
|
||||
{
|
||||
Name = PlatformType.UWP.ToString(),
|
||||
Type = PlatformType.UWP,
|
||||
TargetFramework = "uap10.0.16299",
|
||||
Templates =
|
||||
{
|
||||
//new SolutionPlatformTemplate("ProjectExecutable.UWP/CoreWindow/ProjectExecutable.UWP.ttproj", "Core Window"),
|
||||
new SolutionPlatformTemplate("ProjectExecutable.UWP/Xaml/ProjectExecutable.UWP.ttproj", "Xaml")
|
||||
},
|
||||
IsAvailable = IsVSComponentAvailableAnyVersion(UniversalWindowsPlatformComponents),
|
||||
UseWithExecutables = false,
|
||||
IncludeInSolution = false,
|
||||
};
|
||||
|
||||
uwpPlatform.DefineConstants.Add("STRIDE_PLATFORM_UWP");
|
||||
uwpPlatform.Configurations.Add(new SolutionConfiguration("Testing"));
|
||||
uwpPlatform.Configurations.Add(new SolutionConfiguration("AppStore"));
|
||||
uwpPlatform.Configurations["Release"].Properties.Add("<NoWarn>;2008</NoWarn>");
|
||||
uwpPlatform.Configurations["Debug"].Properties.Add("<NoWarn>;2008</NoWarn>");
|
||||
uwpPlatform.Configurations["Testing"].Properties.Add("<NoWarn>;2008</NoWarn>");
|
||||
uwpPlatform.Configurations["AppStore"].Properties.Add("<NoWarn>;2008</NoWarn>");
|
||||
|
||||
uwpPlatform.Configurations["Release"].Properties.Add("<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>");
|
||||
uwpPlatform.Configurations["Testing"].Properties.Add("<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>");
|
||||
uwpPlatform.Configurations["AppStore"].Properties.Add("<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>");
|
||||
|
||||
foreach (var cpu in new[] { "x86", "x64", "ARM" })
|
||||
{
|
||||
var uwpPlatformCpu = new SolutionPlatformPart(uwpPlatform.Name + "-" + cpu)
|
||||
{
|
||||
LibraryProjectName = uwpPlatform.Name,
|
||||
ExecutableProjectName = cpu,
|
||||
Cpu = cpu,
|
||||
InheritConfigurations = true,
|
||||
UseWithLibraries = false,
|
||||
UseWithExecutables = true,
|
||||
};
|
||||
uwpPlatformCpu.Configurations.Clear();
|
||||
uwpPlatformCpu.Configurations.AddRange(uwpPlatform.Configurations);
|
||||
|
||||
uwpPlatform.PlatformsPart.Add(uwpPlatformCpu);
|
||||
}
|
||||
|
||||
solutionPlatforms.Add(uwpPlatform);
|
||||
|
||||
// Linux
|
||||
var linuxPlatform = new SolutionPlatform()
|
||||
{
|
||||
|
|
|
@ -250,7 +250,6 @@ namespace Stride.Assets.Textures
|
|||
}
|
||||
break;
|
||||
case PlatformType.Windows:
|
||||
case PlatformType.UWP:
|
||||
case PlatformType.Linux:
|
||||
case PlatformType.macOS:
|
||||
switch (parameters.GraphicsPlatform)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include "Common.h"
|
||||
|
||||
#if defined(WINDOWS_DESKTOP) || defined(UWP) || defined(WINDOWS_STORE) || defined(WINDOWS_PHONE) || !defined(__clang__)
|
||||
#if defined(WINDOWS_DESKTOP) || defined(WINDOWS_STORE) || !defined(__clang__)
|
||||
|
||||
#include "../../../deps/NativePath/NativePath.h"
|
||||
#include "../../../deps/NativePath/NativeThreading.h"
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<StrideNativePathLibsWindows>libCompilerRt.lib libCelt.lib</StrideNativePathLibsWindows>
|
||||
<StrideNativePathLibsUWP>libCompilerRt.lib libCelt.lib Xaudio2.lib</StrideNativePathLibsUWP>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -141,8 +141,6 @@ namespace Stride.Engine.Network
|
|||
{
|
||||
switch (Platform.Type)
|
||||
{
|
||||
case PlatformType.UWP:
|
||||
return RouterConnectionMode.ConnectThenListen;
|
||||
case PlatformType.Android:
|
||||
case PlatformType.iOS:
|
||||
return RouterConnectionMode.Listen;
|
||||
|
@ -166,7 +164,7 @@ namespace Stride.Engine.Network
|
|||
|
||||
/// <summary>
|
||||
/// First, tries to connect, and if not possible, listen for a router connection.
|
||||
/// This is useful for platform where we can't be sure (no way to determine if emulator and/or run in desktop or remotely, such as UWP).
|
||||
/// This is useful for platform where we can't be sure (no way to determine if emulator and/or run in desktop or remotely).
|
||||
/// </summary>
|
||||
ConnectThenListen = 3,
|
||||
}
|
||||
|
|
|
@ -48,9 +48,6 @@ namespace Stride.Games.Testing
|
|||
case PlatformType.iOS:
|
||||
platformName = "iOS";
|
||||
break;
|
||||
case PlatformType.UWP:
|
||||
platformName = "UWP";
|
||||
break;
|
||||
default:
|
||||
platformName = "";
|
||||
break;
|
||||
|
|
|
@ -102,13 +102,9 @@ namespace Stride.Games
|
|||
{
|
||||
get
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
return "Stride Game";
|
||||
#else
|
||||
var assembly = Assembly.GetEntryAssembly();
|
||||
var productAttribute = assembly?.GetCustomAttribute<AssemblyProductAttribute>();
|
||||
return productAttribute?.Product ?? "Stride Game";
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,11 +116,7 @@ namespace Stride.Games
|
|||
{
|
||||
get
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
return string.Empty;
|
||||
#else
|
||||
return PlatformFolders.ApplicationExecutablePath ?? string.Empty;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -32,12 +32,6 @@ namespace Stride.Games
|
|||
case AppContextType.DesktopWpf:
|
||||
res = NewGameContextWpf(requestedWidth, requestedHeight, isUserManagingRun);
|
||||
break;
|
||||
case AppContextType.UWPXaml:
|
||||
res = NewGameContextUWPXaml(requestedWidth, requestedHeight);
|
||||
break;
|
||||
case AppContextType.UWPCoreWindow:
|
||||
res = NewGameContextUWPCoreWindow(requestedWidth, requestedHeight);
|
||||
break;
|
||||
case AppContextType.iOS:
|
||||
res = NewGameContextiOS();
|
||||
break;
|
||||
|
@ -82,24 +76,6 @@ namespace Stride.Games
|
|||
#endif
|
||||
}
|
||||
|
||||
public static GameContext NewGameContextUWPXaml(int requestedWidth = 0, int requestedHeight = 0)
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
return new GameContextUWPXaml(null, requestedWidth, requestedHeight);
|
||||
#else
|
||||
return null;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static GameContext NewGameContextUWPCoreWindow(int requestedWidth = 0, int requestedHeight = 0)
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
return new GameContextUWPCoreWindow(null, requestedWidth, requestedHeight);
|
||||
#else
|
||||
return null;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static GameContext NewGameContextSDL(int requestedWidth = 0, int requestedHeight = 0, bool isUserManagingRun = false)
|
||||
{
|
||||
#if STRIDE_UI_SDL
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
//
|
||||
// Copyright (c) 2010-2013 SharpDX - Alexandre Mutel
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
using Windows.UI.Core;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
|
||||
namespace Stride.Games
|
||||
{
|
||||
public class GameContextUWPXaml : GameContext<SwapChainPanel>
|
||||
{
|
||||
// Used internally by systems such as UI to capture input in a TextBox
|
||||
internal TextBox EditTextBox = new TextBox { VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(10, 0, 10, 0)};
|
||||
|
||||
/// <inheritDoc/>
|
||||
public GameContextUWPXaml(SwapChainPanel control, int requestedWidth = 0, int requestedHeight = 0)
|
||||
: base (control ?? new SwapChainPanel(), requestedWidth, requestedHeight)
|
||||
{
|
||||
ContextType = AppContextType.UWPXaml;
|
||||
}
|
||||
}
|
||||
|
||||
public class GameContextUWPCoreWindow : GameContext<CoreWindow>
|
||||
{
|
||||
/// <inheritDoc/>
|
||||
public GameContextUWPCoreWindow(CoreWindow control, int requestedWidth = 0, int requestedHeight = 0, bool isWindowsMixedReality = false)
|
||||
: base(control ?? CoreWindow.GetForCurrentThread(), requestedWidth, requestedHeight)
|
||||
{
|
||||
ContextType = AppContextType.UWPCoreWindow;
|
||||
IsWindowsMixedReality = isWindowsMixedReality;
|
||||
}
|
||||
|
||||
internal bool IsWindowsMixedReality { get; }
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -50,9 +50,7 @@ namespace Stride.Games
|
|||
|
||||
public static GamePlatform Create(GameBase game)
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
return new GamePlatformUWP(game);
|
||||
#elif STRIDE_PLATFORM_ANDROID
|
||||
#if STRIDE_PLATFORM_ANDROID
|
||||
return new GamePlatformAndroid(game);
|
||||
#elif STRIDE_PLATFORM_IOS
|
||||
return new GamePlatformiOS(game);
|
||||
|
@ -331,18 +329,7 @@ namespace Stride.Games
|
|||
{
|
||||
var graphicsDevice = GraphicsDevice.New(deviceInformation.Adapter, deviceInformation.DeviceCreationFlags, gameWindow.NativeWindow, deviceInformation.GraphicsProfile);
|
||||
graphicsDevice.ColorSpace = deviceInformation.PresentationParameters.ColorSpace;
|
||||
|
||||
#if STRIDE_GRAPHICS_API_DIRECT3D11 && STRIDE_PLATFORM_UWP
|
||||
if (game.Context is GameContextUWPCoreWindow context && context.IsWindowsMixedReality)
|
||||
{
|
||||
graphicsDevice.Recreate(deviceInformation.Adapter, new[] { deviceInformation.GraphicsProfile }, deviceInformation.DeviceCreationFlags |= DeviceCreationFlags.BgraSupport, gameWindow.NativeWindow);
|
||||
graphicsDevice.Presenter = new WindowsMixedRealityGraphicsPresenter(graphicsDevice, deviceInformation.PresentationParameters);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
graphicsDevice.Presenter = new SwapChainGraphicsPresenter(graphicsDevice, deviceInformation.PresentationParameters);
|
||||
}
|
||||
|
||||
return graphicsDevice;
|
||||
}
|
||||
|
|
|
@ -192,17 +192,7 @@ namespace Stride.Games
|
|||
var presentationParameters = new PresentationParameters((int)size.X, (int)size.Y, Window.NativeWindow, resizeFormat) { DepthStencilFormat = PreferredDepthStencilFormat };
|
||||
presentationParameters.PresentationInterval = PresentInterval.Immediate;
|
||||
|
||||
#if STRIDE_GRAPHICS_API_DIRECT3D11 && STRIDE_PLATFORM_UWP
|
||||
if (Game.Context is GameContextUWPCoreWindow context && context.IsWindowsMixedReality)
|
||||
{
|
||||
Presenter = new WindowsMixedRealityGraphicsPresenter(GraphicsDevice, presentationParameters);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
Presenter = new SwapChainGraphicsPresenter(GraphicsDevice, presentationParameters);
|
||||
}
|
||||
|
||||
isBackBufferToResize = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,130 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
//
|
||||
// Copyright (c) 2010-2013 SharpDX - Alexandre Mutel
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Stride.Graphics;
|
||||
using Windows.ApplicationModel;
|
||||
using Windows.ApplicationModel.Core;
|
||||
|
||||
namespace Stride.Games
|
||||
{
|
||||
internal class GamePlatformUWP : GamePlatform
|
||||
{
|
||||
public GamePlatformUWP(GameBase game) : base(game)
|
||||
{
|
||||
// Application lifecycle reference:
|
||||
// https://docs.microsoft.com/en-us/windows/uwp/launch-resume/app-lifecycle
|
||||
// https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.core.coreapplication
|
||||
|
||||
CoreApplication.Suspending += CurrentOnSuspending;
|
||||
CoreApplication.Resuming += CurrentOnResuming;
|
||||
}
|
||||
|
||||
private void CurrentOnResuming(object sender, object o)
|
||||
{
|
||||
OnResume(sender, null);
|
||||
}
|
||||
|
||||
private void CurrentOnSuspending(object sender, SuspendingEventArgs suspendingEventArgs)
|
||||
{
|
||||
var deferral = suspendingEventArgs.SuspendingOperation.GetDeferral();
|
||||
|
||||
using (var device3 = game.GraphicsDevice.NativeDevice.QueryInterface<SharpDX.DXGI.Device3>())
|
||||
{
|
||||
game.GraphicsContext.CommandList.ClearState();
|
||||
device3.Trim();
|
||||
}
|
||||
|
||||
OnSuspend(sender, null);
|
||||
|
||||
deferral.Complete();
|
||||
}
|
||||
|
||||
public override string DefaultAppDirectory
|
||||
{
|
||||
get
|
||||
{
|
||||
return Package.Current.InstalledLocation.Path;
|
||||
}
|
||||
}
|
||||
|
||||
internal override GameWindow GetSupportedGameWindow(AppContextType type)
|
||||
{
|
||||
if (type == AppContextType.UWPCoreWindow || type == AppContextType.UWPXaml)
|
||||
{
|
||||
return new GameWindowUWP();
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public override List<GraphicsDeviceInformation> FindBestDevices(GameGraphicsParameters preferredParameters)
|
||||
{
|
||||
var graphicsDeviceInfos = base.FindBestDevices(preferredParameters);
|
||||
|
||||
// Special case where the default FindBestDevices is not working
|
||||
if (graphicsDeviceInfos.Count == 0)
|
||||
{
|
||||
var graphicsAdapter = GraphicsAdapterFactory.Adapters[0];
|
||||
|
||||
// Iterate on each preferred graphics profile
|
||||
foreach (var featureLevel in preferredParameters.PreferredGraphicsProfile)
|
||||
{
|
||||
// Check if this profile is supported.
|
||||
if (graphicsAdapter.IsProfileSupported(featureLevel))
|
||||
{
|
||||
var deviceInfo = new GraphicsDeviceInformation
|
||||
{
|
||||
Adapter = graphicsAdapter,
|
||||
GraphicsProfile = featureLevel,
|
||||
PresentationParameters =
|
||||
{
|
||||
MultisampleCount = preferredParameters.PreferredMultisampleCount,
|
||||
IsFullScreen = preferredParameters.IsFullScreen,
|
||||
PresentationInterval = preferredParameters.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate,
|
||||
DeviceWindowHandle = MainWindow.NativeWindow,
|
||||
}
|
||||
};
|
||||
|
||||
// Hardcoded format and refresh rate...
|
||||
// This is a workaround to allow this code to work inside the emulator
|
||||
// but this is not really robust
|
||||
// TODO: Check how to handle this case properly
|
||||
var displayMode = new DisplayMode(PixelFormat.B8G8R8A8_UNorm, gameWindow.ClientBounds.Width, gameWindow.ClientBounds.Height, new Rational(60, 1));
|
||||
AddDevice(displayMode, deviceInfo, preferredParameters, graphicsDeviceInfos);
|
||||
|
||||
// If the profile is supported, we are just using the first best one
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return graphicsDeviceInfos;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -1,434 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
//
|
||||
// Copyright (c) 2010-2013 SharpDX - Alexandre Mutel
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using Windows.Graphics.Display;
|
||||
using Stride.Graphics;
|
||||
using Stride.Core.Mathematics;
|
||||
using Windows.Foundation;
|
||||
using Windows.UI.ViewManagement;
|
||||
using Windows.UI.Core;
|
||||
using Windows.UI.Xaml;
|
||||
//using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Windows.UI.Xaml.Media;
|
||||
|
||||
namespace Stride.Games
|
||||
{
|
||||
/// <summary>
|
||||
/// <see cref="GameWindow"/> implementation for UWP. Handles both <see cref="SwapChainPanel"/> and <see cref="CoreWindow"/>.
|
||||
/// </summary>
|
||||
internal class GameWindowUWP : GameWindow
|
||||
{
|
||||
#region Fields
|
||||
private const DisplayOrientations PortraitOrientations = DisplayOrientations.Portrait | DisplayOrientations.PortraitFlipped;
|
||||
private const DisplayOrientations LandscapeOrientations = DisplayOrientations.Landscape | DisplayOrientations.LandscapeFlipped;
|
||||
|
||||
private WindowHandle windowHandle;
|
||||
private int currentWidth;
|
||||
private int currentHeight;
|
||||
|
||||
private SwapChainPanel swapChainPanel = null;
|
||||
private CoreWindow coreWindow = null;
|
||||
|
||||
private static readonly Windows.Devices.Input.MouseCapabilities mouseCapabilities = new Windows.Devices.Input.MouseCapabilities();
|
||||
|
||||
private DispatcherTimer resizeTimer = null;
|
||||
|
||||
private double requiredRatio;
|
||||
private ApplicationView applicationView;
|
||||
private bool canResize;
|
||||
|
||||
private bool visible;
|
||||
private bool focused;
|
||||
#endregion
|
||||
|
||||
#region Public Properties
|
||||
|
||||
public override bool AllowUserResizing
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
set
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public override Rectangle ClientBounds
|
||||
{
|
||||
get
|
||||
{
|
||||
if (swapChainPanel != null)
|
||||
{
|
||||
return new Rectangle(0, 0,
|
||||
(int)(swapChainPanel.ActualWidth * swapChainPanel.CompositionScaleX + 0.5f),
|
||||
(int)(swapChainPanel.ActualHeight * swapChainPanel.CompositionScaleY + 0.5f));
|
||||
|
||||
}
|
||||
|
||||
if (coreWindow != null)
|
||||
{
|
||||
return new Rectangle((int)(coreWindow.Bounds.X), (int)(coreWindow.Bounds.Y), (int)(coreWindow.Bounds.Width), (int)(coreWindow.Bounds.Height));
|
||||
}
|
||||
|
||||
throw new ArgumentException($"{nameof(GameWindow)} should have either a {nameof(SwapChainPanel)} or a {nameof(CoreWindow)}");
|
||||
}
|
||||
}
|
||||
|
||||
public override DisplayOrientation CurrentOrientation => DisplayOrientation.Default;
|
||||
|
||||
public override bool IsMinimized => false;
|
||||
|
||||
public override bool Focused => focused;
|
||||
|
||||
private bool isMouseVisible;
|
||||
private CoreCursor cursor;
|
||||
|
||||
public override bool IsMouseVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
return isMouseVisible;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (isMouseVisible == value)
|
||||
return;
|
||||
|
||||
if (mouseCapabilities.MousePresent == 0)
|
||||
return;
|
||||
|
||||
if (value)
|
||||
{
|
||||
if (cursor != null)
|
||||
{
|
||||
coreWindow.PointerCursor = cursor;
|
||||
}
|
||||
|
||||
isMouseVisible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (coreWindow.PointerCursor != null)
|
||||
{
|
||||
cursor = coreWindow.PointerCursor;
|
||||
}
|
||||
|
||||
//yep thats how you hide the cursor under WinRT api...
|
||||
coreWindow.PointerCursor = null;
|
||||
isMouseVisible = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override WindowHandle NativeWindow
|
||||
{
|
||||
get
|
||||
{
|
||||
return windowHandle;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this <see cref="GameWindow" /> is visible.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if visible; otherwise, <c>false</c>.</value>
|
||||
public override bool Visible
|
||||
{
|
||||
get
|
||||
{
|
||||
return visible;
|
||||
}
|
||||
set
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool IsBorderLess
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
set
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods and Operators
|
||||
|
||||
public override void BeginScreenDeviceChange(bool willBeFullScreen)
|
||||
{
|
||||
}
|
||||
|
||||
public override void EndScreenDeviceChange(int clientWidth, int clientHeight)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
protected internal override void Initialize(GameContext windowContext)
|
||||
{
|
||||
swapChainPanel = (windowContext as GameContextUWPXaml)?.Control;
|
||||
coreWindow = (windowContext as GameContextUWPCoreWindow)?.Control;
|
||||
|
||||
if (swapChainPanel != null)
|
||||
{
|
||||
resizeTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(100) };
|
||||
resizeTimer.Tick += ResizeTimerOnTick;
|
||||
|
||||
coreWindow = CoreWindow.GetForCurrentThread();
|
||||
windowHandle = new WindowHandle(AppContextType.UWPXaml, swapChainPanel, IntPtr.Zero);
|
||||
}
|
||||
else if (coreWindow != null)
|
||||
{
|
||||
coreWindow.SizeChanged += ResizeOnWindowChange;
|
||||
windowHandle = new WindowHandle(AppContextType.UWPCoreWindow, coreWindow, IntPtr.Zero);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Assert(swapChainPanel == null && coreWindow == null, "GameContext was neither UWPXaml nor UWPCoreWindow");
|
||||
}
|
||||
|
||||
applicationView = ApplicationView.GetForCurrentView();
|
||||
if (applicationView != null && windowContext.RequestedWidth != 0 && windowContext.RequestedHeight != 0)
|
||||
{
|
||||
applicationView.SetPreferredMinSize(new Size(windowContext.RequestedWidth, windowContext.RequestedHeight));
|
||||
canResize = applicationView.TryResizeView(new Size(windowContext.RequestedWidth, windowContext.RequestedHeight));
|
||||
}
|
||||
|
||||
requiredRatio = windowContext.RequestedWidth/(double)windowContext.RequestedHeight;
|
||||
|
||||
if (swapChainPanel != null)
|
||||
{
|
||||
swapChainPanel.SizeChanged += swapChainPanel_SizeChanged;
|
||||
swapChainPanel.CompositionScaleChanged += swapChainPanel_CompositionScaleChanged;
|
||||
}
|
||||
|
||||
coreWindow.SizeChanged += CurrentWindowOnSizeChanged;
|
||||
|
||||
visible = coreWindow.Visible;
|
||||
coreWindow.VisibilityChanged += CurrentWindowOnVisibilityChanged;
|
||||
coreWindow.Activated += CurrentWindowOnActivated;
|
||||
}
|
||||
|
||||
private void CurrentWindowOnSizeChanged(object sender, WindowSizeChangedEventArgs windowSizeChangedEventArgs)
|
||||
{
|
||||
var newBounds = windowSizeChangedEventArgs.Size;
|
||||
HandleSizeChanged(sender, newBounds);
|
||||
}
|
||||
|
||||
private void CurrentWindowOnVisibilityChanged( CoreWindow window, VisibilityChangedEventArgs args )
|
||||
{
|
||||
visible = args.Visible;
|
||||
}
|
||||
|
||||
private void CurrentWindowOnActivated(CoreWindow window, WindowActivatedEventArgs args)
|
||||
{
|
||||
switch( args.WindowActivationState )
|
||||
{
|
||||
case CoreWindowActivationState.PointerActivated:
|
||||
case CoreWindowActivationState.CodeActivated:
|
||||
focused = true;
|
||||
break;
|
||||
case CoreWindowActivationState.Deactivated:
|
||||
focused = false;
|
||||
break;
|
||||
default:
|
||||
focused = true;
|
||||
Debug.WriteLine( $"{nameof(args.WindowActivationState)} '{args.WindowActivationState}' not implemented for {nameof(GameWindowUWP)} in {nameof(CurrentWindowOnActivated)}" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void swapChainPanel_CompositionScaleChanged(SwapChainPanel sender, object args)
|
||||
{
|
||||
OnClientSizeChanged(sender, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void ResizeTimerOnTick(object sender, object o)
|
||||
{
|
||||
resizeTimer.Stop();
|
||||
OnClientSizeChanged(sender, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void ResizeOnWindowChange(object sender, object o)
|
||||
{
|
||||
OnClientSizeChanged(sender, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void HandleSizeChanged(object sender, Size newSize)
|
||||
{
|
||||
var bounds = newSize;
|
||||
|
||||
// Only supports swapChainPanel for now
|
||||
if (swapChainPanel != null && bounds.Width > 0 && bounds.Height > 0 && currentWidth > 0 && currentHeight > 0)
|
||||
{
|
||||
double panelWidth;
|
||||
double panelHeight;
|
||||
panelWidth = bounds.Width;
|
||||
panelHeight = bounds.Height;
|
||||
|
||||
if (canResize)
|
||||
{
|
||||
if (swapChainPanel.Width != panelWidth || swapChainPanel.Height != panelHeight)
|
||||
{
|
||||
// Center the panel
|
||||
swapChainPanel.HorizontalAlignment = HorizontalAlignment.Center;
|
||||
swapChainPanel.VerticalAlignment = VerticalAlignment.Center;
|
||||
|
||||
swapChainPanel.Width = panelWidth;
|
||||
swapChainPanel.Height = panelHeight;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//mobile device, keep aspect fine
|
||||
var aspect = panelWidth / panelHeight;
|
||||
if (aspect < requiredRatio)
|
||||
{
|
||||
panelWidth = bounds.Width; //real screen width
|
||||
panelHeight = panelWidth / requiredRatio;
|
||||
}
|
||||
else
|
||||
{
|
||||
panelHeight = bounds.Height;
|
||||
panelWidth = panelHeight * requiredRatio;
|
||||
}
|
||||
|
||||
if (swapChainPanel.Width != panelWidth || swapChainPanel.Height != panelHeight)
|
||||
{
|
||||
// Center the panel
|
||||
swapChainPanel.HorizontalAlignment = HorizontalAlignment.Center;
|
||||
swapChainPanel.VerticalAlignment = VerticalAlignment.Center;
|
||||
|
||||
swapChainPanel.Width = panelWidth;
|
||||
swapChainPanel.Height = panelHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (resizeTimer != null)
|
||||
{
|
||||
resizeTimer.Stop();
|
||||
resizeTimer.Start();
|
||||
}
|
||||
}
|
||||
|
||||
private void swapChainPanel_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||
{
|
||||
var bounds = e.NewSize;
|
||||
HandleSizeChanged(sender, bounds);
|
||||
if (resizeTimer != null)
|
||||
{
|
||||
resizeTimer.Stop();
|
||||
resizeTimer.Start();
|
||||
}
|
||||
}
|
||||
|
||||
internal override void Resize(int width, int height)
|
||||
{
|
||||
currentWidth = width;
|
||||
currentHeight = height;
|
||||
}
|
||||
|
||||
void CompositionTarget_Rendering(object sender, object e)
|
||||
{
|
||||
// Call InitCallback only first time
|
||||
if (InitCallback != null)
|
||||
{
|
||||
InitCallback();
|
||||
InitCallback = null;
|
||||
}
|
||||
|
||||
RunCallback();
|
||||
}
|
||||
|
||||
internal override void Run()
|
||||
{
|
||||
if (swapChainPanel != null)
|
||||
{
|
||||
CompositionTarget.Rendering += CompositionTarget_Rendering;
|
||||
return;
|
||||
}
|
||||
|
||||
// Call InitCallback only first time
|
||||
if (InitCallback != null)
|
||||
{
|
||||
InitCallback();
|
||||
InitCallback = null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
coreWindow.Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);
|
||||
if (Exiting)
|
||||
{
|
||||
Destroy();
|
||||
break;
|
||||
}
|
||||
|
||||
RunCallback();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
ExitCallback?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
protected internal override void SetSupportedOrientations(DisplayOrientation orientations)
|
||||
{
|
||||
// Desktop doesn't have orientation (unless on Windows 8?)
|
||||
}
|
||||
|
||||
protected override void SetTitle(string title)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected override void Destroy()
|
||||
{
|
||||
if (swapChainPanel != null)
|
||||
{
|
||||
CompositionTarget.Rendering -= CompositionTarget_Rendering;
|
||||
}
|
||||
base.Destroy();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -29,10 +29,6 @@ namespace Stride.Graphics.Regression
|
|||
game.Run();
|
||||
}
|
||||
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
#elif STRIDE_PLATFORM_IOS || STRIDE_PLATFORM_ANDROID
|
||||
|
||||
lock(uniThreadLock)
|
||||
|
|
|
@ -1,21 +1,8 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using Stride.Core;
|
||||
using Stride.Core.LZ4;
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
using Windows.Security.Cryptography;
|
||||
using Windows.Security.Cryptography.Core;
|
||||
using Windows.System.Profile;
|
||||
using Windows.Security.ExchangeActiveSyncProvisioning;
|
||||
#endif
|
||||
|
||||
namespace Stride.Graphics.Regression
|
||||
{
|
||||
|
@ -68,18 +55,6 @@ namespace Stride.Graphics.Regression
|
|||
result.Platform = "iOS";
|
||||
result.DeviceName = iOSDeviceType.Version.ToString();
|
||||
result.Serial = UIKit.UIDevice.CurrentDevice.Name;
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
result.Platform = "UWP";
|
||||
var deviceInfo = new EasClientDeviceInformation();
|
||||
result.DeviceName = deviceInfo.SystemManufacturer + " " + deviceInfo.SystemProductName;
|
||||
try
|
||||
{
|
||||
result.Serial = deviceInfo.Id.ToString();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// Ignored on UWP
|
||||
}
|
||||
#endif
|
||||
|
||||
return result;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
</PropertyGroup>
|
||||
<Import Project="..\..\targets\Stride.props" />
|
||||
<PropertyGroup>
|
||||
<StridePlatformFilter>Windows;Android;iOS;Linux;macOS;UWP</StridePlatformFilter>
|
||||
<StridePlatformFilter>Windows;Android;iOS;Linux;macOS</StridePlatformFilter>
|
||||
<DefineConstants>$(DefineConstants);XAMCORE_2_0</DefineConstants>
|
||||
<StrideAssemblyProcessor>true</StrideAssemblyProcessor>
|
||||
<StridePlatformDependent>true</StridePlatformDependent>
|
||||
|
|
|
@ -48,16 +48,6 @@ namespace Stride.Games
|
|||
/// </summary>
|
||||
Android,
|
||||
|
||||
/// <summary>
|
||||
/// Game running on UWP in a Xaml SwapChainPanel.
|
||||
/// </summary>
|
||||
UWPXaml,
|
||||
|
||||
/// <summary>
|
||||
/// Game running on UWP in a CoreWindow.
|
||||
/// </summary>
|
||||
UWPCoreWindow,
|
||||
|
||||
#pragma warning disable SA1300 // Element must begin with upper-case letter
|
||||
/// <summary>
|
||||
/// Game running on iOS in a iPhoneOSGameView.
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace Stride.Graphics
|
|||
{
|
||||
public static partial class GraphicsAdapterFactory
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP || DIRECTX11_1
|
||||
#if DIRECTX11_1
|
||||
internal static Factory2 NativeFactory;
|
||||
#else
|
||||
internal static Factory1 NativeFactory;
|
||||
|
@ -24,9 +24,6 @@ namespace Stride.Graphics
|
|||
#if DIRECTX11_1
|
||||
using (var factory = new Factory1())
|
||||
NativeFactory = factory.QueryInterface<Factory2>();
|
||||
#elif STRIDE_PLATFORM_UWP
|
||||
// Maybe this will become default code for everybody if we switch to DX 11.1/11.2 SharpDX dll?
|
||||
NativeFactory = new Factory2();
|
||||
#else
|
||||
NativeFactory = new Factory1();
|
||||
#endif
|
||||
|
|
|
@ -122,16 +122,11 @@ namespace Stride.Graphics
|
|||
{
|
||||
get
|
||||
{
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
return false;
|
||||
#else
|
||||
return swapChain.IsFullScreen;
|
||||
#endif
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
#if !STRIDE_PLATFORM_UWP
|
||||
if (swapChain == null)
|
||||
return;
|
||||
|
||||
|
@ -184,7 +179,6 @@ namespace Stride.Graphics
|
|||
description.RefreshRate = new SharpDX.DXGI.Rational(0, 0);
|
||||
swapChain.ResizeTarget(ref description);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -269,19 +263,6 @@ namespace Stride.Graphics
|
|||
// Manually update all children textures
|
||||
var fastList = DestroyChildrenTextures(backBuffer);
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
var swapChainPanel = Description.DeviceWindowHandle.NativeWindow as Windows.UI.Xaml.Controls.SwapChainPanel;
|
||||
if (swapChainPanel != null)
|
||||
{
|
||||
var swapChain2 = swapChain.QueryInterface<SwapChain2>();
|
||||
if (swapChain2 != null)
|
||||
{
|
||||
swapChain2.MatrixTransform = new RawMatrix3x2 { M11 = 1f / swapChainPanel.CompositionScaleX, M22 = 1f / swapChainPanel.CompositionScaleY };
|
||||
swapChain2.Dispose();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (useFlipModel)
|
||||
format = ToSupportedFlipModelFormat(format); // See CreateSwapChainForDesktop
|
||||
|
||||
|
@ -357,77 +338,9 @@ namespace Stride.Graphics
|
|||
throw new ArgumentException("DeviceWindowHandle cannot be null");
|
||||
}
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
return CreateSwapChainForUWP();
|
||||
#else
|
||||
return CreateSwapChainForWindows();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
private SwapChain CreateSwapChainForUWP()
|
||||
{
|
||||
bufferCount = 2;
|
||||
var description = new SwapChainDescription1
|
||||
{
|
||||
// Automatic sizing
|
||||
Width = Description.BackBufferWidth,
|
||||
Height = Description.BackBufferHeight,
|
||||
Format = (DXGI_Format)Description.BackBufferFormat.ToNonSRgb(),
|
||||
Stereo = false,
|
||||
SampleDescription = new SharpDX.DXGI.SampleDescription((int)Description.MultisampleCount, 0),
|
||||
Usage = Usage.BackBuffer | Usage.RenderTargetOutput,
|
||||
// Use two buffers to enable flip effect.
|
||||
BufferCount = bufferCount,
|
||||
Scaling = SharpDX.DXGI.Scaling.Stretch,
|
||||
SwapEffect = SharpDX.DXGI.SwapEffect.FlipSequential,
|
||||
};
|
||||
|
||||
SwapChain swapChain = null;
|
||||
switch (Description.DeviceWindowHandle.Context)
|
||||
{
|
||||
case Games.AppContextType.UWPXaml:
|
||||
{
|
||||
var nativePanel = ComObject.As<ISwapChainPanelNative>(Description.DeviceWindowHandle.NativeWindow);
|
||||
|
||||
// Creates the swap chain for XAML composition
|
||||
swapChain = new SwapChain1(GraphicsAdapterFactory.NativeFactory, GraphicsDevice.NativeDevice, ref description);
|
||||
|
||||
// Associate the SwapChainPanel with the swap chain
|
||||
nativePanel.SwapChain = swapChain;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Games.AppContextType.UWPCoreWindow:
|
||||
{
|
||||
using (var dxgiDevice = GraphicsDevice.NativeDevice.QueryInterface<SharpDX.DXGI.Device2>())
|
||||
{
|
||||
// Ensure that DXGI does not queue more than one frame at a time. This both reduces
|
||||
// latency and ensures that the application will only render after each VSync, minimizing
|
||||
// power consumption.
|
||||
dxgiDevice.MaximumFrameLatency = 1;
|
||||
|
||||
// Next, get the parent factory from the DXGI Device.
|
||||
using (var dxgiAdapter = dxgiDevice.Adapter)
|
||||
using (var dxgiFactory = dxgiAdapter.GetParent<SharpDX.DXGI.Factory2>())
|
||||
// Finally, create the swap chain.
|
||||
using (var coreWindow = new SharpDX.ComObject(Description.DeviceWindowHandle.NativeWindow))
|
||||
{
|
||||
swapChain = new SharpDX.DXGI.SwapChain1(dxgiFactory
|
||||
, GraphicsDevice.NativeDevice, coreWindow, ref description);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new NotSupportedException(string.Format("Window context [{0}] not supported while creating SwapChain", Description.DeviceWindowHandle.Context));
|
||||
}
|
||||
|
||||
return swapChain;
|
||||
}
|
||||
#else
|
||||
/// <summary>
|
||||
/// Create the SwapChain on Windows.
|
||||
/// </summary>
|
||||
|
@ -509,7 +422,6 @@ namespace Stride.Graphics
|
|||
|
||||
return flags;
|
||||
}
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Flip model does not support certain format, this method ensures it is in a supported format.
|
||||
|
|
|
@ -44,9 +44,9 @@
|
|||
<ProjectReference Include="..\Stride.Shaders\Stride.Shaders.csproj" />
|
||||
<ProjectReference Include="..\Stride\Stride.csproj" />
|
||||
<PackageReference Include="System.Memory" />
|
||||
<PackageReference Include="SharpDX.Direct3D11" Condition="'$(TargetFramework)' == '$(StrideFramework)' Or '$(TargetFramework)' == '$(StrideFrameworkUWP)'" />
|
||||
<PackageReference Include="SharpDX.Direct3D11" Condition="'$(TargetFramework)' == '$(StrideFramework)'" />
|
||||
<PackageReference Include="SharpDX.Direct3D12" Condition="'$(TargetFramework)' == '$(StrideFramework)'" />
|
||||
<PackageReference Include="SharpDX.D3DCompiler" Condition="'$(TargetFramework)' == '$(StrideFramework)' Or '$(TargetFramework)' == '$(StrideFrameworkUWP)'" />
|
||||
<PackageReference Include="SharpDX.D3DCompiler" Condition="'$(TargetFramework)' == '$(StrideFramework)'" />
|
||||
<PackageReference Include="Vortice.Vulkan" Condition="'$(TargetFramework)' == '$(StrideFramework)'" />
|
||||
<PackageReference Include="Silk.NET.OpenGL" Condition="'$(TargetFramework)' == '$(StrideFramework)'" />
|
||||
<PackageReference Include="Silk.NET.OpenGLES" />
|
||||
|
|
|
@ -1,153 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
#if STRIDE_GRAPHICS_API_DIRECT3D11 && STRIDE_PLATFORM_UWP
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using SharpDX.Direct3D11;
|
||||
using Windows.Graphics.DirectX.Direct3D11;
|
||||
using Windows.Graphics.Holographic;
|
||||
using Windows.UI.Core;
|
||||
|
||||
namespace Stride.Graphics
|
||||
{
|
||||
public class WindowsMixedRealityGraphicsPresenter : GraphicsPresenter
|
||||
{
|
||||
private static readonly Guid ID3D11Resource = new Guid("DC8E63F3-D12B-4952-B47B-5E45026A862D");
|
||||
|
||||
private readonly HolographicSpace holographicSpace;
|
||||
private Texture backBuffer;
|
||||
|
||||
public WindowsMixedRealityGraphicsPresenter(GraphicsDevice device, PresentationParameters presentationParameters)
|
||||
: base(device, presentationParameters)
|
||||
{
|
||||
holographicSpace = HolographicSpace.CreateForCoreWindow(CoreWindow.GetForCurrentThread());
|
||||
CoreWindow.GetForCurrentThread().Activate();
|
||||
|
||||
Device3 d3DDevice = device.NativeDevice.QueryInterface<Device3>();
|
||||
IDirect3DDevice d3DInteropDevice = null;
|
||||
|
||||
// Acquire the DXGI interface for the Direct3D device.
|
||||
using (var dxgiDevice = d3DDevice.QueryInterface<SharpDX.DXGI.Device3>())
|
||||
{
|
||||
// Wrap the native device using a WinRT interop object.
|
||||
uint hr = CreateDirect3D11DeviceFromDXGIDevice(dxgiDevice.NativePointer, out IntPtr pUnknown);
|
||||
|
||||
if (hr == 0)
|
||||
{
|
||||
d3DInteropDevice = Marshal.GetObjectForIUnknown(pUnknown) as IDirect3DDevice;
|
||||
Marshal.Release(pUnknown);
|
||||
}
|
||||
}
|
||||
|
||||
holographicSpace.SetDirect3D11Device(d3DInteropDevice);
|
||||
|
||||
BeginDraw(null);
|
||||
ResizeDepthStencilBuffer(backBuffer.Width, backBuffer.Height, 0);
|
||||
|
||||
// Set a dummy back buffer as we use a seperate one for each eye.
|
||||
BackBuffer = Texture.New(GraphicsDevice, backBuffer.Description, null);
|
||||
}
|
||||
|
||||
[ComImport]
|
||||
[Guid("A9B3D012-3DF2-4EE3-B8D1-8695F457D3C1")]
|
||||
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||
[ComVisible(true)]
|
||||
private interface IDirect3DDxgiInterfaceAccess : IDisposable
|
||||
{
|
||||
IntPtr GetInterface([In] ref Guid iid);
|
||||
}
|
||||
|
||||
public override Texture BackBuffer { get; }
|
||||
|
||||
public override object NativePresenter => holographicSpace;
|
||||
|
||||
public override bool IsFullScreen { get; set; }
|
||||
|
||||
internal HolographicFrame HolographicFrame { get; set; }
|
||||
|
||||
internal static IDirect3DSurface CreateDirect3DSurface(IntPtr dxgiSurface)
|
||||
{
|
||||
uint hr = CreateDirect3D11SurfaceFromDXGISurface(dxgiSurface, out IntPtr inspectableSurface);
|
||||
|
||||
IDirect3DSurface d3DSurface = null;
|
||||
|
||||
if (hr == 0)
|
||||
{
|
||||
d3DSurface = Marshal.GetObjectForIUnknown(inspectableSurface) as IDirect3DSurface;
|
||||
Marshal.Release(inspectableSurface);
|
||||
}
|
||||
|
||||
return d3DSurface;
|
||||
}
|
||||
|
||||
public override void BeginDraw(CommandList commandList)
|
||||
{
|
||||
HolographicFrame = holographicSpace.CreateNextFrame();
|
||||
UpdateBackBuffer();
|
||||
}
|
||||
|
||||
public override void Present()
|
||||
{
|
||||
HolographicFrame.PresentUsingCurrentPrediction();
|
||||
}
|
||||
|
||||
protected override void ResizeBackBuffer(int width, int height, PixelFormat format)
|
||||
{
|
||||
UpdateBackBuffer();
|
||||
}
|
||||
|
||||
protected override void ResizeDepthStencilBuffer(int width, int height, PixelFormat format)
|
||||
{
|
||||
TextureDescription newTextureDescription = DepthStencilBuffer.Description;
|
||||
newTextureDescription.Width = backBuffer.Width;
|
||||
newTextureDescription.Height = backBuffer.Height;
|
||||
|
||||
// Manually update the texture.
|
||||
DepthStencilBuffer.OnDestroyed();
|
||||
|
||||
// Put it in our back buffer texture.
|
||||
DepthStencilBuffer.InitializeFrom(newTextureDescription);
|
||||
}
|
||||
|
||||
[DllImport("d3d11.dll", EntryPoint = "CreateDirect3D11DeviceFromDXGIDevice",
|
||||
SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
|
||||
private static extern uint CreateDirect3D11DeviceFromDXGIDevice(IntPtr dxgiDevice, out IntPtr graphicsDevice);
|
||||
|
||||
[DllImport("d3d11.dll", EntryPoint = "CreateDirect3D11SurfaceFromDXGISurface",
|
||||
SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
|
||||
private static extern uint CreateDirect3D11SurfaceFromDXGISurface(IntPtr dxgiSurface, out IntPtr direct3DSurface);
|
||||
|
||||
private void UpdateBackBuffer()
|
||||
{
|
||||
IDirect3DSurface surface = HolographicFrame.GetRenderingParameters(HolographicFrame.CurrentPrediction.CameraPoses[0]).Direct3D11BackBuffer;
|
||||
IDirect3DDxgiInterfaceAccess surfaceDxgiInterfaceAccess = surface as IDirect3DDxgiInterfaceAccess;
|
||||
IntPtr resource = surfaceDxgiInterfaceAccess.GetInterface(ID3D11Resource);
|
||||
|
||||
if (backBuffer == null || backBuffer.NativeResource.NativePointer != resource)
|
||||
{
|
||||
// Clean up references to previous resources.
|
||||
backBuffer?.Dispose();
|
||||
LeftEyeBuffer?.Dispose();
|
||||
RightEyeBuffer?.Dispose();
|
||||
|
||||
// This can change every frame as the system moves to the next buffer in the
|
||||
// swap chain. This mode of operation will occur when certain rendering modes
|
||||
// are activated.
|
||||
Texture2D d3DBackBuffer = new Texture2D(resource);
|
||||
|
||||
backBuffer = new Texture(GraphicsDevice).InitializeFromImpl(d3DBackBuffer, false);
|
||||
|
||||
LeftEyeBuffer = backBuffer.ToTextureView(new TextureViewDescription() { ArraySlice = 0, Type = ViewType.Single });
|
||||
RightEyeBuffer = backBuffer.ToTextureView(new TextureViewDescription() { ArraySlice = 1, Type = ViewType.Single });
|
||||
}
|
||||
|
||||
Description.BackBufferFormat = backBuffer.Format;
|
||||
Description.BackBufferWidth = backBuffer.Width;
|
||||
Description.BackBufferHeight = backBuffer.Height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -3,7 +3,6 @@
|
|||
<PropertyGroup>
|
||||
<!-- Defaults for CPU and GraphicsApi based on platform-->
|
||||
<StrideDefaultGraphicsApi Condition="'$(StridePlatform)' == 'Windows'">Direct3D11</StrideDefaultGraphicsApi>
|
||||
<StrideDefaultGraphicsApi Condition="'$(StridePlatform)' == 'UWP'">Direct3D11</StrideDefaultGraphicsApi>
|
||||
<StrideDefaultGraphicsApi Condition="'$(StridePlatform)' == 'Android'">OpenGLES</StrideDefaultGraphicsApi>
|
||||
<StrideDefaultGraphicsApi Condition="'$(StridePlatform)' == 'iOS'">OpenGLES</StrideDefaultGraphicsApi>
|
||||
<StrideDefaultGraphicsApi Condition="'$(StridePlatform)' == 'Linux'">OpenGL</StrideDefaultGraphicsApi>
|
||||
|
|
|
@ -62,7 +62,7 @@ namespace Stride.Input
|
|||
/// <param name="largeLeft">The large left side motor</param>
|
||||
/// <param name="largeRight">The large right side motor</param>
|
||||
/// <remarks>Values range from 0 to 1, where 0 is off and 1 is maximum vibration</remarks>
|
||||
/// <remarks>Currently vibration is only supported on windows for XInput devices and UWP supported gamepads</remarks>
|
||||
/// <remarks>Currently vibration is only supported on windows for XInput devices</remarks>
|
||||
void SetVibration(float smallLeft, float smallRight, float largeLeft, float largeRight);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -686,11 +686,6 @@ namespace Stride.Input
|
|||
#if STRIDE_PLATFORM_IOS
|
||||
case AppContextType.iOS:
|
||||
break;
|
||||
#endif
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
case AppContextType.UWPXaml:
|
||||
case AppContextType.UWPCoreWindow:
|
||||
break;
|
||||
#endif
|
||||
case AppContextType.Desktop:
|
||||
#if (STRIDE_UI_WINFORMS || STRIDE_UI_WPF)
|
||||
|
|
|
@ -35,14 +35,6 @@ namespace Stride.Input
|
|||
var iosContext = (GameContextiOS)context;
|
||||
return new InputSourceiOS(iosContext.Control);
|
||||
#endif
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
case AppContextType.UWPXaml:
|
||||
var uwpXamlContext = (GameContextUWPXaml)context;
|
||||
return new InputSourceUWP(Windows.UI.Xaml.Window.Current.CoreWindow);
|
||||
case AppContextType.UWPCoreWindow:
|
||||
var uwpContext = (GameContextUWPCoreWindow)context;
|
||||
return new InputSourceUWP(uwpContext.Control);
|
||||
#endif
|
||||
#if (STRIDE_UI_WINFORMS || STRIDE_UI_WPF)
|
||||
case AppContextType.Desktop:
|
||||
var winformsContext = (GameContextWinforms)context;
|
||||
|
|
|
@ -1,130 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Windows.Gaming.Input;
|
||||
|
||||
namespace Stride.Input
|
||||
{
|
||||
/// <summary>
|
||||
/// UWP Gamepad
|
||||
/// </summary>
|
||||
internal class GamePadUWP : GamePadDeviceBase
|
||||
{
|
||||
internal Gamepad Gamepad;
|
||||
private readonly double[] lastAxisState = new double[6];
|
||||
private GamePadState state = new GamePadState();
|
||||
|
||||
private Dictionary<GamepadButtons, GamePadButton> buttonMap = new Dictionary<GamepadButtons, GamePadButton>
|
||||
{
|
||||
[GamepadButtons.DPadDown] = GamePadButton.PadDown,
|
||||
[GamepadButtons.DPadLeft] = GamePadButton.PadLeft,
|
||||
[GamepadButtons.DPadRight] = GamePadButton.PadRight,
|
||||
[GamepadButtons.DPadUp] = GamePadButton.PadUp,
|
||||
[GamepadButtons.A] = GamePadButton.A,
|
||||
[GamepadButtons.B] = GamePadButton.B,
|
||||
[GamepadButtons.X] = GamePadButton.X,
|
||||
[GamepadButtons.Y] = GamePadButton.Y,
|
||||
[GamepadButtons.Menu] = GamePadButton.Start,
|
||||
[GamepadButtons.View] = GamePadButton.Back,
|
||||
[GamepadButtons.LeftShoulder] = GamePadButton.LeftShoulder,
|
||||
[GamepadButtons.RightShoulder] = GamePadButton.RightShoulder,
|
||||
[GamepadButtons.LeftThumbstick] = GamePadButton.LeftThumb,
|
||||
[GamepadButtons.RightThumbstick] = GamePadButton.RightThumb,
|
||||
};
|
||||
|
||||
public GamePadUWP(InputSourceUWP source, Gamepad gamepad, Guid id)
|
||||
{
|
||||
Source = source;
|
||||
Id = id;
|
||||
ProductId = new Guid("800BE63B-49DC-4214-A4D2-E39E24EA3542");
|
||||
Gamepad = gamepad;
|
||||
}
|
||||
|
||||
public override string Name => "UWP GamePad";
|
||||
|
||||
public override Guid Id { get; }
|
||||
|
||||
public override Guid ProductId { get; }
|
||||
|
||||
public override IInputSource Source { get; }
|
||||
|
||||
public override GamePadState State => state;
|
||||
|
||||
public override void Update(List<InputEvent> inputEvents)
|
||||
{
|
||||
var reading = Gamepad.GetCurrentReading();
|
||||
|
||||
ClearButtonStates();
|
||||
|
||||
// Check buttons
|
||||
for (int i = 0; i < 14; i++)
|
||||
{
|
||||
int mask = 1 << i;
|
||||
GamePadButton button = buttonMap[(GamepadButtons)mask];
|
||||
var oldState = (state.Buttons & button) != 0;
|
||||
var newState = (reading.Buttons & (GamepadButtons)mask) != 0;
|
||||
if (oldState != newState)
|
||||
{
|
||||
GamePadButtonEvent buttonEvent = InputEventPool<GamePadButtonEvent>.GetOrCreate(this);
|
||||
buttonEvent.IsDown = newState;
|
||||
buttonEvent.Button = button;
|
||||
inputEvents.Add(buttonEvent);
|
||||
if (state.Update(buttonEvent))
|
||||
{
|
||||
UpdateButtonState(buttonEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ChangeAxis(0, reading.LeftThumbstickX))
|
||||
inputEvents.Add(CreateAxisEvent(GamePadAxis.LeftThumbX, reading.LeftThumbstickX));
|
||||
if (ChangeAxis(1, reading.LeftThumbstickY))
|
||||
inputEvents.Add(CreateAxisEvent(GamePadAxis.LeftThumbY, reading.LeftThumbstickY));
|
||||
|
||||
if (ChangeAxis(2, reading.RightThumbstickX))
|
||||
inputEvents.Add(CreateAxisEvent(GamePadAxis.RightThumbX, reading.RightThumbstickX));
|
||||
if (ChangeAxis(3, reading.RightThumbstickY))
|
||||
inputEvents.Add(CreateAxisEvent(GamePadAxis.RightThumbY, reading.RightThumbstickY));
|
||||
|
||||
if (ChangeAxis(4, reading.LeftTrigger))
|
||||
inputEvents.Add(CreateAxisEvent(GamePadAxis.LeftTrigger, reading.LeftTrigger));
|
||||
if (ChangeAxis(5, reading.RightTrigger))
|
||||
inputEvents.Add(CreateAxisEvent(GamePadAxis.RightTrigger, reading.RightTrigger));
|
||||
}
|
||||
|
||||
public override void SetVibration(float smallLeft, float smallRight, float largeLeft, float largeRight)
|
||||
{
|
||||
Gamepad.Vibration = new GamepadVibration
|
||||
{
|
||||
LeftMotor = largeLeft,
|
||||
LeftTrigger = smallLeft,
|
||||
RightMotor = largeRight,
|
||||
RightTrigger = smallLeft,
|
||||
};
|
||||
}
|
||||
|
||||
private bool ChangeAxis(int index, double newValue)
|
||||
{
|
||||
// ReSharper disable once CompareOfFloatsByEqualityOperator
|
||||
if (lastAxisState[index] != newValue)
|
||||
{
|
||||
lastAxisState[index] = newValue;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private GamePadAxisEvent CreateAxisEvent(GamePadAxis axis, double newValue)
|
||||
{
|
||||
GamePadAxisEvent axisEvent = InputEventPool<GamePadAxisEvent>.GetOrCreate(this);
|
||||
axisEvent.Value = (float)newValue;
|
||||
axisEvent.Axis = axis;
|
||||
state.Update(axisEvent);
|
||||
return axisEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,277 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Windows.Devices.Input;
|
||||
using Windows.Gaming.Input;
|
||||
using Windows.UI.Core;
|
||||
using Windows.UI.Xaml;
|
||||
using Stride.Core.Mathematics;
|
||||
using Stride.Games;
|
||||
using WindowsAccelerometer = Windows.Devices.Sensors.Accelerometer;
|
||||
using WindowsGyroscope = Windows.Devices.Sensors.Gyrometer;
|
||||
using WindowsOrientation = Windows.Devices.Sensors.OrientationSensor;
|
||||
using WindowsCompass = Windows.Devices.Sensors.Compass;
|
||||
|
||||
namespace Stride.Input
|
||||
{
|
||||
/// <summary>
|
||||
/// Input source for devices using the universal windows platform
|
||||
/// </summary>
|
||||
internal class InputSourceUWP : InputSourceBase
|
||||
{
|
||||
private const uint DesiredSensorUpdateIntervalMs = (uint)(1f / InputManager.DesiredSensorUpdateRate * 1000f);
|
||||
|
||||
private readonly Dictionary<Gamepad, GamePadUWP> gamePads = new Dictionary<Gamepad, GamePadUWP>();
|
||||
|
||||
private readonly CoreWindow coreWindow;
|
||||
private WindowsAccelerometer windowsAccelerometer;
|
||||
private WindowsCompass windowsCompass;
|
||||
private WindowsGyroscope windowsGyroscope;
|
||||
private WindowsOrientation windowsOrientation;
|
||||
|
||||
private AccelerometerSensor accelerometer;
|
||||
private CompassSensor compass;
|
||||
private GyroscopeSensor gyroscope;
|
||||
private OrientationSensor orientation;
|
||||
private GravitySensor gravity;
|
||||
private UserAccelerationSensor userAcceleration;
|
||||
|
||||
private PointerUWP pointer;
|
||||
private KeyboardUWP keyboard;
|
||||
|
||||
public InputSourceUWP(CoreWindow coreWindow)
|
||||
{
|
||||
this.coreWindow = coreWindow ?? throw new ArgumentNullException(nameof(coreWindow));
|
||||
}
|
||||
|
||||
public override void Initialize(InputManager inputManager)
|
||||
{
|
||||
var mouseCapabilities = new MouseCapabilities();
|
||||
if (mouseCapabilities.MousePresent > 0)
|
||||
{
|
||||
pointer = new MouseUWP(this, coreWindow);
|
||||
RegisterDevice(pointer);
|
||||
}
|
||||
|
||||
var keyboardCapabilities = new KeyboardCapabilities();
|
||||
if (keyboardCapabilities.KeyboardPresent > 0)
|
||||
{
|
||||
keyboard = new KeyboardUWP(this, coreWindow);
|
||||
RegisterDevice(keyboard);
|
||||
}
|
||||
|
||||
// get sensor default instances
|
||||
windowsAccelerometer = WindowsAccelerometer.GetDefault();
|
||||
if (windowsAccelerometer != null)
|
||||
{
|
||||
accelerometer = new AccelerometerSensor(this, "UWP");
|
||||
RegisterDevice(accelerometer);
|
||||
}
|
||||
|
||||
windowsCompass = WindowsCompass.GetDefault();
|
||||
if (windowsCompass != null)
|
||||
{
|
||||
compass = new CompassSensor(this, "UWP");
|
||||
RegisterDevice(compass);
|
||||
}
|
||||
|
||||
windowsGyroscope = WindowsGyroscope.GetDefault();
|
||||
if (windowsGyroscope != null)
|
||||
{
|
||||
gyroscope = new GyroscopeSensor(this, "UWP");
|
||||
RegisterDevice(gyroscope);
|
||||
}
|
||||
|
||||
windowsOrientation = WindowsOrientation.GetDefault();
|
||||
if (windowsOrientation != null)
|
||||
{
|
||||
orientation = new OrientationSensor(this, "UWP");
|
||||
RegisterDevice(orientation);
|
||||
}
|
||||
|
||||
// Virtual sensors
|
||||
if (windowsOrientation != null && windowsAccelerometer != null)
|
||||
{
|
||||
gravity = new GravitySensor(this, "UWP");
|
||||
userAcceleration = new UserAccelerationSensor(this, "UWP");
|
||||
RegisterDevice(gravity);
|
||||
RegisterDevice(userAcceleration);
|
||||
}
|
||||
|
||||
Gamepad.GamepadAdded += GamepadOnGamepadAdded;
|
||||
Gamepad.GamepadRemoved += GamepadOnGamepadRemoved;
|
||||
|
||||
Scan();
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
base.Dispose();
|
||||
|
||||
Gamepad.GamepadAdded -= GamepadOnGamepadAdded;
|
||||
Gamepad.GamepadRemoved -= GamepadOnGamepadRemoved;
|
||||
}
|
||||
|
||||
public override void Scan()
|
||||
{
|
||||
base.Scan();
|
||||
|
||||
foreach (var gamepad in Gamepad.Gamepads)
|
||||
{
|
||||
GamepadOnGamepadAdded(this, gamepad);
|
||||
}
|
||||
}
|
||||
|
||||
private void GamepadOnGamepadRemoved(object sender, Gamepad gamepad)
|
||||
{
|
||||
GamePadUWP currentGamePad;
|
||||
if (!gamePads.TryGetValue(gamepad, out currentGamePad))
|
||||
return;
|
||||
|
||||
gamePads.Remove(gamepad);
|
||||
UnregisterDevice(currentGamePad);
|
||||
}
|
||||
|
||||
private void GamepadOnGamepadAdded(object sender, Gamepad gamepad)
|
||||
{
|
||||
if (gamePads.ContainsKey(gamepad))
|
||||
return;
|
||||
|
||||
GamePadUWP newGamePad = new GamePadUWP(this, gamepad, Guid.NewGuid());
|
||||
gamePads.Add(gamepad, newGamePad);
|
||||
RegisterDevice(newGamePad);
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
|
||||
// Enable/disable supported sensors and update enabled sensors
|
||||
if (accelerometer != null)
|
||||
{
|
||||
bool enable = accelerometer.IsEnabled || (userAcceleration?.IsEnabled ?? false) || (gravity?.IsEnabled ?? false);
|
||||
bool isEnabled = windowsAccelerometer.ReportInterval != 0;
|
||||
|
||||
if (enable != isEnabled)
|
||||
{
|
||||
windowsAccelerometer.ReportInterval = enable ? Math.Max(DesiredSensorUpdateIntervalMs, windowsAccelerometer.MinimumReportInterval) : 0;
|
||||
}
|
||||
|
||||
if (enable)
|
||||
{
|
||||
accelerometer.Acceleration = GetAcceleration(windowsAccelerometer);
|
||||
}
|
||||
}
|
||||
|
||||
if (compass != null)
|
||||
{
|
||||
bool enable = compass.IsEnabled;
|
||||
bool isEnabled = windowsCompass.ReportInterval != 0;
|
||||
|
||||
if (enable != isEnabled)
|
||||
{
|
||||
windowsCompass.ReportInterval = enable ? Math.Max(DesiredSensorUpdateIntervalMs, windowsCompass.MinimumReportInterval) : 0;
|
||||
}
|
||||
|
||||
if (enable)
|
||||
{
|
||||
compass.Heading = GetNorth(windowsCompass);
|
||||
}
|
||||
}
|
||||
|
||||
if (gyroscope != null)
|
||||
{
|
||||
bool enable = gyroscope.IsEnabled;
|
||||
bool isEnabled = windowsGyroscope.ReportInterval != 0;
|
||||
|
||||
if (enable != isEnabled)
|
||||
{
|
||||
windowsGyroscope.ReportInterval = enable ? Math.Max(DesiredSensorUpdateIntervalMs, windowsGyroscope.MinimumReportInterval) : 0;
|
||||
}
|
||||
|
||||
if (enable)
|
||||
{
|
||||
var reading = windowsGyroscope.GetCurrentReading();
|
||||
gyroscope.RotationRate = reading != null ? new Vector3((float)reading.AngularVelocityX, (float)reading.AngularVelocityZ, -(float)reading.AngularVelocityY) : Vector3.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
if (orientation != null)
|
||||
{
|
||||
bool enable = orientation.IsEnabled || (userAcceleration?.IsEnabled ?? false) || (gravity?.IsEnabled ?? false);
|
||||
bool isEnabled = windowsOrientation.ReportInterval != 0;
|
||||
|
||||
if (enable != isEnabled)
|
||||
{
|
||||
windowsOrientation.ReportInterval = enable ? Math.Max(DesiredSensorUpdateIntervalMs, windowsOrientation.MinimumReportInterval) : 0;
|
||||
}
|
||||
|
||||
if (enable)
|
||||
{
|
||||
var quaternion = GetOrientation(windowsOrientation);
|
||||
orientation.FromQuaternion(quaternion);
|
||||
|
||||
if (userAcceleration.IsEnabled || gravity.IsEnabled)
|
||||
{
|
||||
// calculate the gravity direction
|
||||
var acceleration = GetAcceleration(windowsAccelerometer);
|
||||
var gravityDirection = Vector3.Transform(-Vector3.UnitY, Quaternion.Invert(quaternion));
|
||||
var gravity = InputManager.G * gravityDirection;
|
||||
|
||||
this.gravity.Vector = gravity;
|
||||
userAcceleration.Acceleration = acceleration - gravity;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Pause()
|
||||
{
|
||||
base.Pause();
|
||||
|
||||
if (windowsAccelerometer != null)
|
||||
windowsAccelerometer.ReportInterval = 0;
|
||||
|
||||
if (windowsCompass != null)
|
||||
windowsCompass.ReportInterval = 0;
|
||||
|
||||
if (windowsGyroscope != null)
|
||||
windowsGyroscope.ReportInterval = 0;
|
||||
|
||||
if (windowsOrientation != null)
|
||||
windowsOrientation.ReportInterval = 0;
|
||||
}
|
||||
|
||||
private static Vector3 GetAcceleration(WindowsAccelerometer accelerometer)
|
||||
{
|
||||
var currentReading = accelerometer.GetCurrentReading();
|
||||
if (currentReading == null)
|
||||
return Vector3.Zero;
|
||||
|
||||
return InputManager.G * new Vector3((float)currentReading.AccelerationX, (float)currentReading.AccelerationZ, -(float)currentReading.AccelerationY);
|
||||
}
|
||||
|
||||
private static Quaternion GetOrientation(WindowsOrientation orientation)
|
||||
{
|
||||
var reading = orientation.GetCurrentReading();
|
||||
if (reading == null)
|
||||
return Quaternion.Identity;
|
||||
|
||||
var q = reading.Quaternion;
|
||||
return new Quaternion(q.X, q.Z, -q.Y, q.W);
|
||||
}
|
||||
|
||||
private static float GetNorth(WindowsCompass compass)
|
||||
{
|
||||
var currentReading = compass.GetCurrentReading();
|
||||
if (currentReading == null)
|
||||
return 0f;
|
||||
|
||||
return MathUtil.DegreesToRadians((float)(currentReading.HeadingTrueNorth ?? currentReading.HeadingMagneticNorth));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -1,276 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
using System;
|
||||
using Windows.UI.Core;
|
||||
using System.Collections.Generic;
|
||||
using Windows.System;
|
||||
|
||||
namespace Stride.Input
|
||||
{
|
||||
internal class KeyboardUWP : KeyboardDeviceBase, IDisposable
|
||||
{
|
||||
private static readonly Dictionary<VirtualKey, Keys> mapKeys;
|
||||
|
||||
private readonly CoreWindow uiControl;
|
||||
|
||||
static KeyboardUWP()
|
||||
{
|
||||
mapKeys = new Dictionary<VirtualKey, Keys>();
|
||||
// this dictionary was built from Desktop version (VirtualKey are compatible with WinForms keys)
|
||||
AddKeys(WinFormsKeys.None, Keys.None);
|
||||
AddKeys(WinFormsKeys.Cancel, Keys.Cancel);
|
||||
AddKeys(WinFormsKeys.Back, Keys.Back);
|
||||
AddKeys(WinFormsKeys.Tab, Keys.Tab);
|
||||
AddKeys(WinFormsKeys.LineFeed, Keys.LineFeed);
|
||||
AddKeys(WinFormsKeys.Clear, Keys.Clear);
|
||||
AddKeys(WinFormsKeys.Enter, Keys.Enter);
|
||||
AddKeys(WinFormsKeys.Return, Keys.Return);
|
||||
AddKeys(WinFormsKeys.Pause, Keys.Pause);
|
||||
AddKeys(WinFormsKeys.Capital, Keys.Capital);
|
||||
AddKeys(WinFormsKeys.CapsLock, Keys.CapsLock);
|
||||
AddKeys(WinFormsKeys.HangulMode, Keys.HangulMode);
|
||||
AddKeys(WinFormsKeys.KanaMode, Keys.KanaMode);
|
||||
AddKeys(WinFormsKeys.JunjaMode, Keys.JunjaMode);
|
||||
AddKeys(WinFormsKeys.FinalMode, Keys.FinalMode);
|
||||
AddKeys(WinFormsKeys.HanjaMode, Keys.HanjaMode);
|
||||
AddKeys(WinFormsKeys.KanjiMode, Keys.KanjiMode);
|
||||
AddKeys(WinFormsKeys.Escape, Keys.Escape);
|
||||
AddKeys(WinFormsKeys.IMEConvert, Keys.ImeConvert);
|
||||
AddKeys(WinFormsKeys.IMENonconvert, Keys.ImeNonConvert);
|
||||
AddKeys(WinFormsKeys.IMEAccept, Keys.ImeAccept);
|
||||
AddKeys(WinFormsKeys.IMEModeChange, Keys.ImeModeChange);
|
||||
AddKeys(WinFormsKeys.Space, Keys.Space);
|
||||
AddKeys(WinFormsKeys.PageUp, Keys.PageUp);
|
||||
AddKeys(WinFormsKeys.Prior, Keys.Prior);
|
||||
AddKeys(WinFormsKeys.Next, Keys.Next);
|
||||
AddKeys(WinFormsKeys.PageDown, Keys.PageDown);
|
||||
AddKeys(WinFormsKeys.End, Keys.End);
|
||||
AddKeys(WinFormsKeys.Home, Keys.Home);
|
||||
AddKeys(WinFormsKeys.Left, Keys.Left);
|
||||
AddKeys(WinFormsKeys.Up, Keys.Up);
|
||||
AddKeys(WinFormsKeys.Right, Keys.Right);
|
||||
AddKeys(WinFormsKeys.Down, Keys.Down);
|
||||
AddKeys(WinFormsKeys.Select, Keys.Select);
|
||||
AddKeys(WinFormsKeys.Print, Keys.Print);
|
||||
AddKeys(WinFormsKeys.Execute, Keys.Execute);
|
||||
AddKeys(WinFormsKeys.PrintScreen, Keys.PrintScreen);
|
||||
AddKeys(WinFormsKeys.Snapshot, Keys.Snapshot);
|
||||
AddKeys(WinFormsKeys.Insert, Keys.Insert);
|
||||
AddKeys(WinFormsKeys.Delete, Keys.Delete);
|
||||
AddKeys(WinFormsKeys.Help, Keys.Help);
|
||||
AddKeys(WinFormsKeys.D0, Keys.D0);
|
||||
AddKeys(WinFormsKeys.D1, Keys.D1);
|
||||
AddKeys(WinFormsKeys.D2, Keys.D2);
|
||||
AddKeys(WinFormsKeys.D3, Keys.D3);
|
||||
AddKeys(WinFormsKeys.D4, Keys.D4);
|
||||
AddKeys(WinFormsKeys.D5, Keys.D5);
|
||||
AddKeys(WinFormsKeys.D6, Keys.D6);
|
||||
AddKeys(WinFormsKeys.D7, Keys.D7);
|
||||
AddKeys(WinFormsKeys.D8, Keys.D8);
|
||||
AddKeys(WinFormsKeys.D9, Keys.D9);
|
||||
AddKeys(WinFormsKeys.A, Keys.A);
|
||||
AddKeys(WinFormsKeys.B, Keys.B);
|
||||
AddKeys(WinFormsKeys.C, Keys.C);
|
||||
AddKeys(WinFormsKeys.D, Keys.D);
|
||||
AddKeys(WinFormsKeys.E, Keys.E);
|
||||
AddKeys(WinFormsKeys.F, Keys.F);
|
||||
AddKeys(WinFormsKeys.G, Keys.G);
|
||||
AddKeys(WinFormsKeys.H, Keys.H);
|
||||
AddKeys(WinFormsKeys.I, Keys.I);
|
||||
AddKeys(WinFormsKeys.J, Keys.J);
|
||||
AddKeys(WinFormsKeys.K, Keys.K);
|
||||
AddKeys(WinFormsKeys.L, Keys.L);
|
||||
AddKeys(WinFormsKeys.M, Keys.M);
|
||||
AddKeys(WinFormsKeys.N, Keys.N);
|
||||
AddKeys(WinFormsKeys.O, Keys.O);
|
||||
AddKeys(WinFormsKeys.P, Keys.P);
|
||||
AddKeys(WinFormsKeys.Q, Keys.Q);
|
||||
AddKeys(WinFormsKeys.R, Keys.R);
|
||||
AddKeys(WinFormsKeys.S, Keys.S);
|
||||
AddKeys(WinFormsKeys.T, Keys.T);
|
||||
AddKeys(WinFormsKeys.U, Keys.U);
|
||||
AddKeys(WinFormsKeys.V, Keys.V);
|
||||
AddKeys(WinFormsKeys.W, Keys.W);
|
||||
AddKeys(WinFormsKeys.X, Keys.X);
|
||||
AddKeys(WinFormsKeys.Y, Keys.Y);
|
||||
AddKeys(WinFormsKeys.Z, Keys.Z);
|
||||
AddKeys(WinFormsKeys.LWin, Keys.LeftWin);
|
||||
AddKeys(WinFormsKeys.RWin, Keys.RightWin);
|
||||
AddKeys(WinFormsKeys.Apps, Keys.Apps);
|
||||
AddKeys(WinFormsKeys.Sleep, Keys.Sleep);
|
||||
AddKeys(WinFormsKeys.NumPad0, Keys.NumPad0);
|
||||
AddKeys(WinFormsKeys.NumPad1, Keys.NumPad1);
|
||||
AddKeys(WinFormsKeys.NumPad2, Keys.NumPad2);
|
||||
AddKeys(WinFormsKeys.NumPad3, Keys.NumPad3);
|
||||
AddKeys(WinFormsKeys.NumPad4, Keys.NumPad4);
|
||||
AddKeys(WinFormsKeys.NumPad5, Keys.NumPad5);
|
||||
AddKeys(WinFormsKeys.NumPad6, Keys.NumPad6);
|
||||
AddKeys(WinFormsKeys.NumPad7, Keys.NumPad7);
|
||||
AddKeys(WinFormsKeys.NumPad8, Keys.NumPad8);
|
||||
AddKeys(WinFormsKeys.NumPad9, Keys.NumPad9);
|
||||
AddKeys(WinFormsKeys.Multiply, Keys.Multiply);
|
||||
AddKeys(WinFormsKeys.Add, Keys.Add);
|
||||
AddKeys(WinFormsKeys.Separator, Keys.Separator);
|
||||
AddKeys(WinFormsKeys.Subtract, Keys.Subtract);
|
||||
AddKeys(WinFormsKeys.Decimal, Keys.Decimal);
|
||||
AddKeys(WinFormsKeys.Divide, Keys.Divide);
|
||||
AddKeys(WinFormsKeys.F1, Keys.F1);
|
||||
AddKeys(WinFormsKeys.F2, Keys.F2);
|
||||
AddKeys(WinFormsKeys.F3, Keys.F3);
|
||||
AddKeys(WinFormsKeys.F4, Keys.F4);
|
||||
AddKeys(WinFormsKeys.F5, Keys.F5);
|
||||
AddKeys(WinFormsKeys.F6, Keys.F6);
|
||||
AddKeys(WinFormsKeys.F7, Keys.F7);
|
||||
AddKeys(WinFormsKeys.F8, Keys.F8);
|
||||
AddKeys(WinFormsKeys.F9, Keys.F9);
|
||||
AddKeys(WinFormsKeys.F10, Keys.F10);
|
||||
AddKeys(WinFormsKeys.F11, Keys.F11);
|
||||
AddKeys(WinFormsKeys.F12, Keys.F12);
|
||||
AddKeys(WinFormsKeys.F13, Keys.F13);
|
||||
AddKeys(WinFormsKeys.F14, Keys.F14);
|
||||
AddKeys(WinFormsKeys.F15, Keys.F15);
|
||||
AddKeys(WinFormsKeys.F16, Keys.F16);
|
||||
AddKeys(WinFormsKeys.F17, Keys.F17);
|
||||
AddKeys(WinFormsKeys.F18, Keys.F18);
|
||||
AddKeys(WinFormsKeys.F19, Keys.F19);
|
||||
AddKeys(WinFormsKeys.F20, Keys.F20);
|
||||
AddKeys(WinFormsKeys.F21, Keys.F21);
|
||||
AddKeys(WinFormsKeys.F22, Keys.F22);
|
||||
AddKeys(WinFormsKeys.F23, Keys.F23);
|
||||
AddKeys(WinFormsKeys.F24, Keys.F24);
|
||||
AddKeys(WinFormsKeys.NumLock, Keys.NumLock);
|
||||
AddKeys(WinFormsKeys.Scroll, Keys.Scroll);
|
||||
AddKeys(WinFormsKeys.LShiftKey, Keys.LeftShift);
|
||||
AddKeys(WinFormsKeys.RShiftKey, Keys.RightShift);
|
||||
AddKeys(WinFormsKeys.LControlKey, Keys.LeftCtrl);
|
||||
AddKeys(WinFormsKeys.RControlKey, Keys.RightCtrl);
|
||||
AddKeys(WinFormsKeys.LMenu, Keys.LeftAlt);
|
||||
AddKeys(WinFormsKeys.RMenu, Keys.RightAlt);
|
||||
AddKeys(WinFormsKeys.BrowserBack, Keys.BrowserBack);
|
||||
AddKeys(WinFormsKeys.BrowserForward, Keys.BrowserForward);
|
||||
AddKeys(WinFormsKeys.BrowserRefresh, Keys.BrowserRefresh);
|
||||
AddKeys(WinFormsKeys.BrowserStop, Keys.BrowserStop);
|
||||
AddKeys(WinFormsKeys.BrowserSearch, Keys.BrowserSearch);
|
||||
AddKeys(WinFormsKeys.BrowserFavorites, Keys.BrowserFavorites);
|
||||
AddKeys(WinFormsKeys.BrowserHome, Keys.BrowserHome);
|
||||
AddKeys(WinFormsKeys.VolumeMute, Keys.VolumeMute);
|
||||
AddKeys(WinFormsKeys.VolumeDown, Keys.VolumeDown);
|
||||
AddKeys(WinFormsKeys.VolumeUp, Keys.VolumeUp);
|
||||
AddKeys(WinFormsKeys.MediaNextTrack, Keys.MediaNextTrack);
|
||||
AddKeys(WinFormsKeys.MediaPreviousTrack, Keys.MediaPreviousTrack);
|
||||
AddKeys(WinFormsKeys.MediaStop, Keys.MediaStop);
|
||||
AddKeys(WinFormsKeys.MediaPlayPause, Keys.MediaPlayPause);
|
||||
AddKeys(WinFormsKeys.LaunchMail, Keys.LaunchMail);
|
||||
AddKeys(WinFormsKeys.SelectMedia, Keys.SelectMedia);
|
||||
AddKeys(WinFormsKeys.LaunchApplication1, Keys.LaunchApplication1);
|
||||
AddKeys(WinFormsKeys.LaunchApplication2, Keys.LaunchApplication2);
|
||||
AddKeys(WinFormsKeys.Oem1, Keys.Oem1);
|
||||
AddKeys(WinFormsKeys.OemSemicolon, Keys.OemSemicolon);
|
||||
AddKeys(WinFormsKeys.Oemplus, Keys.OemPlus);
|
||||
AddKeys(WinFormsKeys.Oemcomma, Keys.OemComma);
|
||||
AddKeys(WinFormsKeys.OemMinus, Keys.OemMinus);
|
||||
AddKeys(WinFormsKeys.OemPeriod, Keys.OemPeriod);
|
||||
AddKeys(WinFormsKeys.Oem2, Keys.Oem2);
|
||||
AddKeys(WinFormsKeys.OemQuestion, Keys.OemQuestion);
|
||||
AddKeys(WinFormsKeys.Oem3, Keys.Oem3);
|
||||
AddKeys(WinFormsKeys.Oemtilde, Keys.OemTilde);
|
||||
AddKeys(WinFormsKeys.Oem4, Keys.Oem4);
|
||||
AddKeys(WinFormsKeys.OemOpenBrackets, Keys.OemOpenBrackets);
|
||||
AddKeys(WinFormsKeys.Oem5, Keys.Oem5);
|
||||
AddKeys(WinFormsKeys.OemPipe, Keys.OemPipe);
|
||||
AddKeys(WinFormsKeys.Oem6, Keys.Oem6);
|
||||
AddKeys(WinFormsKeys.OemCloseBrackets, Keys.OemCloseBrackets);
|
||||
AddKeys(WinFormsKeys.Oem7, Keys.Oem7);
|
||||
AddKeys(WinFormsKeys.OemQuotes, Keys.OemQuotes);
|
||||
AddKeys(WinFormsKeys.Oem8, Keys.Oem8);
|
||||
AddKeys(WinFormsKeys.Oem102, Keys.Oem102);
|
||||
AddKeys(WinFormsKeys.OemBackslash, Keys.OemBackslash);
|
||||
AddKeys(WinFormsKeys.Attn, Keys.Attn);
|
||||
AddKeys(WinFormsKeys.Crsel, Keys.CrSel);
|
||||
AddKeys(WinFormsKeys.Exsel, Keys.ExSel);
|
||||
AddKeys(WinFormsKeys.EraseEof, Keys.EraseEof);
|
||||
AddKeys(WinFormsKeys.Play, Keys.Play);
|
||||
AddKeys(WinFormsKeys.Zoom, Keys.Zoom);
|
||||
AddKeys(WinFormsKeys.NoName, Keys.NoName);
|
||||
AddKeys(WinFormsKeys.Pa1, Keys.Pa1);
|
||||
AddKeys(WinFormsKeys.OemClear, Keys.OemClear);
|
||||
}
|
||||
|
||||
public KeyboardUWP(InputSourceUWP source, CoreWindow uiControl)
|
||||
{
|
||||
Source = source;
|
||||
this.uiControl = uiControl;
|
||||
uiControl.KeyDown += CoreWindowOnKeyDown;
|
||||
uiControl.KeyUp += CoreWindowOnKeyUp;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
uiControl.KeyDown -= CoreWindowOnKeyDown;
|
||||
uiControl.KeyUp -= CoreWindowOnKeyUp;
|
||||
}
|
||||
|
||||
public override IInputSource Source { get; }
|
||||
|
||||
public override string Name { get; } = "UWP Keyboard";
|
||||
|
||||
public override Guid Id { get; } = new Guid("2296CBDF-46EA-4D68-B8E5-5900C25C774D");
|
||||
|
||||
private static void AddKeys(WinFormsKeys fromKey, Keys toKey)
|
||||
{
|
||||
if (!mapKeys.ContainsKey((VirtualKey)fromKey))
|
||||
{
|
||||
mapKeys.Add((VirtualKey)fromKey, toKey);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleKey(bool isDown, VirtualKey virtualKey, CorePhysicalKeyStatus keyStatus)
|
||||
{
|
||||
// Remap certain keys
|
||||
switch (virtualKey)
|
||||
{
|
||||
case VirtualKey.Shift:
|
||||
// Only way to differentiate left and right shift is through the scan code
|
||||
virtualKey = keyStatus.ScanCode == 54 ? VirtualKey.RightShift : VirtualKey.LeftShift;
|
||||
break;
|
||||
case VirtualKey.Control:
|
||||
virtualKey = keyStatus.IsExtendedKey ? VirtualKey.RightControl : VirtualKey.LeftControl;
|
||||
break;
|
||||
case VirtualKey.Menu:
|
||||
virtualKey = keyStatus.IsExtendedKey ? VirtualKey.RightMenu : VirtualKey.LeftMenu;
|
||||
break;
|
||||
}
|
||||
|
||||
// Let Alt + F4 go through
|
||||
if (virtualKey == VirtualKey.F4 && this.IsKeyDown(Keys.LeftAlt))
|
||||
return;
|
||||
|
||||
// Map key to stride key
|
||||
Keys strideKey;
|
||||
if (!mapKeys.TryGetValue(virtualKey, out strideKey))
|
||||
return;
|
||||
|
||||
if (isDown)
|
||||
{
|
||||
HandleKeyDown(strideKey);
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleKeyUp(strideKey);
|
||||
}
|
||||
}
|
||||
|
||||
private void CoreWindowOnKeyDown(CoreWindow sender, KeyEventArgs args)
|
||||
{
|
||||
HandleKey(true, args.VirtualKey, args.KeyStatus);
|
||||
}
|
||||
|
||||
private void CoreWindowOnKeyUp(CoreWindow sender, KeyEventArgs args)
|
||||
{
|
||||
HandleKey(false, args.VirtualKey, args.KeyStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -1,85 +0,0 @@
|
|||
// Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
|
||||
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
#if STRIDE_PLATFORM_UWP
|
||||
using Windows.Devices.Input;
|
||||
using Windows.UI.Input;
|
||||
using Stride.Core.Mathematics;
|
||||
|
||||
namespace Stride.Input
|
||||
{
|
||||
internal class MouseDeviceStateUWP : MouseDeviceState
|
||||
{
|
||||
public MouseDeviceStateUWP(PointerDeviceState pointerState, IMouseDevice mouseDevice) : base(pointerState, mouseDevice)
|
||||
{
|
||||
}
|
||||
|
||||
public void HandlePointerWheelChanged(Windows.UI.Input.PointerPoint point)
|
||||
{
|
||||
if (point.PointerDevice.PointerDeviceType == PointerDeviceType.Mouse)
|
||||
{
|
||||
HandleMouseWheel(point.Properties.MouseWheelDelta / 120.0f);
|
||||
}
|
||||
}
|
||||
|
||||
public void HandlePointerMoved(Windows.UI.Input.PointerPoint pointerPoint)
|
||||
{
|
||||
if (pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Mouse)
|
||||
{
|
||||
var newPosition = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y);
|
||||
HandleMove(newPosition);
|
||||
}
|
||||
}
|
||||
|
||||
public void HandlePointerPressed(Windows.UI.Input.PointerPoint point)
|
||||
{
|
||||
if (point.PointerDevice.PointerDeviceType == PointerDeviceType.Mouse)
|
||||
{
|
||||
switch (point.Properties.PointerUpdateKind)
|
||||
{
|
||||
case PointerUpdateKind.LeftButtonPressed:
|
||||
HandleButtonDown(MouseButton.Left);
|
||||
break;
|
||||
case PointerUpdateKind.RightButtonPressed:
|
||||
HandleButtonDown(MouseButton.Right);
|
||||
break;
|
||||
case PointerUpdateKind.MiddleButtonPressed:
|
||||
HandleButtonDown(MouseButton.Middle);
|
||||
break;
|
||||
case PointerUpdateKind.XButton1Pressed:
|
||||
HandleButtonDown(MouseButton.Extended1);
|
||||
break;
|
||||
case PointerUpdateKind.XButton2Pressed:
|
||||
HandleButtonDown(MouseButton.Extended2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void HandlePointerReleased(Windows.UI.Input.PointerPoint point)
|
||||
{
|
||||
if (point.PointerDevice.PointerDeviceType == PointerDeviceType.Mouse)
|
||||
{
|
||||
switch (point.Properties.PointerUpdateKind)
|
||||
{
|
||||
case PointerUpdateKind.LeftButtonReleased:
|
||||
HandleButtonUp(MouseButton.Left);
|
||||
break;
|
||||
case PointerUpdateKind.RightButtonReleased:
|
||||
HandleButtonUp(MouseButton.Right);
|
||||
break;
|
||||
case PointerUpdateKind.MiddleButtonReleased:
|
||||
HandleButtonUp(MouseButton.Middle);
|
||||
break;
|
||||
case PointerUpdateKind.XButton1Released:
|
||||
HandleButtonUp(MouseButton.Extended1);
|
||||
break;
|
||||
case PointerUpdateKind.XButton2Released:
|
||||
HandleButtonUp(MouseButton.Extended2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче