diff --git a/.editorconfig b/.editorconfig index 9027fa7d6d..6759ec7130 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,6 @@ +######################################################## +# Xenko editor config + root = true [*] @@ -9,13 +12,159 @@ charset = utf-8 [*.ttinclude] insert_final_newline = false -# C# files -[*.cs] -indent_style = space -indent_size = 4 +################################## +# XAML Code Style Rules # +################################## -# XAML files [*.xaml] # enable this once we have merged most of our branches into master indent_style = space indent_size = 2 + +######################################################## +# Following config is taken from +# https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2019#example-editorconfig-file +# (to force default expected VS2019 settings) + +# Code files +[*.{cs,csx,vb,vbx}] +indent_style = space +indent_size = 4 + +############################### +# .NET Coding Conventions # +############################### + +[*.{cs,vb}] +# Organize usings +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false + +# this. preferences +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_event = false:silent + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +dotnet_style_readonly_field = true:suggestion + +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent + +############################### +# Naming Conventions # +############################### + +# Style Definitions +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# Use PascalCase for constant fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.applicable_accessibilities = * +dotnet_naming_symbols.constant_fields.required_modifiers = const + +############################### +# C# Code Style Rules # +############################### + +[*.cs] +# var preferences +csharp_style_var_for_built_in_types = true:silent +csharp_style_var_when_type_is_apparent = true:silent +csharp_style_var_elsewhere = true:silent + +# Expression-bodied members +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent + +# Pattern-matching preferences +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion + +# Null-checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion + +# Modifier preferences +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion + +# Expression-level preferences +csharp_prefer_braces = true:silent +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion + +############################### +# C# Formatting Rules # +############################### + +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_after_comma = true +csharp_space_after_dot = false + +# Wrapping preferences +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true + +################################## +# Visual Basic Code Style Rules # +################################## + +[*.vb] +# Modifier preferences +visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion diff --git a/.gitignore b/.gitignore index 32eaa513ce..fe72df4084 100644 --- a/.gitignore +++ b/.gitignore @@ -154,3 +154,8 @@ fastlane/report.xml fastlane/screenshots *.user project.lock.json +*.lock +*.bak +routerlog.txt +hooks +lfs diff --git a/README.md b/README.md index 4ed70b38e7..9187b5459a 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,125 @@ -![Xenko](https://xenko.com/images/external/xenko-logo-side.png) +![Focus Engine](https://i.imgur.com/OjANvN9.png) ======= -Welcome to the Xenko source code repository! +Welcome to the Focus Engine source code repository! -Xenko is an open-source C# game engine for realistic rendering and VR. +Focus is an open-source C# game engine for realistic rendering and VR based off of Xenko/Stride. You'll still see "Xenko" in many places. The engine is highly modular and aims at giving game makers more flexibility in their development. -Xenko comes with an editor that allows you create and manage the content of your games or applications in a visual and intuitive way. +Focus comes with an editor that allows you create and manage the content of your games or applications in a visual and intuitive way. -![Xenko Editor](https://xenko.com/images/external/script-editor.png) +![Focus Game Studio](https://doc.stride3d.net/latest/en/manual/get-started/media/game-editor-scene.jpg) -To learn more about Xenko, visit [xenko.com](https://xenko.com/). +To learn more about Stride3D, visit [stride3d.net](https://stride3d.net/). + +## Why this fork? + +My games require the engine to be developed at a faster pace than Stride. I'm in need of fixes, new features and better performance. These changes will not be supported by the core team, and the absolute most recent changes may not be fully stable. However, you may find them very helpful, and in some cases, essential to projects. + +## Any games made with this engine? + +Yes, and it is free for you to try! Works on all operating systems and supports VR in Windows: https://store.steampowered.com/app/1256380/FPS_Infinite/ + +Other paid games: + +8089: https://store.steampowered.com/app/1593280/8089_The_Next_Action_RPG/ + +Spermination: https://store.steampowered.com/app/2001910/Spermination_Cream_of_the_Crop/ + +PerformVR: https://store.steampowered.com/app/1868400/PerformVR/ + +## What is different? + +Most of Focus is similar to Stride and there shouldn't be any loss of functionality over the original. Changes are focused on fixes, performance improvements and new features. However, I do not maintain different languages, Android support or the Launcher. The following is a rough list of "major" changes, but might not accurately reflect the current state of differences (since both githubs are moving targets which are hopefully improving): + +* Virtual Reality & OpenXR: frame rate management, resolution detection, Vulkan support, and automatic UI interaction are some of the VR improvements you'll get "out of the box". Pretty much just need to enable OpenXR in your Graphics Compositor's Forward Renderer and you'll be good to go. Tracking hands is much easier, as you can simply select which hand to track right from GameStudio. Support for multiple forward renderers in VR, with post processing. See https://github.com/phr00t/FOVTester2 for a super simple example of how easy a VR project is. +* Vulkan: Focus primarily uses Vulkan, which has been significantly overhauled to provide more performance you'd expect from the newer API. Vulkan works on Linux too. Vulkan tries to work on Mac OSX via MoltenVK, but compatibility issues have arisen that are hard to troublesoot. Stride/Xenko doesn't work either on Mac OSX as of this writing. DirectX is deprecated and unsupported on this fork. +* BepuPhysics2 for faster Physics: Focus has an additional physics library integrated, which is much faster, has an easier API, multithreaded and pure C#. It isn't integrated with GameStudio though, like Bullet physics is. See https://github.com/phr00t/FocusEngine/tree/master/sources/engine/Xenko.Physics/Bepu. If you decide to still use Bullet, this fork can handle Bullet running in another thread with interpolation. +* API Ease: TransformComponents have nice shortcuts like WorldPosition and WorldRotation. There are also other very useful shortcuts, like Material.Clone to easily clone materials. +* Lots of bugfixes: Lots of issues, and even GameStudio crashes and project corruption, have been fixed/improved in this fork. Some specific examples is crashes with particle colors or rendering 3D text from multiple cameras. +* GlobalSoundManager: easily play all sound effects for your whole project from a single static class, which handles loading and pooling sound instances automatically (even asynchronously). If you use positional sounds, make sure you call UpdatePlayingSoundPositions every frame! See https://github.com/phr00t/FocusEngine/blob/master/sources/engine/Xenko.Engine/Engine/GlobalSoundManager.cs +* SimpleSaver: Simple system for storing organized data in a dictionary, then saving and loading that data from a file. It handles compression and has a static function for finding a good directory to save stuff to for your application. See https://github.com/phr00t/FocusEngine/blob/master/sources/core/Xenko.Core.Mathematics/SimpleSaver.cs +* CinematicAction: Simple system for performing cinematic actions on objects and calling functions at certain times. Can build a simple timeline for things to move, rotate and execute. See https://github.com/phr00t/FocusEngine/blob/master/sources/engine/Xenko.Engine/Cinematics/CinematicAnimation.cs +* EntityPool: Makes it really easy to reuse entities and prefabs. This can save lots of memory and processing, instead of recreating things that come and go (like enemies or projectiles). See https://github.com/phr00t/FocusEngine/blob/master/sources/engine/Xenko.Engine/Engine/EntityPool.cs +* UI improvements: View frustum is implemented in this fork, so UI elements outside of view won't be drawn for performance reasons. ScrollViewers can work with mouse wheels out of the box. Easily get UI elements to access in code from a Page using GatherUIDictionary. Easily make Lists and Pulldown selection boxes using GridList and PulldownList (not integrated with GameStudio yet, though). Overall UI performance is greatly improved, too! +* Particle System improvements: Colored particles work, which is pretty important! Also added EmitSpecificParticle to a ParticleEmitter, so you can emit individual particles at certain position, speeds and colors (like using EmitParams in Unity). +* Better UI Editor: Selecting things in the editor works more intuitively, like hidden things are skipped and smaller things are easier to click. Hold Shift to disable snapping etc. +* UI Text features: vertically align text or use \ tags to dynamically change text colors. Use \
tags to have multiline text set straight from GameStudio. Need text shadows, outlines or bevels? Precompile a font (right click it in the asset view) that has a Glyph Margin > 0, which will generate a PNG with room to edit in effects right into the glyphs. +* ModelBatcher: Easily make batched models using lots of individual models (think grass and rocks for your whole terrain batched into one draw call and entity). See https://github.com/phr00t/FocusEngine/blob/master/sources/engine/Xenko.Engine/Engine/ModelBatcher.cs -- if you have moving things that want to be batched, look into BatchedMeshDraw +* Level of detail system: in GameSettings -> Rendering, you can set a value for things to cull when they are really small on the screen. Separate value can be used for culling shadows, too. Individual models can have "Small Factor Adjustment" values that make them more important (or less important) to make them cull easier/harder. +* Able to set Entities (via the TransformComponent) as "static" so complex matrix calculations can be skipped for them every frame. If you have lots of objects that don't move in a scene, this can provide a significant CPU boost. +* Much more control over the depth buffer: objects, even transparent ones and UI components, provide options for how they interacts with the depth buffer. +* More Post Processing Effects: Virtual Reality Field-of-View reducing filter for motion sickness out of the box. +* Non-post processing based fog: GlobalFog which is drawn at the material-level to avoid problems with transparency, see https://github.com/phr00t/FocusEngine/blob/master/sources/engine/Xenko.Rendering/Rendering/Materials/GlobalFog.cs +* Easy setting game resolution: Game.SetDefaultSettings(width, height, fullscreen) and Game.OverrideDefaultSettings to set and save resolution of your game. +* Easy generating procedural meshes: StagedMeshDraw takes a list of verticies and indicies, no "buffer binding" or "GraphicsDevice" needed. Also will actually upload the mesh when it tries to get rendered automatically, saving time and resources if the mesh doesn't actually ever get viewed. +* Less likely to lose work: files are not actually deleted from GameStudio, just moved to the Recylce Bin. If you mess up a prefab or entity in a scene, or if you notice corruption in your project, select Help -> Restore Scene/Prefabs to return your scene and prefab files to the last time to opened your project. +* Performance: lots of tweaks have been made throughout the engine to maximize performance. This includes reducing locks and enumeration reduction, for example. GameStudio editor itself runs much smoother and can handle multiple tabs much better. +* Easy adding/removing entities from the scene: Just do myEntity.Scene = myScene (to add it) or myEntity.Scene = null (to remove it). +* Includes dfkeenan's toolkit designed for this fork (from https://github.com/dfkeenan/XenkoToolkit). May need to add the Toolkit Nuget package to use. +* Takes good things from many different Xenko/Stride forks, including the original branch when it gets updated. I don't get everything, as I focus on things that are more apparently beneficial to seasoned and commercial PC developers. I exclude tutorials, samples, non-PC platforms, launcher updates, internal naming conventions, building refactors etc. which I don't maintain. +* Probably lots of other stuff: haven't kept that great of track of improvements, I usually fix things as needed and keep moving forward! + +## OK, show me something neat! + +![Lots of Boxes](https://i.imgur.com/E9J0skw.png) + +This is 6700+ physical boxes being rendered @ 50fps, which may not be the fastest thing out there, but it is pretty good! It is using BepuPhysics + Vulkan + https://github.com/phr00t/FocusEngine/blob/master/sources/engine/Xenko.Engine/Engine/Batching/BatchedMeshDraw.cs to draw all these boxes with 1 material, 1 mesh & 1 draw call. BatchedMeshDraw allows custom UV offsets per copy, hence why you see some boxes with different textures. Neat! + +![Steam Deck Support](https://i.imgur.com/c5XmyGp.jpg) + +FPS Infinite, powered by Focus Engine, running on the Steam Deck! Should work out-of-the-box when publishing Linux executables. + +## What is worse in this fork? + +Android/mobile support, different languages, and Universal Windows Platform support. I also work very little with DirectX, which is maintained just for the editor. Some changes I make to improve Vulkan might cause a (hopefully minor) bug in the DirectX API, which will be of low priority to fix. GPU instancing isn't implemented on Vulkan yet (although you may find the ModelBatcher & BatchedMeshDraw covers this in most cases). + +Documentation is worse in this fork, as I don't have time to go back and properly document the new features I add. The list above isn't updated often enough to showcase the latest improvements. I try to comment new additions, but would require looking at the source to see them. Stride documentation is mostly still applicable, but there may be better ways to do things in this fork (VR for example). + +Community support doesn't exist for this fork. The community usually revolves around the original Stride. + +You can now export games and projects targeting .NET 6 & Visual Studio 2022 is now supported. However, GameStudio (the editor) is still running on .NET Framework 4.8 (not a big deal, in my humble opinion). + +Creating templates with this fork is semi broken (you'll get an error, but it still gets created). Just browse for it next time you open Focus. There is an issue for it on the issues tab. + +## Why don't you merge all these improvements back into Stride? + +The Stride team doesn't really want most of my work, or they don't think these improvements are necessary. I've made decisions without their input to save time, so taking my work now would take significant review and likely significant rewrites to adhere to their opinions and standards. I stand by my code and its quality (otherwise I wouldn't trust making commercial games with it), but the Stride team would rather do it their way (if and when they ever get to it). Sometimes, some improvements do make it into Stride in some form, like the Fog and Outline post processing filters. Recently, I kickstarted bringing OpenXR support into Stride (but not all of my VR improvements), and they seem to be getting it to work with DirectX. Fully merging would take much more work than us "spare time devs" have. If you want to use my improvements, I only can recommend using (and building off of) my fork. ## License -Xenko is covered by [MIT](LICENSE.md), unless stated otherwise (i.e. for some files that are copied from other projects). +Focus is covered by [MIT](LICENSE.md), unless stated otherwise (i.e. for some files that are copied from other projects). You can find the list of third party projects [here](THIRD%20PARTY.md). -Contributors need to sign the following [Contribution License Agreement](docs/ContributorLicenseAgreement.md). - ## Documentation Find explanations and information about Xenko: -* [Xenko Manual](https://doc.xenko.com/latest/manual/index.html) -* [API Reference](https://doc.xenko.com/latest/api/index.html) -* [Release Notes](https://doc.xenko.com/latest/ReleaseNotes/index.html) +* [Stride Manual](https://doc.stride3d.net/latest/en/manual/index.html) +* [API Reference](https://doc.stride3d.net/latest/api/index.html) ## Community Ask for help or report issues: -* [Chat with the community on Discord](https://discord.gg/f6aerfE) [![Join the chat at https://discord.gg/f6aerfE](https://img.shields.io/discord/500285081265635328.svg?style=flat&logo=discord&label=discord)](https://discord.gg/f6aerfE) -* [Discuss topics on our forums](http://forums.xenko.com/) -* [Report engine issues](https://github.com/xenko3d/xenko/issues) -* [Donate to support the project](https://www.patreon.com/xenko) +* [Chat with the community on Discord](https://discord.gg/k563cUH) +* [Report engine issues](https://github.com/phr00t/xenko/issues) -## Building from source +## Building and Using Focus Engine ### Prerequisites 1. [Git](https://git-scm.com/downloads) (recent version that includes LFS, or install [Git LFS](https://git-lfs.github.com/) separately). -2. [Visual Studio 2019](https://www.visualstudio.com/downloads/) with the following workloads: - * `.NET desktop development` with `.NET Framework 4.7.2 targeting pack` - * `Desktop development with C++` with `Windows 10 SDK (10.0.17763.0)` or later, and `VC++ 2017 version 15.9 v14.16 latest v141 tools` or later (both should be enabled by default) - * `.NET Core cross-platform development` - * Optional (to target UWP): `Universal Windows Platform development` with `Windows 10 SDK (10.0.17763.0)` - * Optional (to target iOS/Android): `Mobile development with .NET` and `Android NDK R13B+` individual component +2. [Visual Studio 2022](https://www.visualstudio.com/downloads/) (Tested working with v17.2 LTS, newer versions unknown) with the following workloads: + * `.NET desktop development` with `.NET Framework 4.8 targeting pack` + * `Desktop development with C++` with `Windows 10 SDK (latest)`, and `VC++ 2022 latest v143 tools` or later (both should be enabled by default) + * .NET Core 6 Runtime should automatically be supported and configured to develop for 3. [FBX SDK 2019.0 VS2015](https://www.autodesk.com/developer-network/platform-technologies/fbx-sdk-2019-0) -### Build Xenko - -1. Clone Xenko: `git clone https://github.com/xenko3d/xenko.git` -2. Open `\build\Xenko.sln` with Visual Studio 2017, and build. -3. Open `\samples\XenkoSamples.sln` and play with the samples. -4. Optionally, open and build `Xenko.Android.sln`, `Xenko.iOS.sln`, etc... - -### Contribution Guidelines - -Please check our [Contributing Guidelines](docs/CONTRIBUTING.md). - -### Build Status - -|Branch| **master** | -|:--:|:--:| -|Windows D3D11| -|Windows D3D12| -|Windows Vulkan| -|Windows OpenGL| -|Windows OpenGL ES| -|UWP| -|iOS| -|Android| -|Linux Vulkan| -|Linux OpenGL| -|Tests Windows Simple| -|Tests Windows D3D11| +### Build and Run Focus Engine Game Studio + +1. Clone Focus: `git clone https://github.com/phr00t/FocusEngine.git` +2. Run `\build\Xenko.PCPlatforms.bat`, which starts Visual Studio. +3. Select building for "Release" for the best performance and compatibility. +4. After building, find the GameStudio executable and run it (probably `\sources\editor\Xenko.GameStudio\bin\Release\net48`). +5. Some templates are outdated, especially the VR one... an empty game is your best bet. +6. Use Focus Engine's GameStudio alongside Visual Studio for building the project (you can open projects from GameStudio into Visual Studio with a toolbar icon at the top) +7. If using Bepu physics, make sure to add a reference to `BepuPhysics.dll` in `\deps\bepuphysics2` diff --git a/THIRD PARTY.md b/THIRD PARTY.md index e9dba9f6cb..5d76e6bd23 100644 --- a/THIRD PARTY.md +++ b/THIRD PARTY.md @@ -20,7 +20,7 @@ Xenko uses the following open-source products. * [SDL2](https://www.libsdl.org/) (zlib License) * [SharpDX](http://sharpdx.org/) (MIT License) * [SharpFont](https://github.com/Robmaister/SharpFont) (MIT License) -* [SharpVulkan](https://github.com/jwollen/SharpVulkan) (MIT License) +* [Vortice.Vulkan](https://github.com/amerkoleci/Vortice.Vulkan) (MIT License) * [SharpYaml](https://github.com/xoofx/SharpYaml) (MIT License) * [SlimMath](https://code.google.com/p/slimmath/) (MIT License) * [SocketsForPCL](https://github.com/rdavisau/sockets-for-pcl) (MIT License) diff --git a/build/.nuget/NuGet.exe b/build/.nuget/NuGet.exe index b5954e0c8a..e5f58c5838 100644 --- a/build/.nuget/NuGet.exe +++ b/build/.nuget/NuGet.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b461af6165cfed8af7e5d485f036669e74dff0596e6d6b5924abdf66f185da94 -size 5687080 +oid sha256:96a1dc5ad572716b2ab345a6830365cf0103661ec906b0e78fd04a064a7bb730 +size 5788552 diff --git a/build/Xenko.AllPlatforms.bat b/build/Xenko.AllPlatforms.bat index 706107de8f..addac562e2 100644 --- a/build/Xenko.AllPlatforms.bat +++ b/build/Xenko.AllPlatforms.bat @@ -1,2 +1,2 @@ -set XenkoPlatforms=Windows;UWP;Android;iOS;Linux +set XenkoPlatforms=Windows;Linux Xenko.sln diff --git a/build/Xenko.Android.PreSettings.Local.targets b/build/Xenko.Android.PreSettings.Local.targets deleted file mode 100644 index 857990b1de..0000000000 --- a/build/Xenko.Android.PreSettings.Local.targets +++ /dev/null @@ -1,8 +0,0 @@ - - - - Xenko - Windows;Android - - - diff --git a/build/Xenko.Android.TestApks.proj b/build/Xenko.Android.TestApks.proj deleted file mode 100644 index 4d5bee96c9..0000000000 --- a/build/Xenko.Android.TestApks.proj +++ /dev/null @@ -1,19 +0,0 @@ - - - $(MSBuildThisFileDirectory) - Xenko.Android - Android - Release - - - - - - - - - - - \ No newline at end of file diff --git a/build/Xenko.Android.sln b/build/Xenko.Android.sln deleted file mode 100644 index 811aca9b5a..0000000000 --- a/build/Xenko.Android.sln +++ /dev/null @@ -1,455 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.352 -MinimumVisualStudioVersion = 16.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "10-CoreRuntime", "10-CoreRuntime", "{2E93E2B5-4500-4E47-9B65-E705218AB578}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "20-XenkoRuntime", "20-XenkoRuntime", "{4C142567-C42B-40F5-B092-798882190209}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Private", "00-Targets.Private", "{97978864-95DD-43A6-9159-AA1C881BE99F}" - ProjectSection(SolutionItems) = preProject - ..\store.config = ..\store.config - ..\sources\targets\Xenko.Core.Android.CSharp.targets = ..\sources\targets\Xenko.Core.Android.CSharp.targets - ..\sources\targets\Xenko.Core.CoreCLR.Cpp.targets = ..\sources\targets\Xenko.Core.CoreCLR.Cpp.targets - ..\sources\targets\Xenko.Core.CoreCLR.CSharp.targets = ..\sources\targets\Xenko.Core.CoreCLR.CSharp.targets - ..\sources\targets\Xenko.Core.Cpp.targets = ..\sources\targets\Xenko.Core.Cpp.targets - ..\sources\targets\Xenko.Core.CSharp.targets = ..\sources\targets\Xenko.Core.CSharp.targets - ..\sources\targets\Xenko.Core.GlobalSettings.targets = ..\sources\targets\Xenko.Core.GlobalSettings.targets - ..\sources\targets\Xenko.Core.iOS.CSharp.targets = ..\sources\targets\Xenko.Core.iOS.CSharp.targets - ..\sources\targets\Xenko.Core.PostSettings.Dependencies.targets = ..\sources\targets\Xenko.Core.PostSettings.Dependencies.targets - ..\sources\targets\Xenko.Core.PostSettings.targets = ..\sources\targets\Xenko.Core.PostSettings.targets - ..\sources\targets\Xenko.Core.PreSettings.targets = ..\sources\targets\Xenko.Core.PreSettings.targets - ..\sources\targets\Xenko.Core.Sign.targets = ..\sources\targets\Xenko.Core.Sign.targets - ..\sources\targets\Xenko.Core.UWP.Cpp.targets = ..\sources\targets\Xenko.Core.UWP.Cpp.targets - ..\sources\targets\Xenko.Core.UWP.CSharp.targets = ..\sources\targets\Xenko.Core.UWP.CSharp.targets - ..\sources\targets\Xenko.GlobalSettings.targets = ..\sources\targets\Xenko.GlobalSettings.targets - ..\sources\native\Xenko.Native.targets = ..\sources\native\Xenko.Native.targets - ..\sources\targets\Xenko.PostSettings.References.targets = ..\sources\targets\Xenko.PostSettings.References.targets - ..\sources\targets\Xenko.PostSettings.targets = ..\sources\targets\Xenko.PostSettings.targets - ..\sources\targets\Xenko.PostSettings.User.targets = ..\sources\targets\Xenko.PostSettings.User.targets - ..\sources\targets\Xenko.PreSettings.targets = ..\sources\targets\Xenko.PreSettings.targets - ..\sources\targets\Xenko.PreSettings.UnitTests.targets = ..\sources\targets\Xenko.PreSettings.UnitTests.targets - ..\sources\targets\Xenko.PreSettings.User.targets = ..\sources\targets\Xenko.PreSettings.User.targets - ..\sources\targets\Xenko.UnitTests.DisableBuild.targets = ..\sources\targets\Xenko.UnitTests.DisableBuild.targets - ..\sources\targets\Xenko.UnitTests.targets = ..\sources\targets\Xenko.UnitTests.targets - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "80-Shaders", "80-Shaders", "{10D145AF-C8AE-428F-A80F-CA1B591D0DB2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Config", "00-Config", "{7662CECF-2A3D-4DBA-AB3D-77FD8536E7A3}" - ProjectSection(SolutionItems) = preProject - ..\sources\shared\SharedAssemblyInfo.cs = ..\sources\shared\SharedAssemblyInfo.cs - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xenko.Shared", "Xenko.Shared", "{1AC70118-C90F-4EC6-9D8B-C628BDF900F7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "21-XenkoRuntime.Tests", "21-XenkoRuntime.Tests", "{A7ED9F01-7D78-4381-90A6-D50E51C17250}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "11-CoreRuntime.Tests", "11-CoreRuntime.Tests", "{22ADD4CD-092E-4ADC-A21E-64CF42230152}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Build", "00-Targets.Build", "{0B81090E-4066-4723-A658-8AEDBEADE619}" - ProjectSection(SolutionItems) = preProject - Xenko.build = Xenko.build - Xenko.Core.GlobalSettings.Local.targets = Xenko.Core.GlobalSettings.Local.targets - Xenko.Core.PostSettings.Local.targets = Xenko.Core.PostSettings.Local.targets - Xenko.Core.PreSettings.Local.targets = Xenko.Core.PreSettings.Local.targets - Xenko.PreSettings.Local.targets = Xenko.PreSettings.Local.targets - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Engine", "..\sources\engine\Xenko.Engine\Xenko.Engine.csproj", "{C121A566-555E-42B9-9B0A-1696529A9088}" - ProjectSection(ProjectDependencies) = postProject - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F} = {F2D52EDB-BC17-4243-B06D-33CD20F87A7F} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics", "..\sources\engine\Xenko.Graphics\Xenko.Graphics.csproj", "{FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Engine.Tests.Android", "..\sources\engine\Xenko.Engine.Tests\Xenko.Engine.Tests.Android.csproj", "{A8F8D125-7A22-489F-99BC-9A02F545A17F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Input.Tests.Android", "..\sources\engine\Xenko.Input.Tests\Xenko.Input.Tests.Android.csproj", "{01700344-CF44-482C-BEBC-60213B0F844C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Tests.Android", "..\sources\core\Xenko.Core.Tests\Xenko.Core.Tests.Android.csproj", "{5AA408BA-E766-453E-B661-E3D7EC46E2A6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Shaders", "..\sources\shaders\Xenko.Core.Shaders\Xenko.Core.Shaders.csproj", "{F2D52EDB-BC17-4243-B06D-33CD20F87A7F}" - ProjectSection(ProjectDependencies) = postProject - {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {5210FB81-B807-49BB-AF0D-31FB6A83A572} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Irony", "..\sources\shaders\Irony\Irony.csproj", "{D81F5C91-D7DB-46E5-BC99-49488FB6814C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Games", "..\sources\engine\Xenko.Games\Xenko.Games.csproj", "{42780CBD-3FE7-48E3-BD5B-59945EA20137}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Audio.Tests.Android", "..\sources\engine\Xenko.Audio.Tests\Xenko.Audio.Tests.Android.csproj", "{7AF4B563-AAD3-42FF-B91E-84B9D34D904A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core", "..\sources\core\Xenko.Core\Xenko.Core.csproj", "{0E916AB7-5A6C-4820-8AB1-AA492FE66D68}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Mathematics", "..\sources\core\Xenko.Core.Mathematics\Xenko.Core.Mathematics.csproj", "{1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}" - ProjectSection(ProjectDependencies) = postProject - {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {5210FB81-B807-49BB-AF0D-31FB6A83A572} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Serialization", "..\sources\core\Xenko.Core.Serialization\Xenko.Core.Serialization.csproj", "{5210FB81-B807-49BB-AF0D-31FB6A83A572}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.MicroThreading", "..\sources\core\Xenko.Core.MicroThreading\Xenko.Core.MicroThreading.csproj", "{1320F627-EE43-4115-8E89-19D1753E51F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.IO", "..\sources\core\Xenko.Core.IO\Xenko.Core.IO.csproj", "{1DE01410-22C9-489B-9796-1ADDAB1F64E5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders.Parser", "..\sources\engine\Xenko.Shaders.Parser\Xenko.Shaders.Parser.csproj", "{14A47447-2A24-4ECD-B24D-6571499DCD4C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders", "..\sources\engine\Xenko.Shaders\Xenko.Shaders.csproj", "{273BDD15-7392-4078-91F0-AF23594A3D7B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Audio", "..\sources\engine\Xenko.Audio\Xenko.Audio.csproj", "{DE042125-C270-4D1D-9270-0759C167567A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko", "..\sources\engine\Xenko\Xenko.csproj", "{72390339-B2A1-4F61-A800-31ED0975B515}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders.Compiler", "..\sources\engine\Xenko.Shaders.Compiler\Xenko.Shaders.Compiler.csproj", "{E8B3553F-A79F-4E50-B75B-ACEE771C320C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Input", "..\sources\engine\Xenko.Input\Xenko.Input.csproj", "{84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.UI", "..\sources\engine\Xenko.UI\Xenko.UI.csproj", "{BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}" - ProjectSection(ProjectDependencies) = postProject - {C121A566-555E-42B9-9B0A-1696529A9088} = {C121A566-555E-42B9-9B0A-1696529A9088} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.UI.Tests.Android", "..\sources\engine\Xenko.UI.Tests\Xenko.UI.Tests.Android.csproj", "{E7B1B17F-D04B-4978-B504-A6BB3EE846C9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Regression", "..\sources\engine\Xenko.Graphics.Regression\Xenko.Graphics.Regression.csproj", "{D002FEB1-00A6-4AB1-A83F-1F253465E64D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Physics", "..\sources\engine\Xenko.Physics\Xenko.Physics.csproj", "{DD592516-B341-40FE-9100-1B0FA784A060}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.SpriteStudio.Runtime", "..\sources\engine\Xenko.SpriteStudio.Runtime\Xenko.SpriteStudio.Runtime.csproj", "{9BC63BEC-F305-451D-BB31-262938EA964D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.Android", "..\sources\engine\Xenko.Graphics.Tests\Xenko.Graphics.Tests.Android.csproj", "{9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.10_0.Android", "..\sources\engine\Xenko.Graphics.Tests.10_0\Xenko.Graphics.Tests.10_0.Android.csproj", "{570B0FF9-246F-4C6C-8384-F6BE1887A4A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.11_0.Android", "..\sources\engine\Xenko.Graphics.Tests.11_0\Xenko.Graphics.Tests.11_0.Android.csproj", "{7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Particles", "..\sources\engine\Xenko.Particles\Xenko.Particles.csproj", "{F32FDA80-B6DD-47A8-8681-437E2C0D3F31}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Games.Testing", "..\sources\engine\Xenko.Games.Testing\Xenko.Games.Testing.csproj", "{B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Native", "..\sources\engine\Xenko.Native\Xenko.Native.csproj", "{1DBBC150-F085-43EF-B41D-27C72D133770}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Particles.Tests.Android", "..\sources\engine\Xenko.Particles.Tests\Xenko.Particles.Tests.Android.csproj", "{33CC6216-3F30-4B5A-BB29-C5B47EFFA713}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Refactor", "..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.shproj", "{B33E576F-2279-4BFC-A438-D9B84343B56B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Physics.Tests.Android", "..\sources\engine\Xenko.Physics.Tests\Xenko.Physics.Tests.Android.csproj", "{4F0E7E04-F067-4CE8-B8C8-1105F319D123}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.VirtualReality", "..\sources\engine\Xenko.VirtualReality\Xenko.VirtualReality.csproj", "{53782603-3096-40C2-ABD3-F8F311BAE4BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Navigation", "..\sources\engine\Xenko.Navigation\Xenko.Navigation.csproj", "{FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Localization", "00-Localization", "{FC791F56-C1F1-4C41-A193-868D8197F8E2}" - ProjectSection(SolutionItems) = preProject - ..\sources\localization\Xenko.Assets.Presentation.pot = ..\sources\localization\Xenko.Assets.Presentation.pot - ..\sources\localization\Xenko.Core.Assets.Editor.pot = ..\sources\localization\Xenko.Core.Assets.Editor.pot - ..\sources\localization\Xenko.Core.Presentation.pot = ..\sources\localization\Xenko.Core.Presentation.pot - ..\sources\localization\Xenko.GameStudio.pot = ..\sources\localization\Xenko.GameStudio.pot - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ja", "ja", "{B4EABB0D-E495-405C-B7B1-E2A7A3711AF5}" - ProjectSection(SolutionItems) = preProject - ..\sources\localization\ja\Xenko.Assets.Presentation.ja.po = ..\sources\localization\ja\Xenko.Assets.Presentation.ja.po - ..\sources\localization\ja\Xenko.Core.Assets.Editor.ja.po = ..\sources\localization\ja\Xenko.Core.Assets.Editor.ja.po - ..\sources\localization\ja\Xenko.Core.Presentation.ja.po = ..\sources\localization\ja\Xenko.Core.Presentation.ja.po - ..\sources\localization\ja\Xenko.GameStudio.ja.po = ..\sources\localization\ja\Xenko.GameStudio.ja.po - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Video", "..\sources\engine\Xenko.Video\Xenko.Video.csproj", "{DA355C86-866F-4843-9B4D-63A173C750FB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fr", "fr", "{62E9A8E4-79AF-4081-84D5-FEC5A0B28598}" - ProjectSection(SolutionItems) = preProject - ..\sources\localization\fr\Xenko.Assets.Presentation.fr.po = ..\sources\localization\fr\Xenko.Assets.Presentation.fr.po - ..\sources\localization\fr\Xenko.Core.Assets.Editor.fr.po = ..\sources\localization\fr\Xenko.Core.Assets.Editor.fr.po - ..\sources\localization\fr\Xenko.Core.Presentation.fr.po = ..\sources\localization\fr\Xenko.Core.Presentation.fr.po - ..\sources\localization\fr\Xenko.GameStudio.fr.po = ..\sources\localization\fr\Xenko.GameStudio.fr.po - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Rendering", "..\sources\engine\Xenko.Rendering\Xenko.Rendering.csproj", "{AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}" -EndProject -Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{b33e576f-2279-4bfc-a438-d9b84343b56b}*SharedItemsImports = 13 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{c121a566-555e-42b9-9b0a-1696529a9088}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{e8b3553f-a79f-4e50-b75b-acee771c320c}*SharedItemsImports = 4 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{fb06c76a-6bb7-40be-9afa-fec13b045fb5}*SharedItemsImports = 4 - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Android = Debug|Android - Release|Android = Release|Android - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Android.ActiveCfg = Debug|Android - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Android.Build.0 = Debug|Android - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Android.Deploy.0 = Debug|Android - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Android.ActiveCfg = Release|Android - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Android.Build.0 = Release|Android - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Android.Deploy.0 = Release|Android - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Android.ActiveCfg = Debug|Android - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Android.Build.0 = Debug|Android - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Android.Deploy.0 = Debug|Android - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Android.ActiveCfg = Release|Android - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Android.Build.0 = Release|Android - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Android.Deploy.0 = Release|Android - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Android.ActiveCfg = Debug|Android - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Android.Build.0 = Debug|Android - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Android.Deploy.0 = Debug|Android - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Android.ActiveCfg = Release|Android - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Android.Build.0 = Release|Android - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Android.Deploy.0 = Release|Android - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Android.ActiveCfg = Debug|Android - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Android.Build.0 = Debug|Android - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Android.Deploy.0 = Debug|Android - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Android.ActiveCfg = Release|Android - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Android.Build.0 = Release|Android - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Android.Deploy.0 = Release|Android - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Android.ActiveCfg = Debug|Android - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Android.Build.0 = Debug|Android - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Android.Deploy.0 = Debug|Android - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Android.ActiveCfg = Debug|Android - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Android.Build.0 = Debug|Android - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Android.Deploy.0 = Debug|Android - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Android.ActiveCfg = Debug|Android - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Android.Build.0 = Debug|Android - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Android.Deploy.0 = Debug|Android - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Android.ActiveCfg = Release|Android - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Android.Build.0 = Release|Android - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Android.Deploy.0 = Release|Android - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Android.ActiveCfg = Debug|Android - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Android.Build.0 = Debug|Android - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Android.Deploy.0 = Debug|Android - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Android.ActiveCfg = Release|Android - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Android.Build.0 = Release|Android - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Android.Deploy.0 = Release|Android - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Android.ActiveCfg = Debug|Android - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Android.Build.0 = Debug|Android - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Android.Deploy.0 = Debug|Android - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Android.ActiveCfg = Release|Android - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Android.Build.0 = Release|Android - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Android.Deploy.0 = Release|Android - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|Android.ActiveCfg = Debug|Android - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|Android.Build.0 = Debug|Android - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|Android.Deploy.0 = Debug|Android - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|Android.ActiveCfg = Release|Android - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|Android.Build.0 = Release|Android - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|Android.Deploy.0 = Release|Android - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Android.ActiveCfg = Debug|Android - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Android.Build.0 = Debug|Android - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Android.Deploy.0 = Debug|Android - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Android.ActiveCfg = Release|Android - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Android.Build.0 = Release|Android - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Android.Deploy.0 = Release|Android - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Android.ActiveCfg = Debug|Android - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Android.Build.0 = Debug|Android - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Android.Deploy.0 = Debug|Android - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Android.ActiveCfg = Release|Android - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Android.Build.0 = Release|Android - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Android.Deploy.0 = Release|Android - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Android.ActiveCfg = Debug|Android - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Android.Build.0 = Debug|Android - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Android.Deploy.0 = Debug|Android - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Android.ActiveCfg = Release|Android - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Android.Build.0 = Release|Android - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Android.Deploy.0 = Release|Android - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Android.ActiveCfg = Debug|Android - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Android.Build.0 = Debug|Android - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Android.Deploy.0 = Debug|Android - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Android.ActiveCfg = Release|Android - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Android.Build.0 = Release|Android - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Android.Deploy.0 = Release|Android - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Android.ActiveCfg = Debug|Android - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Android.Build.0 = Debug|Android - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Android.Deploy.0 = Debug|Android - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Android.ActiveCfg = Release|Android - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Android.Build.0 = Release|Android - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Android.Deploy.0 = Release|Android - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Android.ActiveCfg = Debug|Android - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Android.Build.0 = Debug|Android - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Android.Deploy.0 = Debug|Android - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Android.ActiveCfg = Release|Android - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Android.Build.0 = Release|Android - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Android.Deploy.0 = Release|Android - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Android.ActiveCfg = Debug|Android - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Android.Build.0 = Debug|Android - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Android.Deploy.0 = Debug|Android - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Android.ActiveCfg = Release|Android - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Android.Build.0 = Release|Android - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Android.Deploy.0 = Release|Android - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Android.ActiveCfg = Debug|Android - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Android.Build.0 = Debug|Android - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Android.Deploy.0 = Debug|Android - {DE042125-C270-4D1D-9270-0759C167567A}.Release|Android.ActiveCfg = Release|Android - {DE042125-C270-4D1D-9270-0759C167567A}.Release|Android.Build.0 = Release|Android - {DE042125-C270-4D1D-9270-0759C167567A}.Release|Android.Deploy.0 = Release|Android - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Android.ActiveCfg = Debug|Android - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Android.Build.0 = Debug|Android - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Android.Deploy.0 = Debug|Android - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Android.ActiveCfg = Release|Android - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Android.Build.0 = Release|Android - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Android.Deploy.0 = Release|Android - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Android.ActiveCfg = Debug|Android - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Android.Build.0 = Debug|Android - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Android.Deploy.0 = Debug|Android - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Android.ActiveCfg = Release|Android - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Android.Build.0 = Release|Android - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Android.Deploy.0 = Release|Android - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Android.ActiveCfg = Debug|Android - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Android.Build.0 = Debug|Android - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Android.Deploy.0 = Debug|Android - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Android.ActiveCfg = Release|Android - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Android.Build.0 = Release|Android - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Android.Deploy.0 = Release|Android - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Android.ActiveCfg = Debug|Android - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Android.Build.0 = Debug|Android - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Android.Deploy.0 = Debug|Android - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Android.ActiveCfg = Release|Android - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Android.Build.0 = Release|Android - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Android.Deploy.0 = Release|Android - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Android.ActiveCfg = Debug|Android - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Android.Build.0 = Debug|Android - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Android.Deploy.0 = Debug|Android - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Android.ActiveCfg = Release|Android - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Android.Build.0 = Release|Android - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Android.Deploy.0 = Release|Android - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Android.ActiveCfg = Debug|Android - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Android.Build.0 = Debug|Android - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Android.Deploy.0 = Debug|Android - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Android.ActiveCfg = Release|Android - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Android.Build.0 = Release|Android - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Android.Deploy.0 = Release|Android - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Android.ActiveCfg = Debug|Android - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Android.Build.0 = Debug|Android - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Android.Deploy.0 = Debug|Android - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Android.ActiveCfg = Release|Android - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Android.Build.0 = Release|Android - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Android.Deploy.0 = Release|Android - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Android.ActiveCfg = Debug|Android - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Android.Build.0 = Debug|Android - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Android.Deploy.0 = Debug|Android - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Android.ActiveCfg = Release|Android - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Android.Build.0 = Release|Android - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Android.Deploy.0 = Release|Android - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Android.ActiveCfg = Debug|Android - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Android.Build.0 = Debug|Android - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Android.Deploy.0 = Debug|Android - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Android.ActiveCfg = Release|Android - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Android.Build.0 = Release|Android - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Android.Deploy.0 = Release|Android - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Android.ActiveCfg = Debug|Android - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Android.Build.0 = Debug|Android - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Android.Deploy.0 = Debug|Android - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Android.ActiveCfg = Release|Android - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Android.Build.0 = Release|Android - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Android.Deploy.0 = Release|Android - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Android.ActiveCfg = Debug|Android - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Android.Build.0 = Debug|Android - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Android.Deploy.0 = Debug|Android - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Android.ActiveCfg = Release|Android - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Android.Build.0 = Release|Android - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Android.Deploy.0 = Release|Android - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Android.ActiveCfg = Debug|Android - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Android.Build.0 = Debug|Android - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Android.Deploy.0 = Debug|Android - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Android.ActiveCfg = Release|Android - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Android.Build.0 = Release|Android - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Android.Deploy.0 = Release|Android - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Android.ActiveCfg = Debug|Android - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Android.Build.0 = Debug|Android - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Android.Deploy.0 = Debug|Android - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Android.ActiveCfg = Release|Android - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Android.Build.0 = Release|Android - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Android.Deploy.0 = Release|Android - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Android.ActiveCfg = Debug|Android - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Android.Build.0 = Debug|Android - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Android.Deploy.0 = Debug|Android - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Android.ActiveCfg = Release|Android - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Android.Build.0 = Release|Android - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Android.Deploy.0 = Release|Android - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Android.ActiveCfg = Debug|Android - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Android.Build.0 = Debug|Android - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Android.Deploy.0 = Debug|Android - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Android.ActiveCfg = Release|Android - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Android.Build.0 = Release|Android - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Android.Deploy.0 = Release|Android - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Android.ActiveCfg = Debug|Android - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Android.Build.0 = Debug|Android - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Android.Deploy.0 = Debug|Android - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Android.ActiveCfg = Release|Android - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Android.Build.0 = Release|Android - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Android.Deploy.0 = Release|Android - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Android.ActiveCfg = Debug|Android - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Android.Build.0 = Debug|Android - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Android.Deploy.0 = Debug|Android - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Android.ActiveCfg = Release|Android - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Android.Build.0 = Release|Android - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Android.Deploy.0 = Release|Android - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Android.ActiveCfg = Debug|Android - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Android.Build.0 = Debug|Android - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Android.Deploy.0 = Debug|Android - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Android.ActiveCfg = Release|Android - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Android.Build.0 = Release|Android - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Android.Deploy.0 = Release|Android - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Android.ActiveCfg = Debug|Android - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Android.Build.0 = Debug|Android - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Android.Deploy.0 = Debug|Android - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Android.ActiveCfg = Release|Android - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Android.Build.0 = Release|Android - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Android.Deploy.0 = Release|Android - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Android.ActiveCfg = Debug|Android - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Android.Build.0 = Debug|Android - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Android.Deploy.0 = Debug|Android - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Android.ActiveCfg = Release|Android - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Android.Build.0 = Release|Android - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Android.Deploy.0 = Release|Android - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {1AC70118-C90F-4EC6-9D8B-C628BDF900F7} = {4C142567-C42B-40F5-B092-798882190209} - {C121A566-555E-42B9-9B0A-1696529A9088} = {4C142567-C42B-40F5-B092-798882190209} - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5} = {4C142567-C42B-40F5-B092-798882190209} - {A8F8D125-7A22-489F-99BC-9A02F545A17F} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {01700344-CF44-482C-BEBC-60213B0F844C} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {5AA408BA-E766-453E-B661-E3D7EC46E2A6} = {22ADD4CD-092E-4ADC-A21E-64CF42230152} - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F} = {10D145AF-C8AE-428F-A80F-CA1B591D0DB2} - {D81F5C91-D7DB-46E5-BC99-49488FB6814C} = {10D145AF-C8AE-428F-A80F-CA1B591D0DB2} - {42780CBD-3FE7-48E3-BD5B-59945EA20137} = {4C142567-C42B-40F5-B092-798882190209} - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {1320F627-EE43-4115-8E89-19D1753E51F2} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {1DE01410-22C9-489B-9796-1ADDAB1F64E5} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {14A47447-2A24-4ECD-B24D-6571499DCD4C} = {4C142567-C42B-40F5-B092-798882190209} - {273BDD15-7392-4078-91F0-AF23594A3D7B} = {4C142567-C42B-40F5-B092-798882190209} - {DE042125-C270-4D1D-9270-0759C167567A} = {4C142567-C42B-40F5-B092-798882190209} - {72390339-B2A1-4F61-A800-31ED0975B515} = {4C142567-C42B-40F5-B092-798882190209} - {E8B3553F-A79F-4E50-B75B-ACEE771C320C} = {4C142567-C42B-40F5-B092-798882190209} - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E} = {4C142567-C42B-40F5-B092-798882190209} - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3} = {4C142567-C42B-40F5-B092-798882190209} - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {D002FEB1-00A6-4AB1-A83F-1F253465E64D} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {DD592516-B341-40FE-9100-1B0FA784A060} = {4C142567-C42B-40F5-B092-798882190209} - {9BC63BEC-F305-451D-BB31-262938EA964D} = {4C142567-C42B-40F5-B092-798882190209} - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31} = {4C142567-C42B-40F5-B092-798882190209} - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {1DBBC150-F085-43EF-B41D-27C72D133770} = {4C142567-C42B-40F5-B092-798882190209} - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {B33E576F-2279-4BFC-A438-D9B84343B56B} = {1AC70118-C90F-4EC6-9D8B-C628BDF900F7} - {4F0E7E04-F067-4CE8-B8C8-1105F319D123} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {53782603-3096-40C2-ABD3-F8F311BAE4BE} = {4C142567-C42B-40F5-B092-798882190209} - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088} = {4C142567-C42B-40F5-B092-798882190209} - {B4EABB0D-E495-405C-B7B1-E2A7A3711AF5} = {FC791F56-C1F1-4C41-A193-868D8197F8E2} - {DA355C86-866F-4843-9B4D-63A173C750FB} = {4C142567-C42B-40F5-B092-798882190209} - {62E9A8E4-79AF-4081-84D5-FEC5A0B28598} = {FC791F56-C1F1-4C41-A193-868D8197F8E2} - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4} = {4C142567-C42B-40F5-B092-798882190209} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {FF877973-604D-4EA7-B5F5-A129961F9EF2} - EndGlobalSection -EndGlobal diff --git a/build/Xenko.Android.sln.DotSettings b/build/Xenko.Android.sln.DotSettings deleted file mode 100644 index 99cf1f9c40..0000000000 --- a/build/Xenko.Android.sln.DotSettings +++ /dev/null @@ -1,5 +0,0 @@ - - ..\Xenko.sln.DotSettings - True - True - 1 diff --git a/build/Xenko.Core.PostSettings.Local.targets b/build/Xenko.Core.PostSettings.Local.targets index 8db195c498..b4f99820d9 100644 --- a/build/Xenko.Core.PostSettings.Local.targets +++ b/build/Xenko.Core.PostSettings.Local.targets @@ -3,7 +3,7 @@ true - $(XenkoPackageXenko)\deps\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed.exe + $(XenkoPackageXenko)\deps\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed2.exe $(XenkoPackageXenko)\deps\ $(XenkoDependenciesDir)\ diff --git a/build/Xenko.PCPlatforms.bat b/build/Xenko.PCPlatforms.bat new file mode 100644 index 0000000000..468de53b91 --- /dev/null +++ b/build/Xenko.PCPlatforms.bat @@ -0,0 +1,2 @@ +set XenkoPlatforms=Windows;Linux;macOS +Xenko.sln diff --git a/build/Xenko.PreSettings.Local.targets b/build/Xenko.PreSettings.Local.targets index d5d9bb36cc..975f32e9c5 100644 --- a/build/Xenko.PreSettings.Local.targets +++ b/build/Xenko.PreSettings.Local.targets @@ -3,7 +3,7 @@ Xenko Windows - Direct3D11 + Direct3D11;Vulkan diff --git a/build/Xenko.Runtime.sln b/build/Xenko.Runtime.sln index f0b161c629..90d27ce699 100644 --- a/build/Xenko.Runtime.sln +++ b/build/Xenko.Runtime.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.352 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32228.430 MinimumVisualStudioVersion = 16.0 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "10-CoreRuntime", "10-CoreRuntime", "{2E93E2B5-4500-4E47-9B65-E705218AB578}" EndProject @@ -9,7 +9,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Private", "00-Targets.Private", "{97978864-95DD-43A6-9159-AA1C881BE99F}" ProjectSection(SolutionItems) = preProject ..\store.config = ..\store.config - ..\sources\targets\Xenko.Core.Android.CSharp.targets = ..\sources\targets\Xenko.Core.Android.CSharp.targets ..\sources\targets\Xenko.Core.CoreCLR.Cpp.targets = ..\sources\targets\Xenko.Core.CoreCLR.Cpp.targets ..\sources\targets\Xenko.Core.CoreCLR.CSharp.targets = ..\sources\targets\Xenko.Core.CoreCLR.CSharp.targets ..\sources\targets\Xenko.Core.Cpp.targets = ..\sources\targets\Xenko.Core.Cpp.targets @@ -149,9 +148,9 @@ EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{b33e576f-2279-4bfc-a438-d9b84343b56b}*SharedItemsImports = 13 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{c121a566-555e-42b9-9b0a-1696529a9088}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{e8b3553f-a79f-4e50-b75b-acee771c320c}*SharedItemsImports = 4 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{fb06c76a-6bb7-40be-9afa-fec13b045fb5}*SharedItemsImports = 4 + ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{c121a566-555e-42b9-9b0a-1696529a9088}*SharedItemsImports = 5 + ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{e8b3553f-a79f-4e50-b75b-acee771c320c}*SharedItemsImports = 5 + ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{fb06c76a-6bb7-40be-9afa-fec13b045fb5}*SharedItemsImports = 5 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/build/Xenko.UWP.bat b/build/Xenko.UWP.bat deleted file mode 100644 index 24dac7b22a..0000000000 --- a/build/Xenko.UWP.bat +++ /dev/null @@ -1,2 +0,0 @@ -set XenkoPlatforms=Windows;UWP -Xenko.Runtime.sln diff --git a/build/Xenko.build b/build/Xenko.build index 3264f16f52..c303dcd9b1 100644 --- a/build/Xenko.build +++ b/build/Xenko.build @@ -11,12 +11,14 @@ Example of use: $(XenkoRoot)build\Xenko.Launcher Windows Configuration=Release;NoWarn=1591;DeployExtension=false;XenkoPlatforms=$([MSBuild]::Escape('$(XenkoPlatforms)'));XenkoGraphicsApiDependentBuildAll=$(XenkoGraphicsApiDependentBuildAll) + true $(BuildProperties);XenkoSign=$(XenkoSign) $(BuildProperties);XenkoOfficialBuild=$(XenkoOfficialBuild) $(MSBuildThisFileDirectory).nuget\NuGet.exe 2.4.1 https://api.nuget.org/v3/index.json $(MSBuildProgramFiles32)\Caphyon\Advanced Installer 15.5.1\bin\x86\advinst.exe + true @@ -94,9 +96,9 @@ Example of use: - $(BuildProperties);XenkoPublicApi=true;XenkoPackageBuild=true;XenkoSignTool=true + $(BuildProperties);XenkoPublicApi=true;XenkoPackageBuild=true - + @@ -106,7 +108,7 @@ Example of use: - + @@ -117,18 +119,17 @@ Example of use: - - + + - + + <_XenkoPackageTargetPrerequisitesInstaller Condition="'$(XenkoBuildPrerequisitesInstaller)' == 'true'">PrerequisitesInstaller + + - - - - - - + - + - + $(XenkoSolution).Runtime - + - + - + - + - + - + - + - + - + - + $(XenkoSolution).Runtime UWP @@ -202,17 +203,17 @@ Example of use: - + - + - + $(XenkoSolution).Runtime Linux @@ -221,7 +222,7 @@ Example of use: - + $(XenkoSolution).Runtime Linux @@ -230,7 +231,7 @@ Example of use: - + @@ -238,8 +239,8 @@ Example of use: - $(MSBuildThisFileDirectory)packages\xunit.runner.console.$(XunitRunnerConsoleVersion)\tools\net461\xunit.console.exe - $(MSBuildThisFileDirectory)packages\xunit.runner.console.$(XunitRunnerConsoleVersion)\tools\net461\xunit.console.x86.exe + $(MSBuildThisFileDirectory)packages\xunit.runner.console.$(XunitRunnerConsoleVersion)\tools\net48\xunit.console.exe + $(MSBuildThisFileDirectory)packages\xunit.runner.console.$(XunitRunnerConsoleVersion)\tools\net48\xunit.console.x86.exe @@ -251,7 +252,7 @@ Example of use: Simple;Game;VSPackage ;$(XenkoTestCategories); - + $(XenkoTestExtraTargets);SignAndroidPackage @@ -330,14 +331,14 @@ Example of use: $(XenkoSolution).Vulkan.sln - - + + $(XenkoSolution).Android.sln - - + + @@ -357,7 +358,7 @@ Example of use: $(XenkoSolution).sln - + @@ -472,12 +473,12 @@ Example of use: - + - + @@ -512,9 +513,9 @@ Example of use: - + - + diff --git a/build/Xenko.iOS.PreSettings.Local.targets b/build/Xenko.iOS.PreSettings.Local.targets deleted file mode 100644 index bcc531f223..0000000000 --- a/build/Xenko.iOS.PreSettings.Local.targets +++ /dev/null @@ -1,8 +0,0 @@ - - - - Xenko - Windows;iOS - - - diff --git a/build/Xenko.iOS.sln b/build/Xenko.iOS.sln deleted file mode 100644 index 36d11a95c7..0000000000 --- a/build/Xenko.iOS.sln +++ /dev/null @@ -1,680 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.352 -MinimumVisualStudioVersion = 16.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "10-CoreRuntime", "10-CoreRuntime", "{2E93E2B5-4500-4E47-9B65-E705218AB578}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "20-XenkoRuntime", "20-XenkoRuntime", "{4C142567-C42B-40F5-B092-798882190209}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Private", "00-Targets.Private", "{97978864-95DD-43A6-9159-AA1C881BE99F}" - ProjectSection(SolutionItems) = preProject - ..\store.config = ..\store.config - ..\sources\targets\Xenko.Core.Android.CSharp.targets = ..\sources\targets\Xenko.Core.Android.CSharp.targets - ..\sources\targets\Xenko.Core.CoreCLR.Cpp.targets = ..\sources\targets\Xenko.Core.CoreCLR.Cpp.targets - ..\sources\targets\Xenko.Core.CoreCLR.CSharp.targets = ..\sources\targets\Xenko.Core.CoreCLR.CSharp.targets - ..\sources\targets\Xenko.Core.Cpp.targets = ..\sources\targets\Xenko.Core.Cpp.targets - ..\sources\targets\Xenko.Core.CSharp.targets = ..\sources\targets\Xenko.Core.CSharp.targets - ..\sources\targets\Xenko.Core.GlobalSettings.targets = ..\sources\targets\Xenko.Core.GlobalSettings.targets - ..\sources\targets\Xenko.Core.iOS.CSharp.targets = ..\sources\targets\Xenko.Core.iOS.CSharp.targets - ..\sources\targets\Xenko.Core.PostSettings.Dependencies.targets = ..\sources\targets\Xenko.Core.PostSettings.Dependencies.targets - ..\sources\targets\Xenko.Core.PostSettings.targets = ..\sources\targets\Xenko.Core.PostSettings.targets - ..\sources\targets\Xenko.Core.PreSettings.targets = ..\sources\targets\Xenko.Core.PreSettings.targets - ..\sources\targets\Xenko.Core.Sign.targets = ..\sources\targets\Xenko.Core.Sign.targets - ..\sources\targets\Xenko.Core.UWP.Cpp.targets = ..\sources\targets\Xenko.Core.UWP.Cpp.targets - ..\sources\targets\Xenko.Core.UWP.CSharp.targets = ..\sources\targets\Xenko.Core.UWP.CSharp.targets - ..\sources\targets\Xenko.GlobalSettings.targets = ..\sources\targets\Xenko.GlobalSettings.targets - ..\sources\native\Xenko.Native.targets = ..\sources\native\Xenko.Native.targets - ..\sources\targets\Xenko.PostSettings.References.targets = ..\sources\targets\Xenko.PostSettings.References.targets - ..\sources\targets\Xenko.PostSettings.targets = ..\sources\targets\Xenko.PostSettings.targets - ..\sources\targets\Xenko.PostSettings.User.targets = ..\sources\targets\Xenko.PostSettings.User.targets - ..\sources\targets\Xenko.PreSettings.targets = ..\sources\targets\Xenko.PreSettings.targets - ..\sources\targets\Xenko.PreSettings.UnitTests.targets = ..\sources\targets\Xenko.PreSettings.UnitTests.targets - ..\sources\targets\Xenko.PreSettings.User.targets = ..\sources\targets\Xenko.PreSettings.User.targets - ..\sources\targets\Xenko.UnitTests.DisableBuild.targets = ..\sources\targets\Xenko.UnitTests.DisableBuild.targets - ..\sources\targets\Xenko.UnitTests.targets = ..\sources\targets\Xenko.UnitTests.targets - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "80-Shaders", "80-Shaders", "{10D145AF-C8AE-428F-A80F-CA1B591D0DB2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Config", "00-Config", "{7662CECF-2A3D-4DBA-AB3D-77FD8536E7A3}" - ProjectSection(SolutionItems) = preProject - ..\sources\shared\SharedAssemblyInfo.cs = ..\sources\shared\SharedAssemblyInfo.cs - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xenko.Shared", "Xenko.Shared", "{1AC70118-C90F-4EC6-9D8B-C628BDF900F7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "21-XenkoRuntime.Tests", "21-XenkoRuntime.Tests", "{A7ED9F01-7D78-4381-90A6-D50E51C17250}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "11-CoreRuntime.Tests", "11-CoreRuntime.Tests", "{22ADD4CD-092E-4ADC-A21E-64CF42230152}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Build", "00-Targets.Build", "{0B81090E-4066-4723-A658-8AEDBEADE619}" - ProjectSection(SolutionItems) = preProject - Xenko.build = Xenko.build - Xenko.Core.GlobalSettings.Local.targets = Xenko.Core.GlobalSettings.Local.targets - Xenko.Core.PostSettings.Local.targets = Xenko.Core.PostSettings.Local.targets - Xenko.Core.PreSettings.Local.targets = Xenko.Core.PreSettings.Local.targets - Xenko.PreSettings.Local.targets = Xenko.PreSettings.Local.targets - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Engine", "..\sources\engine\Xenko.Engine\Xenko.Engine.csproj", "{C121A566-555E-42B9-9B0A-1696529A9088}" - ProjectSection(ProjectDependencies) = postProject - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F} = {F2D52EDB-BC17-4243-B06D-33CD20F87A7F} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics", "..\sources\engine\Xenko.Graphics\Xenko.Graphics.csproj", "{FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Engine.Tests.iOS", "..\sources\engine\Xenko.Engine.Tests\Xenko.Engine.Tests.iOS.csproj", "{A8F8D125-7A22-489F-99BC-9A02F545A17F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Input.Tests.iOS", "..\sources\engine\Xenko.Input.Tests\Xenko.Input.Tests.iOS.csproj", "{01700344-CF44-482C-BEBC-60213B0F844C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Tests.iOS", "..\sources\core\Xenko.Core.Tests\Xenko.Core.Tests.iOS.csproj", "{5AA408BA-E766-453E-B661-E3D7EC46E2A6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Shaders", "..\sources\shaders\Xenko.Core.Shaders\Xenko.Core.Shaders.csproj", "{F2D52EDB-BC17-4243-B06D-33CD20F87A7F}" - ProjectSection(ProjectDependencies) = postProject - {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {5210FB81-B807-49BB-AF0D-31FB6A83A572} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Irony", "..\sources\shaders\Irony\Irony.csproj", "{D81F5C91-D7DB-46E5-BC99-49488FB6814C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Games", "..\sources\engine\Xenko.Games\Xenko.Games.csproj", "{42780CBD-3FE7-48E3-BD5B-59945EA20137}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Audio.Tests.iOS", "..\sources\engine\Xenko.Audio.Tests\Xenko.Audio.Tests.iOS.csproj", "{7AF4B563-AAD3-42FF-B91E-84B9D34D904A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core", "..\sources\core\Xenko.Core\Xenko.Core.csproj", "{0E916AB7-5A6C-4820-8AB1-AA492FE66D68}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Mathematics", "..\sources\core\Xenko.Core.Mathematics\Xenko.Core.Mathematics.csproj", "{1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}" - ProjectSection(ProjectDependencies) = postProject - {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {5210FB81-B807-49BB-AF0D-31FB6A83A572} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Serialization", "..\sources\core\Xenko.Core.Serialization\Xenko.Core.Serialization.csproj", "{5210FB81-B807-49BB-AF0D-31FB6A83A572}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.MicroThreading", "..\sources\core\Xenko.Core.MicroThreading\Xenko.Core.MicroThreading.csproj", "{1320F627-EE43-4115-8E89-19D1753E51F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.IO", "..\sources\core\Xenko.Core.IO\Xenko.Core.IO.csproj", "{1DE01410-22C9-489B-9796-1ADDAB1F64E5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders.Parser", "..\sources\engine\Xenko.Shaders.Parser\Xenko.Shaders.Parser.csproj", "{14A47447-2A24-4ECD-B24D-6571499DCD4C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders", "..\sources\engine\Xenko.Shaders\Xenko.Shaders.csproj", "{273BDD15-7392-4078-91F0-AF23594A3D7B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Audio", "..\sources\engine\Xenko.Audio\Xenko.Audio.csproj", "{DE042125-C270-4D1D-9270-0759C167567A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko", "..\sources\engine\Xenko\Xenko.csproj", "{72390339-B2A1-4F61-A800-31ED0975B515}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders.Compiler", "..\sources\engine\Xenko.Shaders.Compiler\Xenko.Shaders.Compiler.csproj", "{E8B3553F-A79F-4E50-B75B-ACEE771C320C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Input", "..\sources\engine\Xenko.Input\Xenko.Input.csproj", "{84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.UI", "..\sources\engine\Xenko.UI\Xenko.UI.csproj", "{BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}" - ProjectSection(ProjectDependencies) = postProject - {C121A566-555E-42B9-9B0A-1696529A9088} = {C121A566-555E-42B9-9B0A-1696529A9088} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.UI.Tests.iOS", "..\sources\engine\Xenko.UI.Tests\Xenko.UI.Tests.iOS.csproj", "{E7B1B17F-D04B-4978-B504-A6BB3EE846C9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Regression", "..\sources\engine\Xenko.Graphics.Regression\Xenko.Graphics.Regression.csproj", "{D002FEB1-00A6-4AB1-A83F-1F253465E64D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Physics", "..\sources\engine\Xenko.Physics\Xenko.Physics.csproj", "{DD592516-B341-40FE-9100-1B0FA784A060}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.SpriteStudio.Runtime", "..\sources\engine\Xenko.SpriteStudio.Runtime\Xenko.SpriteStudio.Runtime.csproj", "{9BC63BEC-F305-451D-BB31-262938EA964D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.iOS", "..\sources\engine\Xenko.Graphics.Tests\Xenko.Graphics.Tests.iOS.csproj", "{9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.10_0.iOS", "..\sources\engine\Xenko.Graphics.Tests.10_0\Xenko.Graphics.Tests.10_0.iOS.csproj", "{570B0FF9-246F-4C6C-8384-F6BE1887A4A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.11_0.iOS", "..\sources\engine\Xenko.Graphics.Tests.11_0\Xenko.Graphics.Tests.11_0.iOS.csproj", "{7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Particles", "..\sources\engine\Xenko.Particles\Xenko.Particles.csproj", "{F32FDA80-B6DD-47A8-8681-437E2C0D3F31}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Games.Testing", "..\sources\engine\Xenko.Games.Testing\Xenko.Games.Testing.csproj", "{B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Native", "..\sources\engine\Xenko.Native\Xenko.Native.csproj", "{1DBBC150-F085-43EF-B41D-27C72D133770}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Particles.Tests.iOS", "..\sources\engine\Xenko.Particles.Tests\Xenko.Particles.Tests.iOS.csproj", "{33CC6216-3F30-4B5A-BB29-C5B47EFFA713}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Refactor", "..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.shproj", "{B33E576F-2279-4BFC-A438-D9B84343B56B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Physics.Tests.iOS", "..\sources\engine\Xenko.Physics.Tests\Xenko.Physics.Tests.iOS.csproj", "{4F0E7E04-F067-4CE8-B8C8-1105F319D123}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.VirtualReality", "..\sources\engine\Xenko.VirtualReality\Xenko.VirtualReality.csproj", "{53782603-3096-40C2-ABD3-F8F311BAE4BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Navigation", "..\sources\engine\Xenko.Navigation\Xenko.Navigation.csproj", "{FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Localization", "00-Localization", "{FC791F56-C1F1-4C41-A193-868D8197F8E2}" - ProjectSection(SolutionItems) = preProject - ..\sources\localization\Xenko.Assets.Presentation.pot = ..\sources\localization\Xenko.Assets.Presentation.pot - ..\sources\localization\Xenko.Core.Assets.Editor.pot = ..\sources\localization\Xenko.Core.Assets.Editor.pot - ..\sources\localization\Xenko.Core.Presentation.pot = ..\sources\localization\Xenko.Core.Presentation.pot - ..\sources\localization\Xenko.GameStudio.pot = ..\sources\localization\Xenko.GameStudio.pot - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ja", "ja", "{B4EABB0D-E495-405C-B7B1-E2A7A3711AF5}" - ProjectSection(SolutionItems) = preProject - ..\sources\localization\ja\Xenko.Assets.Presentation.ja.po = ..\sources\localization\ja\Xenko.Assets.Presentation.ja.po - ..\sources\localization\ja\Xenko.Core.Assets.Editor.ja.po = ..\sources\localization\ja\Xenko.Core.Assets.Editor.ja.po - ..\sources\localization\ja\Xenko.Core.Presentation.ja.po = ..\sources\localization\ja\Xenko.Core.Presentation.ja.po - ..\sources\localization\ja\Xenko.GameStudio.ja.po = ..\sources\localization\ja\Xenko.GameStudio.ja.po - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Video", "..\sources\engine\Xenko.Video\Xenko.Video.csproj", "{DA355C86-866F-4843-9B4D-63A173C750FB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fr", "fr", "{62E9A8E4-79AF-4081-84D5-FEC5A0B28598}" - ProjectSection(SolutionItems) = preProject - ..\sources\localization\fr\Xenko.Assets.Presentation.fr.po = ..\sources\localization\fr\Xenko.Assets.Presentation.fr.po - ..\sources\localization\fr\Xenko.Core.Assets.Editor.fr.po = ..\sources\localization\fr\Xenko.Core.Assets.Editor.fr.po - ..\sources\localization\fr\Xenko.Core.Presentation.fr.po = ..\sources\localization\fr\Xenko.Core.Presentation.fr.po - ..\sources\localization\fr\Xenko.GameStudio.fr.po = ..\sources\localization\fr\Xenko.GameStudio.fr.po - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Rendering", "..\sources\engine\Xenko.Rendering\Xenko.Rendering.csproj", "{AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}" -EndProject -Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{b33e576f-2279-4bfc-a438-d9b84343b56b}*SharedItemsImports = 13 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{c121a566-555e-42b9-9b0a-1696529a9088}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{e8b3553f-a79f-4e50-b75b-acee771c320c}*SharedItemsImports = 4 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{fb06c76a-6bb7-40be-9afa-fec13b045fb5}*SharedItemsImports = 4 - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|iPhone = Debug|iPhone - Debug|iPhoneSimulator = Debug|iPhoneSimulator - Release|iPhone = Release|iPhone - Release|iPhoneSimulator = Release|iPhoneSimulator - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|iPhone.ActiveCfg = Debug|iPhone - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|iPhone.Build.0 = Debug|iPhone - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|iPhone.Deploy.0 = Debug|iPhone - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|iPhone.ActiveCfg = Release|iPhone - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|iPhone.Build.0 = Release|iPhone - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|iPhone.Deploy.0 = Release|iPhone - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|iPhone.ActiveCfg = Debug|iPhone - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|iPhone.Build.0 = Debug|iPhone - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|iPhone.Deploy.0 = Debug|iPhone - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|iPhone.ActiveCfg = Release|iPhone - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|iPhone.Build.0 = Release|iPhone - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|iPhone.Deploy.0 = Release|iPhone - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|iPhone.ActiveCfg = Debug|iPhone - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|iPhone.Build.0 = Debug|iPhone - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|iPhone.Deploy.0 = Debug|iPhone - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|iPhone.ActiveCfg = Release|iPhone - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|iPhone.Build.0 = Release|iPhone - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|iPhone.Deploy.0 = Release|iPhone - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|iPhone.ActiveCfg = Debug|iPhone - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|iPhone.Build.0 = Debug|iPhone - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|iPhone.Deploy.0 = Debug|iPhone - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|iPhone.ActiveCfg = Release|iPhone - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|iPhone.Build.0 = Release|iPhone - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|iPhone.Deploy.0 = Release|iPhone - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|iPhone.ActiveCfg = Debug|iPhone - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|iPhone.Build.0 = Debug|iPhone - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|iPhone.Deploy.0 = Debug|iPhone - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|iPhone.ActiveCfg = Debug|iPhone - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|iPhone.Build.0 = Debug|iPhone - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|iPhone.Deploy.0 = Debug|iPhone - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|iPhone.ActiveCfg = Debug|iPhone - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|iPhone.Build.0 = Debug|iPhone - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|iPhone.Deploy.0 = Debug|iPhone - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|iPhone.ActiveCfg = Release|iPhone - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|iPhone.Build.0 = Release|iPhone - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|iPhone.Deploy.0 = Release|iPhone - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|iPhone.ActiveCfg = Debug|iPhone - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|iPhone.Build.0 = Debug|iPhone - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|iPhone.Deploy.0 = Debug|iPhone - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|iPhone.ActiveCfg = Release|iPhone - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|iPhone.Build.0 = Release|iPhone - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|iPhone.Deploy.0 = Release|iPhone - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|iPhone.ActiveCfg = Debug|iPhone - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|iPhone.Build.0 = Debug|iPhone - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|iPhone.Deploy.0 = Debug|iPhone - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|iPhone.ActiveCfg = Release|iPhone - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|iPhone.Build.0 = Release|iPhone - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|iPhone.Deploy.0 = Release|iPhone - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|iPhone.ActiveCfg = Debug|iPhone - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|iPhone.Build.0 = Debug|iPhone - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|iPhone.Deploy.0 = Debug|iPhone - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|iPhone.ActiveCfg = Release|iPhone - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|iPhone.Build.0 = Release|iPhone - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|iPhone.Deploy.0 = Release|iPhone - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|iPhone.ActiveCfg = Debug|iPhone - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|iPhone.Build.0 = Debug|iPhone - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|iPhone.Deploy.0 = Debug|iPhone - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|iPhone.ActiveCfg = Release|iPhone - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|iPhone.Build.0 = Release|iPhone - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|iPhone.Deploy.0 = Release|iPhone - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|iPhone.ActiveCfg = Debug|iPhone - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|iPhone.Build.0 = Debug|iPhone - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|iPhone.Deploy.0 = Debug|iPhone - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|iPhone.ActiveCfg = Release|iPhone - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|iPhone.Build.0 = Release|iPhone - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|iPhone.Deploy.0 = Release|iPhone - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|iPhone.ActiveCfg = Debug|iPhone - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|iPhone.Build.0 = Debug|iPhone - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|iPhone.Deploy.0 = Debug|iPhone - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|iPhone.ActiveCfg = Release|iPhone - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|iPhone.Build.0 = Release|iPhone - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|iPhone.Deploy.0 = Release|iPhone - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|iPhone.ActiveCfg = Debug|iPhone - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|iPhone.Build.0 = Debug|iPhone - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|iPhone.Deploy.0 = Debug|iPhone - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|iPhone.ActiveCfg = Release|iPhone - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|iPhone.Build.0 = Release|iPhone - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|iPhone.Deploy.0 = Release|iPhone - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|iPhone.ActiveCfg = Debug|iPhone - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|iPhone.Build.0 = Debug|iPhone - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|iPhone.Deploy.0 = Debug|iPhone - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|iPhone.ActiveCfg = Release|iPhone - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|iPhone.Build.0 = Release|iPhone - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|iPhone.Deploy.0 = Release|iPhone - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|iPhone.ActiveCfg = Debug|iPhone - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|iPhone.Build.0 = Debug|iPhone - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|iPhone.Deploy.0 = Debug|iPhone - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|iPhone.ActiveCfg = Release|iPhone - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|iPhone.Build.0 = Release|iPhone - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|iPhone.Deploy.0 = Release|iPhone - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|iPhone.ActiveCfg = Debug|iPhone - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|iPhone.Build.0 = Debug|iPhone - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|iPhone.Deploy.0 = Debug|iPhone - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|iPhone.ActiveCfg = Release|iPhone - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|iPhone.Build.0 = Release|iPhone - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|iPhone.Deploy.0 = Release|iPhone - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|iPhone.ActiveCfg = Debug|iPhone - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|iPhone.Build.0 = Debug|iPhone - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|iPhone.Deploy.0 = Debug|iPhone - {DE042125-C270-4D1D-9270-0759C167567A}.Release|iPhone.ActiveCfg = Release|iPhone - {DE042125-C270-4D1D-9270-0759C167567A}.Release|iPhone.Build.0 = Release|iPhone - {DE042125-C270-4D1D-9270-0759C167567A}.Release|iPhone.Deploy.0 = Release|iPhone - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {DE042125-C270-4D1D-9270-0759C167567A}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {DE042125-C270-4D1D-9270-0759C167567A}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {DE042125-C270-4D1D-9270-0759C167567A}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|iPhone.ActiveCfg = Debug|iPhone - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|iPhone.Build.0 = Debug|iPhone - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|iPhone.Deploy.0 = Debug|iPhone - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|iPhone.ActiveCfg = Release|iPhone - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|iPhone.Build.0 = Release|iPhone - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|iPhone.Deploy.0 = Release|iPhone - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|iPhone.ActiveCfg = Debug|iPhone - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|iPhone.Build.0 = Debug|iPhone - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|iPhone.Deploy.0 = Debug|iPhone - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|iPhone.ActiveCfg = Release|iPhone - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|iPhone.Build.0 = Release|iPhone - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|iPhone.Deploy.0 = Release|iPhone - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|iPhone.ActiveCfg = Debug|iPhone - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|iPhone.Build.0 = Debug|iPhone - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|iPhone.Deploy.0 = Debug|iPhone - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|iPhone.ActiveCfg = Release|iPhone - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|iPhone.Build.0 = Release|iPhone - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|iPhone.Deploy.0 = Release|iPhone - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|iPhone.ActiveCfg = Debug|iPhone - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|iPhone.Build.0 = Debug|iPhone - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|iPhone.Deploy.0 = Debug|iPhone - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|iPhone.ActiveCfg = Release|iPhone - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|iPhone.Build.0 = Release|iPhone - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|iPhone.Deploy.0 = Release|iPhone - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|iPhone.ActiveCfg = Debug|iPhone - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|iPhone.Build.0 = Debug|iPhone - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|iPhone.Deploy.0 = Debug|iPhone - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|iPhone.ActiveCfg = Release|iPhone - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|iPhone.Build.0 = Release|iPhone - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|iPhone.Deploy.0 = Release|iPhone - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|iPhone.ActiveCfg = Debug|iPhone - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|iPhone.Build.0 = Debug|iPhone - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|iPhone.Deploy.0 = Debug|iPhone - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|iPhone.ActiveCfg = Release|iPhone - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|iPhone.Build.0 = Release|iPhone - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|iPhone.Deploy.0 = Release|iPhone - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|iPhone.ActiveCfg = Debug|iPhone - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|iPhone.Build.0 = Debug|iPhone - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|iPhone.Deploy.0 = Debug|iPhone - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|iPhone.ActiveCfg = Release|iPhone - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|iPhone.Build.0 = Release|iPhone - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|iPhone.Deploy.0 = Release|iPhone - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|iPhone.ActiveCfg = Debug|iPhone - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|iPhone.Build.0 = Debug|iPhone - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|iPhone.Deploy.0 = Debug|iPhone - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|iPhone.ActiveCfg = Release|iPhone - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|iPhone.Build.0 = Release|iPhone - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|iPhone.Deploy.0 = Release|iPhone - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|iPhone.ActiveCfg = Debug|iPhone - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|iPhone.Build.0 = Debug|iPhone - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|iPhone.Deploy.0 = Debug|iPhone - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|iPhone.ActiveCfg = Release|iPhone - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|iPhone.Build.0 = Release|iPhone - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|iPhone.Deploy.0 = Release|iPhone - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|iPhone.ActiveCfg = Debug|iPhone - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|iPhone.Build.0 = Debug|iPhone - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|iPhone.Deploy.0 = Debug|iPhone - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|iPhone.ActiveCfg = Release|iPhone - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|iPhone.Build.0 = Release|iPhone - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|iPhone.Deploy.0 = Release|iPhone - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|iPhone.ActiveCfg = Debug|iPhone - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|iPhone.Build.0 = Debug|iPhone - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|iPhone.Deploy.0 = Debug|iPhone - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|iPhone.ActiveCfg = Release|iPhone - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|iPhone.Build.0 = Release|iPhone - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|iPhone.Deploy.0 = Release|iPhone - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|iPhone.ActiveCfg = Debug|iPhone - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|iPhone.Build.0 = Debug|iPhone - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|iPhone.Deploy.0 = Debug|iPhone - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|iPhone.ActiveCfg = Release|iPhone - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|iPhone.Build.0 = Release|iPhone - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|iPhone.Deploy.0 = Release|iPhone - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|iPhone.ActiveCfg = Debug|iPhone - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|iPhone.Build.0 = Debug|iPhone - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|iPhone.Deploy.0 = Debug|iPhone - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|iPhone.ActiveCfg = Release|iPhone - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|iPhone.Build.0 = Release|iPhone - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|iPhone.Deploy.0 = Release|iPhone - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|iPhone.ActiveCfg = Debug|iPhone - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|iPhone.Build.0 = Debug|iPhone - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|iPhone.Deploy.0 = Debug|iPhone - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|iPhone.ActiveCfg = Release|iPhone - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|iPhone.Build.0 = Release|iPhone - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|iPhone.Deploy.0 = Release|iPhone - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|iPhone.ActiveCfg = Debug|iPhone - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|iPhone.Build.0 = Debug|iPhone - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|iPhone.Deploy.0 = Debug|iPhone - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|iPhone.ActiveCfg = Release|iPhone - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|iPhone.Build.0 = Release|iPhone - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|iPhone.Deploy.0 = Release|iPhone - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|iPhone.ActiveCfg = Debug|iPhone - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|iPhone.Build.0 = Debug|iPhone - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|iPhone.Deploy.0 = Debug|iPhone - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|iPhone.ActiveCfg = Release|iPhone - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|iPhone.Build.0 = Release|iPhone - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|iPhone.Deploy.0 = Release|iPhone - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|iPhone.ActiveCfg = Debug|iPhone - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|iPhone.Build.0 = Debug|iPhone - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|iPhone.Deploy.0 = Debug|iPhone - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|iPhone.ActiveCfg = Release|iPhone - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|iPhone.Build.0 = Release|iPhone - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|iPhone.Deploy.0 = Release|iPhone - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|iPhone.ActiveCfg = Debug|iPhone - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|iPhone.Build.0 = Debug|iPhone - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|iPhone.Deploy.0 = Debug|iPhone - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|iPhone.ActiveCfg = Release|iPhone - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|iPhone.Build.0 = Release|iPhone - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|iPhone.Deploy.0 = Release|iPhone - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|iPhone.ActiveCfg = Debug|iPhone - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|iPhone.Build.0 = Debug|iPhone - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|iPhone.Deploy.0 = Debug|iPhone - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|iPhone.ActiveCfg = Release|iPhone - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|iPhone.Build.0 = Release|iPhone - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|iPhone.Deploy.0 = Release|iPhone - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|iPhone.ActiveCfg = Debug|iPhone - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|iPhone.Build.0 = Debug|iPhone - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|iPhone.Deploy.0 = Debug|iPhone - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|iPhone.ActiveCfg = Release|iPhone - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|iPhone.Build.0 = Release|iPhone - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|iPhone.Deploy.0 = Release|iPhone - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {1AC70118-C90F-4EC6-9D8B-C628BDF900F7} = {4C142567-C42B-40F5-B092-798882190209} - {C121A566-555E-42B9-9B0A-1696529A9088} = {4C142567-C42B-40F5-B092-798882190209} - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5} = {4C142567-C42B-40F5-B092-798882190209} - {A8F8D125-7A22-489F-99BC-9A02F545A17F} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {01700344-CF44-482C-BEBC-60213B0F844C} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {5AA408BA-E766-453E-B661-E3D7EC46E2A6} = {22ADD4CD-092E-4ADC-A21E-64CF42230152} - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F} = {10D145AF-C8AE-428F-A80F-CA1B591D0DB2} - {D81F5C91-D7DB-46E5-BC99-49488FB6814C} = {10D145AF-C8AE-428F-A80F-CA1B591D0DB2} - {42780CBD-3FE7-48E3-BD5B-59945EA20137} = {4C142567-C42B-40F5-B092-798882190209} - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {1320F627-EE43-4115-8E89-19D1753E51F2} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {1DE01410-22C9-489B-9796-1ADDAB1F64E5} = {2E93E2B5-4500-4E47-9B65-E705218AB578} - {14A47447-2A24-4ECD-B24D-6571499DCD4C} = {4C142567-C42B-40F5-B092-798882190209} - {273BDD15-7392-4078-91F0-AF23594A3D7B} = {4C142567-C42B-40F5-B092-798882190209} - {DE042125-C270-4D1D-9270-0759C167567A} = {4C142567-C42B-40F5-B092-798882190209} - {72390339-B2A1-4F61-A800-31ED0975B515} = {4C142567-C42B-40F5-B092-798882190209} - {E8B3553F-A79F-4E50-B75B-ACEE771C320C} = {4C142567-C42B-40F5-B092-798882190209} - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E} = {4C142567-C42B-40F5-B092-798882190209} - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3} = {4C142567-C42B-40F5-B092-798882190209} - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {D002FEB1-00A6-4AB1-A83F-1F253465E64D} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {DD592516-B341-40FE-9100-1B0FA784A060} = {4C142567-C42B-40F5-B092-798882190209} - {9BC63BEC-F305-451D-BB31-262938EA964D} = {4C142567-C42B-40F5-B092-798882190209} - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31} = {4C142567-C42B-40F5-B092-798882190209} - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {1DBBC150-F085-43EF-B41D-27C72D133770} = {4C142567-C42B-40F5-B092-798882190209} - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {B33E576F-2279-4BFC-A438-D9B84343B56B} = {1AC70118-C90F-4EC6-9D8B-C628BDF900F7} - {4F0E7E04-F067-4CE8-B8C8-1105F319D123} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {53782603-3096-40C2-ABD3-F8F311BAE4BE} = {4C142567-C42B-40F5-B092-798882190209} - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088} = {4C142567-C42B-40F5-B092-798882190209} - {B4EABB0D-E495-405C-B7B1-E2A7A3711AF5} = {FC791F56-C1F1-4C41-A193-868D8197F8E2} - {DA355C86-866F-4843-9B4D-63A173C750FB} = {4C142567-C42B-40F5-B092-798882190209} - {62E9A8E4-79AF-4081-84D5-FEC5A0B28598} = {FC791F56-C1F1-4C41-A193-868D8197F8E2} - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4} = {4C142567-C42B-40F5-B092-798882190209} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {FF877973-604D-4EA7-B5F5-A129961F9EF2} - EndGlobalSection -EndGlobal diff --git a/build/Xenko.iOS.sln.DotSettings b/build/Xenko.iOS.sln.DotSettings deleted file mode 100644 index ab1b9eb5cd..0000000000 --- a/build/Xenko.iOS.sln.DotSettings +++ /dev/null @@ -1,5 +0,0 @@ - - ..\Xenko.sln.DotSettings - True - True - 1 diff --git a/build/Xenko.sln b/build/Xenko.sln index 5e0799e1a5..dd12a591a8 100644 --- a/build/Xenko.sln +++ b/build/Xenko.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.352 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32228.430 MinimumVisualStudioVersion = 16.0 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "90-Tools", "90-Tools", "{1AE1AC60-5D2F-4CA7-AE20-888F44551185}" EndProject @@ -38,16 +38,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Private", "00-Ta EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "80-Shaders", "80-Shaders", "{10D145AF-C8AE-428F-A80F-CA1B591D0DB2}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3D-Exporters", "3D-Exporters", "{47FFA9CA-781D-427E-9A41-365D789DD4B1}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "50-Presentation", "50-Presentation", "{75A820AB-0F21-40F2-9448-5D7F495B97A0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Internals", "Internals", "{860946E4-CC77-4FDA-A4FD-3DB2A502A696}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "40-Assets", "40-Assets", "{A2A4342E-024B-4063-B10C-1DA96CA3046D}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "91-VisualStudio", "91-VisualStudio", "{E4508D15-6503-4A29-ADC4-27B3A5E99545}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60-Editor", "60-Editor", "{5D2D3BE8-9910-45CA-8E45-95660DA4C563}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3D-Importers", "3D-Importers", "{6F473FA6-4F8B-4FBA-AE33-EE5AF997D50C}" @@ -61,16 +57,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Config", "00-Config", "{ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xenko.Shared", "Xenko.Shared", "{1AC70118-C90F-4EC6-9D8B-C628BDF900F7}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "21-XenkoRuntime.Tests", "21-XenkoRuntime.Tests", "{A7ED9F01-7D78-4381-90A6-D50E51C17250}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "11-CoreRuntime.Tests", "11-CoreRuntime.Tests", "{22ADD4CD-092E-4ADC-A21E-64CF42230152}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "41-Assets.Tests", "41-Assets.Tests", "{9D5D9861-AE68-429C-8B21-2263F9DA07A1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "61-Editor.Tests", "61-Editor.Tests", "{F5F744B5-803E-4180-B82A-8B1F0BCD6579}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "51-Presentation.Tests", "51-Presentation.Tests", "{52AE329E-B588-40D0-A578-8D0DB1BD83E5}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "70-XenkoAssets", "70-XenkoAssets", "{F765035E-F4F4-4CFA-BA02-755DC677AA97}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Build", "00-Targets.Build", "{0B81090E-4066-4723-A658-8AEDBEADE619}" @@ -84,14 +70,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00-Targets.Build", "00-Targ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "30-CoreDesign", "30-CoreDesign", "{25F10A0B-7259-404C-86BE-FD2363C92F72}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "31-CoreDesign.Tests", "31-CoreDesign.Tests", "{B175D318-B4D0-49EA-9AEF-A54ACA2F03DC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "71-XenkoAssets.Tests", "71-XenkoAssets.Tests", "{A47B451D-3162-410F-BAF7-C650C4B7A4B0}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.GameStudio", "..\sources\editor\Xenko.GameStudio\Xenko.GameStudio.csproj", "{2FCA2D8B-B10F-4DCA-9847-4221F74BA586}" ProjectSection(ProjectDependencies) = postProject {BD176B28-49CD-4FAD-A430-CDBCF1C2E514} = {BD176B28-49CD-4FAD-A430-CDBCF1C2E514} - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531} = {E25E7778-0B2F-4A0B-BCD6-1DE95320B531} {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF} = {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF} {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} EndProjectSection @@ -106,18 +87,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics", "..\source {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A} = {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Engine.Tests.Windows", "..\sources\engine\Xenko.Engine.Tests\Xenko.Engine.Tests.Windows.csproj", "{A8F8D125-7A22-489F-99BC-9A02F545A17F}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Input.Tests.Windows", "..\sources\engine\Xenko.Input.Tests\Xenko.Input.Tests.Windows.csproj", "{01700344-CF44-482C-BEBC-60213B0F844C}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Tests", "..\sources\core\Xenko.Core.Tests\Xenko.Core.Tests.csproj", "{5AA408BA-E766-453E-B661-E3D7EC46E2A6}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Xenko.Importer.FBX", "..\sources\tools\Xenko.Importer.FBX\Xenko.Importer.FBX.vcxproj", "{0467D515-FD66-4B8A-A128-CB642C2ED03F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Shaders", "..\sources\shaders\Xenko.Core.Shaders\Xenko.Core.Shaders.csproj", "{F2D52EDB-BC17-4243-B06D-33CD20F87A7F}" @@ -130,35 +99,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Presentation", " {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {5210FB81-B807-49BB-AF0D-31FB6A83A572} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Presentation.Tests", "..\sources\presentation\Xenko.Core.Presentation.Tests\Xenko.Core.Presentation.Tests.csproj", "{C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Xenko.Importer.Assimp", "..\sources\tools\Xenko.Importer.Assimp\Xenko.Importer.Assimp.vcxproj", "{C2306552-6C42-464C-8981-32FEF4F9458D}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Irony", "..\sources\shaders\Irony\Irony.csproj", "{D81F5C91-D7DB-46E5-BC99-49488FB6814C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Games", "..\sources\engine\Xenko.Games\Xenko.Games.csproj", "{42780CBD-3FE7-48E3-BD5B-59945EA20137}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.VisualStudio.Package", "..\sources\tools\Xenko.VisualStudio.Package\Xenko.VisualStudio.Package.csproj", "{0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.TextureConverter", "..\sources\tools\Xenko.TextureConverter\Xenko.TextureConverter.csproj", "{7F7BFF79-C400-435F-B359-56A2EF8956E0}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.TextureConverter.Tests", "..\sources\tests\tools\Xenko.TextureConverter.Tests\Xenko.TextureConverter.Tests.csproj", "{C485CE61-3006-4C99-ACB3-A737F5CEBAE7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.ProjectGenerator", "..\sources\tools\Xenko.ProjectGenerator\Xenko.ProjectGenerator.csproj", "{4B299721-18EA-4B6D-AFD5-2D6E188B97BD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Audio.Tests.Windows", "..\sources\engine\Xenko.Audio.Tests\Xenko.Audio.Tests.Windows.csproj", "{7AF4B563-AAD3-42FF-B91E-84B9D34D904A}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Assimp", "..\sources\tools\Xenko.Assimp\Xenko.Assimp.csproj", "{F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.BuildEngine.Tests", "..\sources\buildengine\Xenko.Core.BuildEngine.Tests\Xenko.Core.BuildEngine.Tests.csproj", "{09F32307-595A-4CBB-BF7C-F055DA1F70EE}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.BuildEngine.Common", "..\sources\buildengine\Xenko.Core.BuildEngine.Common\Xenko.Core.BuildEngine.Common.csproj", "{7732CB84-A39A-4ADF-B740-FD32A352FA8A}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Xenko.Assimp.Translation", "..\sources\tools\Xenko.Assimp.Translation\Xenko.Assimp.Translation.vcxproj", "{FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core", "..\sources\core\Xenko.Core\Xenko.Core.csproj", "{0E916AB7-5A6C-4820-8AB1-AA492FE66D68}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Mathematics", "..\sources\core\Xenko.Core.Mathematics\Xenko.Core.Mathematics.csproj", "{1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}" @@ -186,17 +140,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko", "..\sources\engine\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders.Compiler", "..\sources\engine\Xenko.Shaders.Compiler\Xenko.Shaders.Compiler.csproj", "{E8B3553F-A79F-4E50-B75B-ACEE771C320C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Shaders.Tests.Windows", "..\sources\engine\Xenko.Shaders.Tests\Xenko.Shaders.Tests.Windows.csproj", "{1BE90177-FE4D-4519-839E-7EB7D78AC973}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Input", "..\sources\engine\Xenko.Input\Xenko.Input.csproj", "{84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Assets", "..\sources\assets\Xenko.Core.Assets\Xenko.Core.Assets.csproj", "{1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Assets.Tests", "..\sources\assets\Xenko.Core.Assets.Tests\Xenko.Core.Assets.Tests.csproj", "{3E7B5D96-CF71-41EE-8CF0-70D090873390}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Assets", "..\sources\engine\Xenko.Assets\Xenko.Assets.csproj", "{39AE9C77-E94B-404F-8768-B6261B3C1E0E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Assets.Editor", "..\sources\editor\Xenko.Core.Assets.Editor\Xenko.Core.Assets.Editor.csproj", "{5863574D-7A55-49BC-8E65-BABB74D8E66E}" @@ -208,41 +155,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Assets.CompilerA EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.FixProjectReferences", "..\sources\tools\Xenko.FixProjectReferences\Xenko.FixProjectReferences.csproj", "{7DBC5A0B-76F5-4D9E-9798-540DA214099C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Assets.Tests", "..\sources\engine\Xenko.Assets.Tests\Xenko.Assets.Tests.csproj", "{117BF9F8-D2D9-4D32-9702-251C3E038090}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Assets.Models", "..\sources\engine\Xenko.Assets.Models\Xenko.Assets.Models.csproj", "{C904D2C6-5A15-4E0B-8432-33967E1735AA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Quantum.Tests", "..\sources\presentation\Xenko.Core.Quantum.Tests\Xenko.Core.Quantum.Tests.csproj", "{49AAA22D-D1C8-4E0F-82E8-F462D5442463}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.UI", "..\sources\engine\Xenko.UI\Xenko.UI.csproj", "{BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}" ProjectSection(ProjectDependencies) = postProject {C121A566-555E-42B9-9B0A-1696529A9088} = {C121A566-555E-42B9-9B0A-1696529A9088} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.UI.Tests.Windows", "..\sources\engine\Xenko.UI.Tests\Xenko.UI.Tests.Windows.csproj", "{E7B1B17F-D04B-4978-B504-A6BB3EE846C9}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Editor", "..\sources\editor\Xenko.Editor\Xenko.Editor.csproj", "{16E02D45-5530-4617-97DC-BC3BDF77DE2C}" ProjectSection(ProjectDependencies) = postProject {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD} = {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.GameStudio.Tests", "..\sources\editor\Xenko.GameStudio.Tests\Xenko.GameStudio.Tests.csproj", "{0EA748AF-E1DC-4788-BA50-8BABD56F220C}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Design", "..\sources\core\Xenko.Core.Design\Xenko.Core.Design.csproj", "{66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Regression", "..\sources\engine\Xenko.Graphics.Regression\Xenko.Graphics.Regression.csproj", "{D002FEB1-00A6-4AB1-A83F-1F253465E64D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Xenko.Importer.Common", "..\sources\tools\Xenko.Importer.Common\Xenko.Importer.Common.vcxproj", "{43A6E62E-1B1C-4630-ABB8-C3F716004645}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.StorageTool", "..\sources\tools\Xenko.StorageTool\Xenko.StorageTool.csproj", "{942A5B1D-2B3D-4B30-98DE-336CE93F4F12}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.ProjectTemplating", "..\sources\tools\Xenko.Core.ProjectTemplating\Xenko.Core.ProjectTemplating.csproj", "{2E2382F7-9576-49F0-AE43-93AFD7DB2368}" @@ -252,14 +178,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Assets.Presentation", {EFD2472E-B0E1-442A-9057-BBEA2517064B} = {EFD2472E-B0E1-442A-9057-BBEA2517064B} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.ProjectTemplating.Tests", "..\sources\tools\Xenko.Core.ProjectTemplating.Tests\Xenko.Core.ProjectTemplating.Tests.csproj", "{862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.TestRunner", "..\sources\tools\Xenko.TestRunner\Xenko.TestRunner.csproj", "{A5DC820B-9554-45B6-9677-6A2F902E7787}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Design.Tests", "..\sources\core\Xenko.Core.Design.Tests\Xenko.Core.Design.Tests.csproj", "{4D13D69B-C8E8-4675-8198-1BE2785FFB6D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.VisualStudio.Commands", "..\sources\tools\Xenko.VisualStudio.Commands\Xenko.VisualStudio.Commands.csproj", "{E136B568-3E3F-498F-A8B4-2877B7768560}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Physics", "..\sources\engine\Xenko.Physics\Xenko.Physics.csproj", "{DD592516-B341-40FE-9100-1B0FA784A060}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Presentation.Dialogs", "..\sources\presentation\Xenko.Core.Presentation.Dialogs\Xenko.Core.Presentation.Dialogs.csproj", "{4FAC003A-2532-42F3-AED7-A296D1A1615E}" @@ -268,10 +186,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.RenderDocPlu EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Debugger", "..\sources\engine\Xenko.Debugger\Xenko.Debugger.csproj", "{73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.ConnectionRouter", "..\sources\tools\Xenko.ConnectionRouter\Xenko.ConnectionRouter.csproj", "{77E2FCC0-4CA6-436C-BE6F-9418CB807D45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.EffectCompilerServer", "..\sources\tools\Xenko.EffectCompilerServer\Xenko.EffectCompilerServer.csproj", "{E25E7778-0B2F-4A0B-BCD6-1DE95320B531}" -EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.PrivacyPolicy", "..\sources\editor\Xenko.PrivacyPolicy\Xenko.PrivacyPolicy.shproj", "{950BADD0-AD5A-4F58-87EC-4ADAECBEA89B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.ExecServer", "..\sources\tools\Xenko.ExecServer\Xenko.ExecServer.csproj", "{5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}" @@ -284,39 +198,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.SpriteStudio.Runtime" EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Core.MostRecentlyUsedFiles", "..\sources\editor\Xenko.Core.MostRecentlyUsedFiles\Xenko.Core.MostRecentlyUsedFiles.shproj", "{9AC6D791-811E-4D6A-B08E-93F0093EF268}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.Windows", "..\sources\engine\Xenko.Graphics.Tests\Xenko.Graphics.Tests.Windows.csproj", "{9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.10_0.Windows", "..\sources\engine\Xenko.Graphics.Tests.10_0\Xenko.Graphics.Tests.10_0.Windows.csproj", "{570B0FF9-246F-4C6C-8384-F6BE1887A4A9}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Graphics.Tests.11_0.Windows", "..\sources\engine\Xenko.Graphics.Tests.11_0\Xenko.Graphics.Tests.11_0.Windows.csproj", "{7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.SamplesTestServer", "..\sources\tools\Xenko.SamplesTestServer\Xenko.SamplesTestServer.csproj", "{75D71310-ECF7-4592-9E35-3FE540040982}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Particles", "..\sources\engine\Xenko.Particles\Xenko.Particles.csproj", "{F32FDA80-B6DD-47A8-8681-437E2C0D3F31}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Games.Testing", "..\sources\engine\Xenko.Games.Testing\Xenko.Games.Testing.csproj", "{B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Native", "..\sources\engine\Xenko.Native\Xenko.Native.csproj", "{1DBBC150-F085-43EF-B41D-27C72D133770}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Assets.Tests2", "..\sources\engine\Xenko.Assets.Tests2\Xenko.Assets.Tests2.csproj", "{370ADF53-DFFA-461E-B72A-1302C0A0DE00}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Particles.Tests.Windows", "..\sources\engine\Xenko.Particles.Tests\Xenko.Particles.Tests.Windows.csproj", "{33CC6216-3F30-4B5A-BB29-C5B47EFFA713}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Refactor", "..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.shproj", "{B33E576F-2279-4BFC-A438-D9B84343B56B}" EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Core.ShellHelper", "..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.shproj", "{3A3CB33C-64D9-4948-86C1-0D86320D23C3}" @@ -325,55 +210,22 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Packages", "..\s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Presentation.Graph", "..\sources\presentation\Xenko.Core.Presentation.Graph\Xenko.Core.Presentation.Graph.csproj", "{EFD2472E-B0E1-442A-9057-BBEA2517064B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Assets.Editor.Tests", "..\sources\editor\Xenko.Core.Assets.Editor.Tests\Xenko.Core.Assets.Editor.Tests.csproj", "{25F98E38-0249-45BC-B2ED-7899297B9CF6}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Yaml", "..\sources\core\Xenko.Core.Yaml\Xenko.Core.Yaml.csproj", "{BF32DE1B-6276-4341-B212-F8862ADBBA7A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Yaml.Tests", "..\sources\core\Xenko.Core.Yaml.Tests\Xenko.Core.Yaml.Tests.csproj", "{16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Reflection", "..\sources\core\Xenko.Core.Reflection\Xenko.Core.Reflection.csproj", "{0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Physics.Tests.Windows", "..\sources\engine\Xenko.Physics.Tests\Xenko.Physics.Tests.Windows.csproj", "{4F0E7E04-F067-4CE8-B8C8-1105F319D123}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Assets.Quantum", "..\sources\assets\Xenko.Core.Assets.Quantum\Xenko.Core.Assets.Quantum.csproj", "{1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Assets.Quantum.Tests", "..\sources\assets\Xenko.Core.Assets.Quantum.Tests\Xenko.Core.Assets.Quantum.Tests.csproj", "{A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.VirtualReality", "..\sources\engine\Xenko.VirtualReality\Xenko.VirtualReality.csproj", "{53782603-3096-40C2-ABD3-F8F311BAE4BE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Presentation.Quantum.Tests", "..\sources\presentation\Xenko.Core.Presentation.Quantum.Tests\Xenko.Core.Presentation.Quantum.Tests.csproj", "{E8C458AE-7B42-4DCE-B326-7F3A9065EA19}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Code.Tests", "..\sources\tools\Xenko.Code.Tests\Xenko.Code.Tests.csproj", "{3C855DB2-EEA3-415C-A0A8-C834DEC40531}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Core.VisualStudio", "..\sources\tools\Xenko.Core.VisualStudio\Xenko.Core.VisualStudio.shproj", "{991E796A-D1D1-48B8-B9AA-95C2744FE112}" -EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Core.Assets.Yaml", "..\sources\assets\Xenko.Core.Assets.Yaml\Xenko.Core.Assets.Yaml.shproj", "{FB9ED2C4-94A0-4004-A498-3F29A9D5BB5D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Navigation", "..\sources\engine\Xenko.Navigation\Xenko.Navigation.csproj", "{FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Navigation.Tests.Windows", "..\sources\engine\Xenko.Navigation.Tests\Xenko.Navigation.Tests.Windows.csproj", "{1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}" - ProjectSection(ProjectDependencies) = postProject - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Mathematics.Tests", "..\sources\core\Xenko.Core.Mathematics.Tests\Xenko.Core.Mathematics.Tests.csproj", "{A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.PackageInstall", "..\sources\tools\Xenko.PackageInstall\Xenko.PackageInstall.csproj", "{BD176B28-49CD-4FAD-A430-CDBCF1C2E514}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Tasks", "..\sources\core\Xenko.Core.Tasks\Xenko.Core.Tasks.csproj", "{7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.VisualStudio.PackageInstall", "..\sources\tools\Xenko.VisualStudio.PackageInstall\Xenko.VisualStudio.PackageInstall.csproj", "{AF6049CC-E60E-4174-9AB6-9AA282DE3A31}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.VisualStudio.Package.Tests", "..\sources\tools\Xenko.VisualStudio.Package.Tests\Xenko.VisualStudio.Package.Tests.csproj", "{5BFE4386-3C42-4118-96C8-4B68441F1661}" - ProjectSection(ProjectDependencies) = postProject - {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A} = {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A} - {E136B568-3E3F-498F-A8B4-2877B7768560} = {E136B568-3E3F-498F-A8B4-2877B7768560} - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6} = {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6} - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Translation", "..\sources\core\Xenko.Core.Translation\Xenko.Core.Translation.csproj", "{6A7B231E-36AA-4647-8C1A-FB1540ABC813}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Core.Translation.Presentation", "..\sources\presentation\Xenko.Core.Translation.Presentation\Xenko.Core.Translation.Presentation.csproj", "{B686C194-D71D-4FF0-8B4F-F53AFBCD962F}" @@ -402,12 +254,6 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.Editor.CrashReport", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "72-XenkoSamples", "72-XenkoSamples", "{75608B5C-1C03-4B38-810E-14EED5165E59}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Samples.Tests", "..\samples\Tests\Xenko.Samples.Tests.csproj", "{2FC40214-A4AA-45DC-9C93-72ED800C40B0}" - ProjectSection(ProjectDependencies) = postProject - {75D71310-ECF7-4592-9E35-3FE540040982} = {75D71310-ECF7-4592-9E35-3FE540040982} - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} - EndProjectSection -EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xenko.NuGetResolver", "..\sources\shared\Xenko.NuGetResolver\Xenko.NuGetResolver.shproj", "{00B72ED7-00E9-47F7-868D-8162027CD068}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Samples.Templates", "..\sources\editor\Xenko.Samples.Templates\Xenko.Samples.Templates.csproj", "{040F754C-17F4-4B5F-B974-93F1E39D107F}" @@ -425,1160 +271,555 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fr", "fr", "{62E9A8E4-79AF- EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Rendering", "..\sources\engine\Xenko.Rendering\Xenko.Rendering.csproj", "{AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Voxels", "..\sources\engine\Xenko.Voxels\Xenko.Voxels.csproj", "{66BE41FC-FC52-48D0-9C04-BCE8CC393020}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Toolkit", "..\sources\tools\Xenko.Toolkit\Xenko.Toolkit.csproj", "{42F46D75-ED70-46B4-8B0F-BAB923E3AC59}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Importer.Common", "..\sources\tools\Xenko.Importer.Common\Xenko.Importer.Common.csproj", "{43A8197B-874F-4CE2-9D56-518A23547C96}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xenko.Importer.Assimp", "..\sources\tools\Xenko.Importer.Assimp\Xenko.Importer.Assimp.csproj", "{092984EF-90A1-46D2-8AEE-DE24744E6B2D}" +EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\sources\shared\Xenko.NuGetResolver\Xenko.NuGetResolver.projitems*{00b72ed7-00e9-47f7-868d-8162027cd068}*SharedItemsImports = 13 - ..\sources\assets\Xenko.Core.Assets.Yaml\Xenko.Core.Assets.Yaml.projitems*{0bd41add-2704-4a77-a9ab-15460a2abdc6}*SharedItemsImports = 4 - ..\sources\assets\Xenko.Core.Assets.Yaml\Xenko.Core.Assets.Yaml.projitems*{1e54a9a2-4439-4444-ae57-6d2ed3c0dc47}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{1e54a9a2-4439-4444-ae57-6d2ed3c0dc47}*SharedItemsImports = 4 - ..\sources\editor\Xenko.Editor.CrashReport\Xenko.Editor.CrashReport.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 4 - ..\sources\editor\Xenko.PrivacyPolicy\Xenko.PrivacyPolicy.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 4 - ..\sources\tools\Xenko.Core.VisualStudio\Xenko.Core.VisualStudio.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 4 - ..\sources\assets\Xenko.Core.Archive\Xenko.Core.Archive.projitems*{39ae9c77-e94b-404f-8768-b6261b3c1e0e}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{39ae9c77-e94b-404f-8768-b6261b3c1e0e}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{3a3cb33c-64d9-4948-86c1-0d86320d23c3}*SharedItemsImports = 13 - ..\sources\tools\Xenko.Core.VisualStudio\Xenko.Core.VisualStudio.projitems*{50d1a3bb-4b41-4ef5-8d2f-3618a3b6c698}*SharedItemsImports = 4 - ..\sources\editor\Xenko.Core.MostRecentlyUsedFiles\Xenko.Core.MostRecentlyUsedFiles.projitems*{5863574d-7a55-49bc-8e65-babb74d8e66e}*SharedItemsImports = 4 - ..\sources\tools\Xenko.Core.VisualStudio\Xenko.Core.VisualStudio.projitems*{5bfe4386-3c42-4118-96c8-4b68441f1661}*SharedItemsImports = 4 - ..\sources\tools\Xenko.Core.VisualStudio\Xenko.Core.VisualStudio.projitems*{5e241be1-ffb6-49f2-98b4-7869ba7d9f5a}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{75d71310-ecf7-4592-9e35-3fe540040982}*SharedItemsImports = 4 - ..\sources\tools\Xenko.Core.VisualStudio\Xenko.Core.VisualStudio.projitems*{7732cb84-a39a-4adf-b740-fd32a352fa8a}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{77e2fcc0-4ca6-436c-be6f-9418cb807d45}*SharedItemsImports = 4 - ..\sources\editor\Xenko.PrivacyPolicy\Xenko.PrivacyPolicy.projitems*{950badd0-ad5a-4f58-87ec-4adaecbea89b}*SharedItemsImports = 13 - ..\sources\tools\Xenko.Core.VisualStudio\Xenko.Core.VisualStudio.projitems*{991e796a-d1d1-48b8-b9aa-95c2744fe112}*SharedItemsImports = 13 - ..\sources\editor\Xenko.Core.MostRecentlyUsedFiles\Xenko.Core.MostRecentlyUsedFiles.projitems*{9ac6d791-811e-4d6a-b08e-93f0093ef268}*SharedItemsImports = 13 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{a5dc820b-9554-45b6-9677-6a2f902e7787}*SharedItemsImports = 4 - ..\sources\editor\Xenko.Editor.CrashReport\Xenko.Editor.CrashReport.projitems*{ab574f65-1402-4476-9314-74dcdaf19097}*SharedItemsImports = 13 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{b33e576f-2279-4bfc-a438-d9b84343b56b}*SharedItemsImports = 13 - ..\sources\assets\Xenko.Core.Archive\Xenko.Core.Archive.projitems*{bd176b28-49cd-4fad-a430-cdbcf1c2e514}*SharedItemsImports = 4 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{c121a566-555e-42b9-9b0a-1696529a9088}*SharedItemsImports = 4 - ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{e8b3553f-a79f-4e50-b75b-acee771c320c}*SharedItemsImports = 4 - ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{fb06c76a-6bb7-40be-9afa-fec13b045fb5}*SharedItemsImports = 4 - ..\sources\assets\Xenko.Core.Assets.Yaml\Xenko.Core.Assets.Yaml.projitems*{fb9ed2c4-94a0-4004-a498-3f29a9d5bb5d}*SharedItemsImports = 13 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|Win32 = Debug|Win32 Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms - Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Debug|Any CPU.Build.0 = Debug|Any CPU {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Debug|Win32.ActiveCfg = Debug|Any CPU {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Release|Any CPU.Build.0 = Release|Any CPU {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2FCA2D8B-B10F-4DCA-9847-4221F74BA586}.Release|Win32.ActiveCfg = Release|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Any CPU.Build.0 = Debug|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {C121A566-555E-42B9-9B0A-1696529A9088}.Debug|Win32.ActiveCfg = Debug|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Any CPU.ActiveCfg = Release|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Any CPU.Build.0 = Release|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {C121A566-555E-42B9-9B0A-1696529A9088}.Release|Win32.ActiveCfg = Release|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Debug|Win32.ActiveCfg = Debug|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Any CPU.Build.0 = Release|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5}.Release|Win32.ActiveCfg = Release|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Debug|Win32.ActiveCfg = Debug|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Any CPU.Build.0 = Release|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {A8F8D125-7A22-489F-99BC-9A02F545A17F}.Release|Win32.ActiveCfg = Release|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Debug|Win32.ActiveCfg = Debug|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Any CPU.Build.0 = Release|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {01700344-CF44-482C-BEBC-60213B0F844C}.Release|Win32.ActiveCfg = Release|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Debug|Win32.ActiveCfg = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Any CPU.ActiveCfg = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Any CPU.Build.0 = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Mixed Platforms.Build.0 = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Win32.ActiveCfg = Debug|Any CPU - {5AA408BA-E766-453E-B661-E3D7EC46E2A6}.Release|Win32.Build.0 = Debug|Any CPU {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Debug|Any CPU.ActiveCfg = Debug|Win32 {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Debug|Mixed Platforms.Build.0 = Debug|x64 - {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Debug|Win32.ActiveCfg = Debug|Win32 - {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Debug|Win32.Build.0 = Debug|Win32 {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Release|Any CPU.ActiveCfg = Release|Win32 {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Release|Mixed Platforms.ActiveCfg = Release|x64 {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Release|Mixed Platforms.Build.0 = Release|x64 - {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Release|Win32.ActiveCfg = Release|Win32 - {0467D515-FD66-4B8A-A128-CB642C2ED03F}.Release|Win32.Build.0 = Release|Win32 {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Debug|Win32.ActiveCfg = Debug|Any CPU {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Any CPU.ActiveCfg = Release|Any CPU {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Any CPU.Build.0 = Release|Any CPU {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {F2D52EDB-BC17-4243-B06D-33CD20F87A7F}.Release|Win32.ActiveCfg = Release|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Debug|Any CPU.Build.0 = Debug|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Debug|Win32.ActiveCfg = Debug|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Release|Any CPU.ActiveCfg = Release|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Release|Any CPU.Build.0 = Release|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {47AFCC2E-E9F0-47D6-9D75-9E646546A92B}.Release|Win32.ActiveCfg = Release|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Debug|Win32.ActiveCfg = Debug|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Release|Any CPU.Build.0 = Release|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4}.Release|Win32.ActiveCfg = Release|Any CPU - {C2306552-6C42-464C-8981-32FEF4F9458D}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Debug|Mixed Platforms.Build.0 = Debug|x64 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Debug|Win32.ActiveCfg = Debug|Win32 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Debug|Win32.Build.0 = Debug|Win32 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Release|Any CPU.ActiveCfg = Release|Win32 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Release|Mixed Platforms.ActiveCfg = Release|x64 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Release|Mixed Platforms.Build.0 = Release|x64 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Release|Win32.ActiveCfg = Release|Win32 - {C2306552-6C42-464C-8981-32FEF4F9458D}.Release|Win32.Build.0 = Release|Win32 {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Any CPU.Build.0 = Debug|Any CPU {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Win32.ActiveCfg = Debug|Any CPU {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Any CPU.ActiveCfg = Release|Any CPU {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Any CPU.Build.0 = Release|Any CPU {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Win32.ActiveCfg = Release|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Any CPU.Build.0 = Debug|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Debug|Win32.ActiveCfg = Debug|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Any CPU.ActiveCfg = Release|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Any CPU.Build.0 = Release|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {42780CBD-3FE7-48E3-BD5B-59945EA20137}.Release|Win32.ActiveCfg = Release|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Debug|Win32.ActiveCfg = Debug|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Release|Any CPU.Build.0 = Release|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6}.Release|Win32.ActiveCfg = Release|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Debug|Win32.ActiveCfg = Debug|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Release|Any CPU.Build.0 = Release|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {7F7BFF79-C400-435F-B359-56A2EF8956E0}.Release|Win32.ActiveCfg = Release|Any CPU {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Debug|Any CPU.Build.0 = Debug|Any CPU {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Debug|Win32.ActiveCfg = Debug|Any CPU {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Release|Any CPU.ActiveCfg = Release|Any CPU {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Release|Any CPU.Build.0 = Release|Any CPU {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {C485CE61-3006-4C99-ACB3-A737F5CEBAE7}.Release|Win32.ActiveCfg = Release|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Debug|Win32.ActiveCfg = Debug|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Release|Any CPU.Build.0 = Release|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {4B299721-18EA-4B6D-AFD5-2D6E188B97BD}.Release|Win32.ActiveCfg = Release|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Debug|Win32.ActiveCfg = Debug|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A}.Release|Win32.ActiveCfg = Release|Any CPU {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Debug|Win32.ActiveCfg = Debug|Any CPU {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA}.Release|Win32.ActiveCfg = Release|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Debug|Win32.ActiveCfg = Debug|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {09F32307-595A-4CBB-BF7C-F055DA1F70EE}.Release|Win32.ActiveCfg = Release|Any CPU {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Debug|Win32.ActiveCfg = Debug|Any CPU {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Release|Any CPU.ActiveCfg = Release|Any CPU {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {7732CB84-A39A-4ADF-B740-FD32A352FA8A}.Release|Win32.ActiveCfg = Release|Any CPU - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Debug|Mixed Platforms.Build.0 = Debug|x64 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Debug|Win32.ActiveCfg = Debug|Win32 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Debug|Win32.Build.0 = Debug|Win32 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Release|Any CPU.ActiveCfg = Release|Win32 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Release|Mixed Platforms.ActiveCfg = Release|x64 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Release|Mixed Platforms.Build.0 = Release|x64 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Release|Win32.ActiveCfg = Release|Win32 - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8}.Release|Win32.Build.0 = Release|Win32 {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Any CPU.Build.0 = Debug|Any CPU {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Debug|Win32.ActiveCfg = Debug|Any CPU {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Any CPU.ActiveCfg = Release|Any CPU {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Any CPU.Build.0 = Release|Any CPU {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {0E916AB7-5A6C-4820-8AB1-AA492FE66D68}.Release|Win32.ActiveCfg = Release|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Any CPU.Build.0 = Debug|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Debug|Win32.ActiveCfg = Debug|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Any CPU.ActiveCfg = Release|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Any CPU.Build.0 = Release|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A}.Release|Win32.ActiveCfg = Release|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Any CPU.Build.0 = Debug|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Debug|Win32.ActiveCfg = Debug|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Any CPU.ActiveCfg = Release|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Any CPU.Build.0 = Release|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {5210FB81-B807-49BB-AF0D-31FB6A83A572}.Release|Win32.ActiveCfg = Release|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Debug|Any CPU.Build.0 = Debug|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1D4210BD-FA51-4709-951B-50647617F97E}.Debug|Win32.ActiveCfg = Debug|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Release|Any CPU.ActiveCfg = Release|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Release|Any CPU.Build.0 = Release|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1D4210BD-FA51-4709-951B-50647617F97E}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1D4210BD-FA51-4709-951B-50647617F97E}.Release|Win32.ActiveCfg = Release|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Debug|Any CPU.Build.0 = Debug|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {CB6C4D8B-906E-4120-8146-09261B8D2885}.Debug|Win32.ActiveCfg = Debug|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Release|Any CPU.ActiveCfg = Release|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Release|Any CPU.Build.0 = Release|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {CB6C4D8B-906E-4120-8146-09261B8D2885}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {CB6C4D8B-906E-4120-8146-09261B8D2885}.Release|Win32.ActiveCfg = Release|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Any CPU.Build.0 = Debug|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1320F627-EE43-4115-8E89-19D1753E51F2}.Debug|Win32.ActiveCfg = Debug|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Any CPU.ActiveCfg = Release|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Any CPU.Build.0 = Release|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1320F627-EE43-4115-8E89-19D1753E51F2}.Release|Win32.ActiveCfg = Release|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Debug|Win32.ActiveCfg = Debug|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Any CPU.Build.0 = Release|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1DE01410-22C9-489B-9796-1ADDAB1F64E5}.Release|Win32.ActiveCfg = Release|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Any CPU.Build.0 = Debug|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Debug|Win32.ActiveCfg = Debug|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Any CPU.ActiveCfg = Release|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Any CPU.Build.0 = Release|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {14A47447-2A24-4ECD-B24D-6571499DCD4C}.Release|Win32.ActiveCfg = Release|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Any CPU.Build.0 = Debug|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Debug|Win32.ActiveCfg = Debug|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Any CPU.ActiveCfg = Release|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Any CPU.Build.0 = Release|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {273BDD15-7392-4078-91F0-AF23594A3D7B}.Release|Win32.ActiveCfg = Release|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Any CPU.Build.0 = Debug|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {DE042125-C270-4D1D-9270-0759C167567A}.Debug|Win32.ActiveCfg = Debug|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Release|Any CPU.Build.0 = Release|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {DE042125-C270-4D1D-9270-0759C167567A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {DE042125-C270-4D1D-9270-0759C167567A}.Release|Win32.ActiveCfg = Release|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Any CPU.Build.0 = Debug|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {72390339-B2A1-4F61-A800-31ED0975B515}.Debug|Win32.ActiveCfg = Debug|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Any CPU.ActiveCfg = Release|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Any CPU.Build.0 = Release|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {72390339-B2A1-4F61-A800-31ED0975B515}.Release|Win32.ActiveCfg = Release|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Any CPU.Build.0 = Debug|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Debug|Win32.ActiveCfg = Debug|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Any CPU.ActiveCfg = Release|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Any CPU.Build.0 = Release|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {E8B3553F-A79F-4E50-B75B-ACEE771C320C}.Release|Win32.ActiveCfg = Release|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Debug|Win32.ActiveCfg = Debug|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Release|Any CPU.Build.0 = Release|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1BE90177-FE4D-4519-839E-7EB7D78AC973}.Release|Win32.ActiveCfg = Release|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Any CPU.Build.0 = Debug|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Debug|Win32.ActiveCfg = Debug|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Any CPU.ActiveCfg = Release|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Any CPU.Build.0 = Release|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E}.Release|Win32.ActiveCfg = Release|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Debug|Any CPU.Build.0 = Debug|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Debug|Win32.ActiveCfg = Debug|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Release|Any CPU.Build.0 = Release|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47}.Release|Win32.ActiveCfg = Release|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Debug|Win32.ActiveCfg = Debug|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Release|Any CPU.Build.0 = Release|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {3E7B5D96-CF71-41EE-8CF0-70D090873390}.Release|Win32.ActiveCfg = Release|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Debug|Any CPU.Build.0 = Debug|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Debug|Win32.ActiveCfg = Debug|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Release|Any CPU.ActiveCfg = Release|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Release|Any CPU.Build.0 = Release|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {39AE9C77-E94B-404F-8768-B6261B3C1E0E}.Release|Win32.ActiveCfg = Release|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Debug|Any CPU.Build.0 = Debug|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Debug|Win32.ActiveCfg = Debug|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Release|Any CPU.ActiveCfg = Release|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Release|Any CPU.Build.0 = Release|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {5863574D-7A55-49BC-8E65-BABB74D8E66E}.Release|Win32.ActiveCfg = Release|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Debug|Any CPU.Build.0 = Debug|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Debug|Win32.ActiveCfg = Debug|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Release|Any CPU.ActiveCfg = Release|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Release|Any CPU.Build.0 = Release|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698}.Release|Win32.ActiveCfg = Release|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Debug|Win32.ActiveCfg = Debug|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Release|Any CPU.Build.0 = Release|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {7DBC5A0B-76F5-4D9E-9798-540DA214099C}.Release|Win32.ActiveCfg = Release|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Debug|Any CPU.Build.0 = Debug|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Debug|Win32.ActiveCfg = Debug|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Release|Any CPU.ActiveCfg = Release|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Release|Any CPU.Build.0 = Release|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {117BF9F8-D2D9-4D32-9702-251C3E038090}.Release|Win32.ActiveCfg = Release|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Debug|Any CPU.Build.0 = Debug|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Debug|Win32.ActiveCfg = Debug|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Release|Any CPU.Build.0 = Release|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {C904D2C6-5A15-4E0B-8432-33967E1735AA}.Release|Win32.ActiveCfg = Release|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Debug|Win32.ActiveCfg = Debug|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Release|Any CPU.Build.0 = Release|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {49AAA22D-D1C8-4E0F-82E8-F462D5442463}.Release|Win32.ActiveCfg = Release|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Any CPU.Build.0 = Debug|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Debug|Win32.ActiveCfg = Debug|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Any CPU.Build.0 = Release|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3}.Release|Win32.ActiveCfg = Release|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Debug|Win32.ActiveCfg = Debug|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Any CPU.Build.0 = Release|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9}.Release|Win32.ActiveCfg = Release|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Debug|Any CPU.Build.0 = Debug|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Debug|Win32.ActiveCfg = Debug|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Release|Any CPU.ActiveCfg = Release|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Release|Any CPU.Build.0 = Release|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {16E02D45-5530-4617-97DC-BC3BDF77DE2C}.Release|Win32.ActiveCfg = Release|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Debug|Win32.ActiveCfg = Debug|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Release|Any CPU.Build.0 = Release|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {0EA748AF-E1DC-4788-BA50-8BABD56F220C}.Release|Win32.ActiveCfg = Release|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Debug|Any CPU.Build.0 = Debug|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Debug|Win32.ActiveCfg = Debug|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Release|Any CPU.Build.0 = Release|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2}.Release|Win32.ActiveCfg = Release|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Debug|Win32.ActiveCfg = Debug|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Any CPU.Build.0 = Release|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {D002FEB1-00A6-4AB1-A83F-1F253465E64D}.Release|Win32.ActiveCfg = Release|Any CPU - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Debug|Mixed Platforms.Build.0 = Debug|x64 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Debug|Win32.ActiveCfg = Debug|Win32 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Debug|Win32.Build.0 = Debug|Win32 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Release|Any CPU.ActiveCfg = Release|Win32 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Release|Mixed Platforms.ActiveCfg = Release|x64 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Release|Mixed Platforms.Build.0 = Release|x64 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Release|Win32.ActiveCfg = Release|Win32 - {43A6E62E-1B1C-4630-ABB8-C3F716004645}.Release|Win32.Build.0 = Release|Win32 {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Debug|Any CPU.Build.0 = Debug|Any CPU {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Debug|Win32.ActiveCfg = Debug|Any CPU {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Release|Any CPU.ActiveCfg = Release|Any CPU {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Release|Any CPU.Build.0 = Release|Any CPU {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {942A5B1D-2B3D-4B30-98DE-336CE93F4F12}.Release|Win32.ActiveCfg = Release|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Debug|Any CPU.Build.0 = Debug|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Debug|Win32.ActiveCfg = Debug|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Release|Any CPU.ActiveCfg = Release|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Release|Any CPU.Build.0 = Release|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2E2382F7-9576-49F0-AE43-93AFD7DB2368}.Release|Win32.ActiveCfg = Release|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Debug|Any CPU.Build.0 = Debug|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Debug|Win32.ActiveCfg = Debug|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Release|Any CPU.ActiveCfg = Release|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Release|Any CPU.Build.0 = Release|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF}.Release|Win32.ActiveCfg = Release|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Debug|Win32.ActiveCfg = Debug|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Release|Any CPU.Build.0 = Release|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD}.Release|Win32.ActiveCfg = Release|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Debug|Win32.ActiveCfg = Debug|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Release|Any CPU.Build.0 = Release|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {A5DC820B-9554-45B6-9677-6A2F902E7787}.Release|Win32.ActiveCfg = Release|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Debug|Win32.ActiveCfg = Debug|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Release|Any CPU.Build.0 = Release|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D}.Release|Win32.ActiveCfg = Release|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Debug|Win32.ActiveCfg = Debug|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Release|Any CPU.Build.0 = Release|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {E136B568-3E3F-498F-A8B4-2877B7768560}.Release|Win32.ActiveCfg = Release|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {DD592516-B341-40FE-9100-1B0FA784A060}.Debug|Win32.ActiveCfg = Debug|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Any CPU.Build.0 = Release|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {DD592516-B341-40FE-9100-1B0FA784A060}.Release|Win32.ActiveCfg = Release|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Debug|Any CPU.Build.0 = Debug|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Debug|Win32.ActiveCfg = Debug|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Release|Any CPU.ActiveCfg = Release|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Release|Any CPU.Build.0 = Release|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {4FAC003A-2532-42F3-AED7-A296D1A1615E}.Release|Win32.ActiveCfg = Release|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Debug|Any CPU.Build.0 = Debug|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Debug|Win32.ActiveCfg = Debug|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Release|Any CPU.Build.0 = Release|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1}.Release|Win32.ActiveCfg = Release|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Debug|Win32.ActiveCfg = Debug|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Release|Any CPU.Build.0 = Release|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD}.Release|Win32.ActiveCfg = Release|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Debug|Win32.ActiveCfg = Debug|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Release|Any CPU.Build.0 = Release|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45}.Release|Win32.ActiveCfg = Release|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Debug|Win32.ActiveCfg = Debug|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Release|Any CPU.Build.0 = Release|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531}.Release|Win32.ActiveCfg = Release|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Debug|Any CPU.Build.0 = Debug|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Debug|Win32.ActiveCfg = Debug|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Release|Any CPU.Build.0 = Release|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A}.Release|Win32.ActiveCfg = Release|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Debug|Any CPU.Build.0 = Debug|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Debug|Win32.ActiveCfg = Debug|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Release|Any CPU.ActiveCfg = Release|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Release|Any CPU.Build.0 = Release|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8D783A73-0BE3-423E-8FF6-984125C07BFE}.Release|Win32.ActiveCfg = Release|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Debug|Any CPU.Build.0 = Debug|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Debug|Win32.ActiveCfg = Debug|Any CPU - {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Debug|Win32.Build.0 = Debug|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Release|Any CPU.Build.0 = Release|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Release|Win32.ActiveCfg = Release|Any CPU - {63562B0A-E501-42C2-97BB-13D3AD3A7DB4}.Release|Win32.Build.0 = Release|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Any CPU.Build.0 = Debug|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Win32.ActiveCfg = Debug|Any CPU - {9BC63BEC-F305-451D-BB31-262938EA964D}.Debug|Win32.Build.0 = Debug|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Any CPU.ActiveCfg = Release|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Any CPU.Build.0 = Release|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Win32.ActiveCfg = Release|Any CPU - {9BC63BEC-F305-451D-BB31-262938EA964D}.Release|Win32.Build.0 = Release|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Win32.ActiveCfg = Debug|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Debug|Win32.Build.0 = Debug|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Any CPU.Build.0 = Release|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Win32.ActiveCfg = Release|Any CPU - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC}.Release|Win32.Build.0 = Release|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Win32.ActiveCfg = Debug|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Debug|Win32.Build.0 = Debug|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Any CPU.Build.0 = Release|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Win32.ActiveCfg = Release|Any CPU - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9}.Release|Win32.Build.0 = Release|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Win32.ActiveCfg = Debug|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Debug|Win32.Build.0 = Debug|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Any CPU.Build.0 = Release|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Win32.ActiveCfg = Release|Any CPU - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7}.Release|Win32.Build.0 = Release|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Debug|Win32.ActiveCfg = Debug|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Debug|Win32.Build.0 = Debug|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Release|Any CPU.Build.0 = Release|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Release|Win32.ActiveCfg = Release|Any CPU - {75D71310-ECF7-4592-9E35-3FE540040982}.Release|Win32.Build.0 = Release|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Any CPU.Build.0 = Debug|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Win32.ActiveCfg = Debug|Any CPU - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Debug|Win32.Build.0 = Debug|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Any CPU.ActiveCfg = Release|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Any CPU.Build.0 = Release|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Win32.ActiveCfg = Release|Any CPU - {F32FDA80-B6DD-47A8-8681-437E2C0D3F31}.Release|Win32.Build.0 = Release|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Win32.ActiveCfg = Debug|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Debug|Win32.Build.0 = Debug|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Any CPU.Build.0 = Release|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Win32.ActiveCfg = Release|Any CPU - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9}.Release|Win32.Build.0 = Release|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Win32.ActiveCfg = Debug|Any CPU - {1DBBC150-F085-43EF-B41D-27C72D133770}.Debug|Win32.Build.0 = Debug|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Any CPU.Build.0 = Release|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Win32.ActiveCfg = Release|Any CPU - {1DBBC150-F085-43EF-B41D-27C72D133770}.Release|Win32.Build.0 = Release|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Debug|Win32.ActiveCfg = Debug|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Debug|Win32.Build.0 = Debug|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Release|Any CPU.Build.0 = Release|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Release|Win32.ActiveCfg = Release|Any CPU - {370ADF53-DFFA-461E-B72A-1302C0A0DE00}.Release|Win32.Build.0 = Release|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Win32.ActiveCfg = Debug|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Debug|Win32.Build.0 = Debug|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Any CPU.Build.0 = Release|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Win32.ActiveCfg = Release|Any CPU - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713}.Release|Win32.Build.0 = Release|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Debug|Win32.ActiveCfg = Debug|Any CPU - {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Debug|Win32.Build.0 = Debug|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Release|Any CPU.Build.0 = Release|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Release|Win32.ActiveCfg = Release|Any CPU - {ACD2C831-BDA2-4512-B4CC-75E8E1804F73}.Release|Win32.Build.0 = Release|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Debug|Any CPU.Build.0 = Debug|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Debug|Win32.ActiveCfg = Debug|Any CPU - {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Debug|Win32.Build.0 = Debug|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Release|Any CPU.ActiveCfg = Release|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Release|Any CPU.Build.0 = Release|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Release|Win32.ActiveCfg = Release|Any CPU - {EFD2472E-B0E1-442A-9057-BBEA2517064B}.Release|Win32.Build.0 = Release|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Debug|Win32.ActiveCfg = Debug|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Debug|Win32.Build.0 = Debug|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Release|Any CPU.Build.0 = Release|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Release|Win32.ActiveCfg = Release|Any CPU - {25F98E38-0249-45BC-B2ED-7899297B9CF6}.Release|Win32.Build.0 = Release|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Debug|Win32.ActiveCfg = Debug|Any CPU - {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Debug|Win32.Build.0 = Debug|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Release|Any CPU.Build.0 = Release|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Release|Win32.ActiveCfg = Release|Any CPU - {BF32DE1B-6276-4341-B212-F8862ADBBA7A}.Release|Win32.Build.0 = Release|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Debug|Win32.ActiveCfg = Debug|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Debug|Win32.Build.0 = Debug|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Release|Any CPU.Build.0 = Release|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Release|Win32.ActiveCfg = Release|Any CPU - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA}.Release|Win32.Build.0 = Release|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Debug|Any CPU.Build.0 = Debug|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Debug|Win32.ActiveCfg = Debug|Any CPU - {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Debug|Win32.Build.0 = Debug|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Release|Any CPU.ActiveCfg = Release|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Release|Any CPU.Build.0 = Release|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Release|Win32.ActiveCfg = Release|Any CPU - {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE}.Release|Win32.Build.0 = Release|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Win32.ActiveCfg = Debug|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Debug|Win32.Build.0 = Debug|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Any CPU.Build.0 = Release|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Win32.ActiveCfg = Release|Any CPU - {4F0E7E04-F067-4CE8-B8C8-1105F319D123}.Release|Win32.Build.0 = Release|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Debug|Any CPU.Build.0 = Debug|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Debug|Win32.ActiveCfg = Debug|Any CPU - {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Debug|Win32.Build.0 = Debug|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Release|Any CPU.ActiveCfg = Release|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Release|Any CPU.Build.0 = Release|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Release|Win32.ActiveCfg = Release|Any CPU - {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB}.Release|Win32.Build.0 = Release|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Debug|Win32.ActiveCfg = Debug|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Debug|Win32.Build.0 = Debug|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Release|Any CPU.Build.0 = Release|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Release|Win32.ActiveCfg = Release|Any CPU - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49}.Release|Win32.Build.0 = Release|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Any CPU.Build.0 = Debug|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Win32.ActiveCfg = Debug|Any CPU - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Debug|Win32.Build.0 = Debug|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Any CPU.Build.0 = Release|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Win32.ActiveCfg = Release|Any CPU - {53782603-3096-40C2-ABD3-F8F311BAE4BE}.Release|Win32.Build.0 = Release|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Debug|Win32.ActiveCfg = Debug|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Debug|Win32.Build.0 = Debug|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Release|Any CPU.Build.0 = Release|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Release|Win32.ActiveCfg = Release|Any CPU - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19}.Release|Win32.Build.0 = Release|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Debug|Win32.ActiveCfg = Debug|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Debug|Win32.Build.0 = Debug|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Release|Any CPU.Build.0 = Release|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Release|Win32.ActiveCfg = Release|Any CPU - {3C855DB2-EEA3-415C-A0A8-C834DEC40531}.Release|Win32.Build.0 = Release|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Any CPU.Build.0 = Debug|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Win32.ActiveCfg = Debug|Any CPU - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Debug|Win32.Build.0 = Debug|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Any CPU.ActiveCfg = Release|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Any CPU.Build.0 = Release|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Win32.ActiveCfg = Release|Any CPU - {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088}.Release|Win32.Build.0 = Release|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Debug|Win32.ActiveCfg = Debug|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Debug|Win32.Build.0 = Debug|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Release|Any CPU.Build.0 = Release|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Release|Win32.ActiveCfg = Release|Any CPU - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF}.Release|Win32.Build.0 = Release|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Debug|Win32.ActiveCfg = Debug|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Debug|Win32.Build.0 = Debug|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Release|Any CPU.Build.0 = Release|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Release|Win32.ActiveCfg = Release|Any CPU - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B}.Release|Win32.Build.0 = Release|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Debug|Any CPU.Build.0 = Debug|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Debug|Win32.ActiveCfg = Debug|Any CPU - {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Debug|Win32.Build.0 = Debug|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Release|Any CPU.Build.0 = Release|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Release|Win32.ActiveCfg = Release|Any CPU - {BD176B28-49CD-4FAD-A430-CDBCF1C2E514}.Release|Win32.Build.0 = Release|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Debug|Win32.ActiveCfg = Debug|Any CPU - {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Debug|Win32.Build.0 = Debug|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Release|Any CPU.Build.0 = Release|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Release|Win32.ActiveCfg = Release|Any CPU - {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A}.Release|Win32.Build.0 = Release|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Debug|Win32.ActiveCfg = Debug|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Debug|Win32.Build.0 = Debug|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Release|Any CPU.Build.0 = Release|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Release|Win32.ActiveCfg = Release|Any CPU - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31}.Release|Win32.Build.0 = Release|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Debug|Win32.ActiveCfg = Debug|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Debug|Win32.Build.0 = Debug|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Release|Any CPU.Build.0 = Release|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Release|Win32.ActiveCfg = Release|Any CPU - {5BFE4386-3C42-4118-96C8-4B68441F1661}.Release|Win32.Build.0 = Release|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Debug|Any CPU.Build.0 = Debug|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Debug|Win32.ActiveCfg = Debug|Any CPU - {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Debug|Win32.Build.0 = Debug|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Release|Any CPU.ActiveCfg = Release|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Release|Any CPU.Build.0 = Release|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Release|Win32.ActiveCfg = Release|Any CPU - {6A7B231E-36AA-4647-8C1A-FB1540ABC813}.Release|Win32.Build.0 = Release|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Debug|Any CPU.Build.0 = Debug|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Debug|Win32.ActiveCfg = Debug|Any CPU - {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Debug|Win32.Build.0 = Debug|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Release|Any CPU.ActiveCfg = Release|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Release|Any CPU.Build.0 = Release|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Release|Win32.ActiveCfg = Release|Any CPU - {B686C194-D71D-4FF0-8B4F-F53AFBCD962F}.Release|Win32.Build.0 = Release|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Debug|Any CPU.Build.0 = Debug|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Debug|Win32.ActiveCfg = Debug|Any CPU - {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Debug|Win32.Build.0 = Debug|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Release|Any CPU.ActiveCfg = Release|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Release|Any CPU.Build.0 = Release|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Release|Win32.ActiveCfg = Release|Any CPU - {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1}.Release|Win32.Build.0 = Release|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Any CPU.Build.0 = Debug|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Win32.ActiveCfg = Debug|Any CPU - {DA355C86-866F-4843-9B4D-63A173C750FB}.Debug|Win32.Build.0 = Debug|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Any CPU.Build.0 = Release|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Win32.ActiveCfg = Release|Any CPU - {DA355C86-866F-4843-9B4D-63A173C750FB}.Release|Win32.Build.0 = Release|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Debug|Win32.ActiveCfg = Debug|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Debug|Win32.Build.0 = Debug|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Release|Any CPU.Build.0 = Release|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Release|Win32.ActiveCfg = Release|Any CPU - {2FC40214-A4AA-45DC-9C93-72ED800C40B0}.Release|Win32.Build.0 = Release|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Debug|Any CPU.Build.0 = Debug|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {040F754C-17F4-4B5F-B974-93F1E39D107F}.Debug|Win32.ActiveCfg = Debug|Any CPU - {040F754C-17F4-4B5F-B974-93F1E39D107F}.Debug|Win32.Build.0 = Debug|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Release|Any CPU.ActiveCfg = Release|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Release|Any CPU.Build.0 = Release|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {040F754C-17F4-4B5F-B974-93F1E39D107F}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {040F754C-17F4-4B5F-B974-93F1E39D107F}.Release|Win32.ActiveCfg = Release|Any CPU - {040F754C-17F4-4B5F-B974-93F1E39D107F}.Release|Win32.Build.0 = Release|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Win32.ActiveCfg = Debug|Any CPU - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Debug|Win32.Build.0 = Debug|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Any CPU.Build.0 = Release|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Win32.ActiveCfg = Release|Any CPU - {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4}.Release|Win32.Build.0 = Release|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Release|Any CPU.Build.0 = Release|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {66BE41FC-FC52-48D0-9C04-BCE8CC393020}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Release|Any CPU.Build.0 = Release|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Release|Any CPU.Build.0 = Release|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {43A8197B-874F-4CE2-9D56-518A23547C96}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Release|Any CPU.Build.0 = Release|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {092984EF-90A1-46D2-8AEE-DE24744E6B2D}.Release|Mixed Platforms.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {47FFA9CA-781D-427E-9A41-365D789DD4B1} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {860946E4-CC77-4FDA-A4FD-3DB2A502A696} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {6F473FA6-4F8B-4FBA-AE33-EE5AF997D50C} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {4A15BAAD-AA37-4754-A2BF-8D4049211E36} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} @@ -1586,25 +827,15 @@ Global {2FCA2D8B-B10F-4DCA-9847-4221F74BA586} = {5D2D3BE8-9910-45CA-8E45-95660DA4C563} {C121A566-555E-42B9-9B0A-1696529A9088} = {4C142567-C42B-40F5-B092-798882190209} {FB06C76A-6BB7-40BE-9AFA-FEC13B045FB5} = {4C142567-C42B-40F5-B092-798882190209} - {A8F8D125-7A22-489F-99BC-9A02F545A17F} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {01700344-CF44-482C-BEBC-60213B0F844C} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {5AA408BA-E766-453E-B661-E3D7EC46E2A6} = {22ADD4CD-092E-4ADC-A21E-64CF42230152} {0467D515-FD66-4B8A-A128-CB642C2ED03F} = {6F473FA6-4F8B-4FBA-AE33-EE5AF997D50C} {F2D52EDB-BC17-4243-B06D-33CD20F87A7F} = {10D145AF-C8AE-428F-A80F-CA1B591D0DB2} {47AFCC2E-E9F0-47D6-9D75-9E646546A92B} = {75A820AB-0F21-40F2-9448-5D7F495B97A0} - {C223FCD7-CDCC-4943-9E11-9C2CC8FA9FC4} = {52AE329E-B588-40D0-A578-8D0DB1BD83E5} - {C2306552-6C42-464C-8981-32FEF4F9458D} = {6F473FA6-4F8B-4FBA-AE33-EE5AF997D50C} {D81F5C91-D7DB-46E5-BC99-49488FB6814C} = {10D145AF-C8AE-428F-A80F-CA1B591D0DB2} {42780CBD-3FE7-48E3-BD5B-59945EA20137} = {4C142567-C42B-40F5-B092-798882190209} - {0BD41ADD-2704-4A77-A9AB-15460A2ABDC6} = {E4508D15-6503-4A29-ADC4-27B3A5E99545} {7F7BFF79-C400-435F-B359-56A2EF8956E0} = {4A15BAAD-AA37-4754-A2BF-8D4049211E36} {C485CE61-3006-4C99-ACB3-A737F5CEBAE7} = {4A15BAAD-AA37-4754-A2BF-8D4049211E36} {4B299721-18EA-4B6D-AFD5-2D6E188B97BD} = {860946E4-CC77-4FDA-A4FD-3DB2A502A696} - {7AF4B563-AAD3-42FF-B91E-84B9D34D904A} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {F61D86B5-7C3D-4441-957D-A0A6D2FA69CA} = {47FFA9CA-781D-427E-9A41-365D789DD4B1} - {09F32307-595A-4CBB-BF7C-F055DA1F70EE} = {B175D318-B4D0-49EA-9AEF-A54ACA2F03DC} {7732CB84-A39A-4ADF-B740-FD32A352FA8A} = {25F10A0B-7259-404C-86BE-FD2363C92F72} - {FCDF1B87-1C76-46EB-AD6A-D55EF5F195B8} = {47FFA9CA-781D-427E-9A41-365D789DD4B1} {0E916AB7-5A6C-4820-8AB1-AA492FE66D68} = {2E93E2B5-4500-4E47-9B65-E705218AB578} {1677B922-CCF0-44DE-B57E-1CDD3D2B8E8A} = {2E93E2B5-4500-4E47-9B65-E705218AB578} {5210FB81-B807-49BB-AF0D-31FB6A83A572} = {2E93E2B5-4500-4E47-9B65-E705218AB578} @@ -1617,88 +848,78 @@ Global {DE042125-C270-4D1D-9270-0759C167567A} = {4C142567-C42B-40F5-B092-798882190209} {72390339-B2A1-4F61-A800-31ED0975B515} = {4C142567-C42B-40F5-B092-798882190209} {E8B3553F-A79F-4E50-B75B-ACEE771C320C} = {4C142567-C42B-40F5-B092-798882190209} - {1BE90177-FE4D-4519-839E-7EB7D78AC973} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} {84DEB606-77ED-49CD-9AED-D2B13C1F5A1E} = {4C142567-C42B-40F5-B092-798882190209} {1E54A9A2-4439-4444-AE57-6D2ED3C0DC47} = {A2A4342E-024B-4063-B10C-1DA96CA3046D} - {3E7B5D96-CF71-41EE-8CF0-70D090873390} = {9D5D9861-AE68-429C-8B21-2263F9DA07A1} {39AE9C77-E94B-404F-8768-B6261B3C1E0E} = {F765035E-F4F4-4CFA-BA02-755DC677AA97} {5863574D-7A55-49BC-8E65-BABB74D8E66E} = {5D2D3BE8-9910-45CA-8E45-95660DA4C563} {50D1A3BB-4B41-4EF5-8D2F-3618A3B6C698} = {A2A4342E-024B-4063-B10C-1DA96CA3046D} {7DBC5A0B-76F5-4D9E-9798-540DA214099C} = {860946E4-CC77-4FDA-A4FD-3DB2A502A696} - {117BF9F8-D2D9-4D32-9702-251C3E038090} = {A47B451D-3162-410F-BAF7-C650C4B7A4B0} {C904D2C6-5A15-4E0B-8432-33967E1735AA} = {F765035E-F4F4-4CFA-BA02-755DC677AA97} - {49AAA22D-D1C8-4E0F-82E8-F462D5442463} = {52AE329E-B588-40D0-A578-8D0DB1BD83E5} {BB9DEEEF-F18C-40D8-B016-6434CC71B8C3} = {4C142567-C42B-40F5-B092-798882190209} - {E7B1B17F-D04B-4978-B504-A6BB3EE846C9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} {16E02D45-5530-4617-97DC-BC3BDF77DE2C} = {5D2D3BE8-9910-45CA-8E45-95660DA4C563} - {0EA748AF-E1DC-4788-BA50-8BABD56F220C} = {F5F744B5-803E-4180-B82A-8B1F0BCD6579} {66581DAD-70AD-4475-AE47-C6C0DF1EC5E2} = {25F10A0B-7259-404C-86BE-FD2363C92F72} - {D002FEB1-00A6-4AB1-A83F-1F253465E64D} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {43A6E62E-1B1C-4630-ABB8-C3F716004645} = {6F473FA6-4F8B-4FBA-AE33-EE5AF997D50C} {942A5B1D-2B3D-4B30-98DE-336CE93F4F12} = {860946E4-CC77-4FDA-A4FD-3DB2A502A696} {2E2382F7-9576-49F0-AE43-93AFD7DB2368} = {860946E4-CC77-4FDA-A4FD-3DB2A502A696} {550C1B7C-B7AD-46DF-ACF3-C36AEF35D5FF} = {5D2D3BE8-9910-45CA-8E45-95660DA4C563} - {862C7C39-8E2B-4F18-88E9-ACD6EDF818CD} = {860946E4-CC77-4FDA-A4FD-3DB2A502A696} - {A5DC820B-9554-45B6-9677-6A2F902E7787} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} - {4D13D69B-C8E8-4675-8198-1BE2785FFB6D} = {B175D318-B4D0-49EA-9AEF-A54ACA2F03DC} - {E136B568-3E3F-498F-A8B4-2877B7768560} = {E4508D15-6503-4A29-ADC4-27B3A5E99545} {DD592516-B341-40FE-9100-1B0FA784A060} = {4C142567-C42B-40F5-B092-798882190209} {4FAC003A-2532-42F3-AED7-A296D1A1615E} = {75A820AB-0F21-40F2-9448-5D7F495B97A0} {FDF801D9-90CC-4CBD-9F53-7F32F7EDF4F1} = {860946E4-CC77-4FDA-A4FD-3DB2A502A696} {73AA8A18-15C4-405B-BBF4-5D41C1CE44AD} = {4C142567-C42B-40F5-B092-798882190209} - {77E2FCC0-4CA6-436C-BE6F-9418CB807D45} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} - {E25E7778-0B2F-4A0B-BCD6-1DE95320B531} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {950BADD0-AD5A-4F58-87EC-4ADAECBEA89B} = {5D2D3BE8-9910-45CA-8E45-95660DA4C563} {5E241BE1-FFB6-49F2-98B4-7869BA7D9F5A} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {8D783A73-0BE3-423E-8FF6-984125C07BFE} = {A2A4342E-024B-4063-B10C-1DA96CA3046D} {63562B0A-E501-42C2-97BB-13D3AD3A7DB4} = {F765035E-F4F4-4CFA-BA02-755DC677AA97} {9BC63BEC-F305-451D-BB31-262938EA964D} = {4C142567-C42B-40F5-B092-798882190209} {9AC6D791-811E-4D6A-B08E-93F0093EF268} = {75A820AB-0F21-40F2-9448-5D7F495B97A0} - {9DE0AA56-0DE7-4ADC-BAAC-CD38B7139EBC} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {570B0FF9-246F-4C6C-8384-F6BE1887A4A9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {7CA99C7B-E3A2-4DE6-9D6C-314AE39BBBB7} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {75D71310-ECF7-4592-9E35-3FE540040982} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {F32FDA80-B6DD-47A8-8681-437E2C0D3F31} = {4C142567-C42B-40F5-B092-798882190209} - {B84ECB15-5E3F-4BD1-AB87-333BAE9B70F9} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} {1DBBC150-F085-43EF-B41D-27C72D133770} = {4C142567-C42B-40F5-B092-798882190209} - {370ADF53-DFFA-461E-B72A-1302C0A0DE00} = {A47B451D-3162-410F-BAF7-C650C4B7A4B0} - {33CC6216-3F30-4B5A-BB29-C5B47EFFA713} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} {B33E576F-2279-4BFC-A438-D9B84343B56B} = {1AC70118-C90F-4EC6-9D8B-C628BDF900F7} {3A3CB33C-64D9-4948-86C1-0D86320D23C3} = {1AC70118-C90F-4EC6-9D8B-C628BDF900F7} {ACD2C831-BDA2-4512-B4CC-75E8E1804F73} = {A2A4342E-024B-4063-B10C-1DA96CA3046D} {EFD2472E-B0E1-442A-9057-BBEA2517064B} = {75A820AB-0F21-40F2-9448-5D7F495B97A0} - {25F98E38-0249-45BC-B2ED-7899297B9CF6} = {F5F744B5-803E-4180-B82A-8B1F0BCD6579} {BF32DE1B-6276-4341-B212-F8862ADBBA7A} = {25F10A0B-7259-404C-86BE-FD2363C92F72} - {16D8043D-C3DB-4868-BFF3-B2EBDF537AAA} = {B175D318-B4D0-49EA-9AEF-A54ACA2F03DC} {0BE7189B-F04E-4C0C-BBE9-F347C0A59FEE} = {25F10A0B-7259-404C-86BE-FD2363C92F72} - {4F0E7E04-F067-4CE8-B8C8-1105F319D123} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} {1123EAAD-3FE3-4FD8-8DF6-4DDCF13EFCFB} = {A2A4342E-024B-4063-B10C-1DA96CA3046D} - {A1A3EB96-46CE-4F2F-A3B6-EF869043DD49} = {9D5D9861-AE68-429C-8B21-2263F9DA07A1} {53782603-3096-40C2-ABD3-F8F311BAE4BE} = {4C142567-C42B-40F5-B092-798882190209} - {E8C458AE-7B42-4DCE-B326-7F3A9065EA19} = {52AE329E-B588-40D0-A578-8D0DB1BD83E5} - {3C855DB2-EEA3-415C-A0A8-C834DEC40531} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} - {991E796A-D1D1-48B8-B9AA-95C2744FE112} = {E4508D15-6503-4A29-ADC4-27B3A5E99545} {FB9ED2C4-94A0-4004-A498-3F29A9D5BB5D} = {A2A4342E-024B-4063-B10C-1DA96CA3046D} {FBE1FA7B-E699-4BB2-9C8F-41F4C9F3F088} = {4C142567-C42B-40F5-B092-798882190209} - {1AC5A693-3CC4-4450-AA76-70DA4F0C29DF} = {A7ED9F01-7D78-4381-90A6-D50E51C17250} - {A9A83BE5-271B-4347-9C4D-340FC3BD0B2B} = {22ADD4CD-092E-4ADC-A21E-64CF42230152} {BD176B28-49CD-4FAD-A430-CDBCF1C2E514} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {7C67FF28-1B9E-4F13-8BDA-B833D588BC6A} = {25F10A0B-7259-404C-86BE-FD2363C92F72} - {AF6049CC-E60E-4174-9AB6-9AA282DE3A31} = {E4508D15-6503-4A29-ADC4-27B3A5E99545} - {5BFE4386-3C42-4118-96C8-4B68441F1661} = {E4508D15-6503-4A29-ADC4-27B3A5E99545} {6A7B231E-36AA-4647-8C1A-FB1540ABC813} = {25F10A0B-7259-404C-86BE-FD2363C92F72} {B686C194-D71D-4FF0-8B4F-F53AFBCD962F} = {75A820AB-0F21-40F2-9448-5D7F495B97A0} {164A5B9A-E684-4B3F-9EF4-B7765FC0A8A1} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {B4EABB0D-E495-405C-B7B1-E2A7A3711AF5} = {FC791F56-C1F1-4C41-A193-868D8197F8E2} {DA355C86-866F-4843-9B4D-63A173C750FB} = {4C142567-C42B-40F5-B092-798882190209} {AB574F65-1402-4476-9314-74DCDAF19097} = {5D2D3BE8-9910-45CA-8E45-95660DA4C563} - {2FC40214-A4AA-45DC-9C93-72ED800C40B0} = {75608B5C-1C03-4B38-810E-14EED5165E59} {00B72ED7-00E9-47F7-868D-8162027CD068} = {1AE1AC60-5D2F-4CA7-AE20-888F44551185} {040F754C-17F4-4B5F-B974-93F1E39D107F} = {75608B5C-1C03-4B38-810E-14EED5165E59} {62E9A8E4-79AF-4081-84D5-FEC5A0B28598} = {FC791F56-C1F1-4C41-A193-868D8197F8E2} {AD4FDC24-B64D-4ED7-91AA-62C9EDA12FA4} = {4C142567-C42B-40F5-B092-798882190209} + {66BE41FC-FC52-48D0-9C04-BCE8CC393020} = {4C142567-C42B-40F5-B092-798882190209} + {42F46D75-ED70-46B4-8B0F-BAB923E3AC59} = {4C142567-C42B-40F5-B092-798882190209} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FF877973-604D-4EA7-B5F5-A129961F9EF2} EndGlobalSection + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\sources\shared\Xenko.NuGetResolver\Xenko.NuGetResolver.projitems*{00b72ed7-00e9-47f7-868d-8162027cd068}*SharedItemsImports = 13 + ..\sources\assets\Xenko.Core.Assets.Yaml\Xenko.Core.Assets.Yaml.projitems*{1e54a9a2-4439-4444-ae57-6d2ed3c0dc47}*SharedItemsImports = 5 + ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{1e54a9a2-4439-4444-ae57-6d2ed3c0dc47}*SharedItemsImports = 5 + ..\sources\editor\Xenko.Editor.CrashReport\Xenko.Editor.CrashReport.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 5 + ..\sources\editor\Xenko.PrivacyPolicy\Xenko.PrivacyPolicy.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 5 + ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 5 + ..\sources\shared\Xenko.NuGetResolver\Xenko.NuGetResolver.projitems*{2fca2d8b-b10f-4dca-9847-4221f74ba586}*SharedItemsImports = 5 + ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{39ae9c77-e94b-404f-8768-b6261b3c1e0e}*SharedItemsImports = 5 + ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{3a3cb33c-64d9-4948-86c1-0d86320d23c3}*SharedItemsImports = 13 + ..\sources\shared\Xenko.NuGetResolver\Xenko.NuGetResolver.projitems*{50d1a3bb-4b41-4ef5-8d2f-3618a3b6c698}*SharedItemsImports = 5 + ..\sources\editor\Xenko.Core.MostRecentlyUsedFiles\Xenko.Core.MostRecentlyUsedFiles.projitems*{5863574d-7a55-49bc-8e65-babb74d8e66e}*SharedItemsImports = 5 + ..\sources\editor\Xenko.PrivacyPolicy\Xenko.PrivacyPolicy.projitems*{950badd0-ad5a-4f58-87ec-4adaecbea89b}*SharedItemsImports = 13 + ..\sources\editor\Xenko.Core.MostRecentlyUsedFiles\Xenko.Core.MostRecentlyUsedFiles.projitems*{9ac6d791-811e-4d6a-b08e-93f0093ef268}*SharedItemsImports = 13 + ..\sources\editor\Xenko.Editor.CrashReport\Xenko.Editor.CrashReport.projitems*{ab574f65-1402-4476-9314-74dcdaf19097}*SharedItemsImports = 13 + ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{b33e576f-2279-4bfc-a438-d9b84343b56b}*SharedItemsImports = 13 + ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{c121a566-555e-42b9-9b0a-1696529a9088}*SharedItemsImports = 5 + ..\sources\shared\Xenko.Core.ShellHelper\Xenko.Core.ShellHelper.projitems*{e8b3553f-a79f-4e50-b75b-acee771c320c}*SharedItemsImports = 5 + ..\sources\engine\Xenko.Shared\Refactor\Xenko.Refactor.projitems*{fb06c76a-6bb7-40be-9afa-fec13b045fb5}*SharedItemsImports = 5 + ..\sources\assets\Xenko.Core.Assets.Yaml\Xenko.Core.Assets.Yaml.projitems*{fb9ed2c4-94a0-4004-a498-3f29a9d5bb5d}*SharedItemsImports = 13 + EndGlobalSection EndGlobal diff --git a/build/compile.bat b/build/compile.bat index 4cfe2eb499..31643c3d12 100644 --- a/build/compile.bat +++ b/build/compile.bat @@ -153,7 +153,7 @@ rem Compile our solution. The following variables needs to be set: rem "Project" is the solution name rem "_platform_target" is the platform being targeted :compile -set _option=/nologo /nr:false /m /verbosity:%__BuildVerbosity% /p:Configuration=%__BuildType% /p:Platform="%_platform_target%" /p:XenkoSkipUnitTests=%__SkipTestBuild% %Project% +set _option=/nologo /nr:false /m /verbosity:%__BuildVerbosity% /p:Configuration=%__BuildType% /p:Platform="%_platform_target%" /p:XenkoSkipUnitTests=%__SkipTestBuild% %Project% /p:DeployExtension=false if "%__BuildDoc%" == "1" set _option=%_option% /p:XenkoGenerateDoc=true diff --git a/deps/AssemblyProcessor/Mono.Cecil.Mdb.dll b/deps/AssemblyProcessor/Mono.Cecil.Mdb.dll index 65b2b47d73..b41526d642 100644 --- a/deps/AssemblyProcessor/Mono.Cecil.Mdb.dll +++ b/deps/AssemblyProcessor/Mono.Cecil.Mdb.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8cb8c40bb34158c28fe278d78b67219532cc241ae0ca69831b931be0320e5d0 -size 43520 +oid sha256:f5104aa2f42fd15d36a3c82c0d60b98c4f4e14e2dd0c027bcaf952ba1ecc1c2a +size 43008 diff --git a/deps/AssemblyProcessor/Mono.Cecil.Pdb.dll b/deps/AssemblyProcessor/Mono.Cecil.Pdb.dll index 97d17e6c4a..aa3bd6116f 100644 --- a/deps/AssemblyProcessor/Mono.Cecil.Pdb.dll +++ b/deps/AssemblyProcessor/Mono.Cecil.Pdb.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58a6cd3764a15ba9715fa4cc53ea0e61fbf9a8a0d4206762af40aea9167abe63 -size 87040 +oid sha256:a4788b2153629c49ab75297fa273ac0ca7ab0b799d36442ada968ed037023c71 +size 86528 diff --git a/deps/AssemblyProcessor/Mono.Cecil.Rocks.dll b/deps/AssemblyProcessor/Mono.Cecil.Rocks.dll index a45c8a9d66..6d1c9f4ee4 100644 --- a/deps/AssemblyProcessor/Mono.Cecil.Rocks.dll +++ b/deps/AssemblyProcessor/Mono.Cecil.Rocks.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ddd6eb7e03cf200af3c560fe5717cbcca4b3df8932ac8511f7a2ad3dc1382390 +oid sha256:31183b063f8043437c07fd3e7168517e0a7ad588b9270190f3cf74556db955ee size 27648 diff --git a/deps/AssemblyProcessor/Mono.Cecil.dll b/deps/AssemblyProcessor/Mono.Cecil.dll index 8b8e871696..190f8ecbfc 100644 --- a/deps/AssemblyProcessor/Mono.Cecil.dll +++ b/deps/AssemblyProcessor/Mono.Cecil.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2802ecd87ca6c9cf35e4a4c2c40130139178d2b432eb65ab97b6464e77ff2c3c -size 342528 +oid sha256:2c91802e6e95afc1d113f486df8c9c03792cb4898da219f0eb212bdd04fb3478 +size 339456 diff --git a/deps/AssemblyProcessor/README.md b/deps/AssemblyProcessor/README.md new file mode 100644 index 0000000000..96c0f4b850 --- /dev/null +++ b/deps/AssemblyProcessor/README.md @@ -0,0 +1,2 @@ +Please update identity as soon as AssemblyProcessor is recompiled. +This can be done by bumping version (i.e. currently ".Packed2.exe") doing a mass file replace. diff --git a/deps/AssemblyProcessor/System.ValueTuple.dll b/deps/AssemblyProcessor/System.ValueTuple.dll index f0cd47696d..ff4b6fb42b 100644 --- a/deps/AssemblyProcessor/System.ValueTuple.dll +++ b/deps/AssemblyProcessor/System.ValueTuple.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79fac2e8355a7bbb94d40d25fe0e34d5cedf5426a176f20f1ccd5e0606f0f082 -size 79200 +oid sha256:ad95c2b972a0bdd45513e26813ecd397b9cc557e66e9fe26ce5633a695c41d1a +size 24776 diff --git a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.exe b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.exe index cc4b4a89e3..5ccb1f868b 100644 --- a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.exe +++ b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17befecc20fbc92b84ef07b4b8edadc8f4ec96f9b7704c2ef19370cce7383499 -size 751616 +oid sha256:7d823c469184eadc6a6dbc322104e6c75ec290b48d704135811a184b4df1de5b +size 688128 diff --git a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.pdb b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.pdb deleted file mode 100644 index eb2c1b8745..0000000000 --- a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.pdb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:439302c79ab66131bf0f23eca868c2ad21f9442991cf532db2829640764915e4 -size 298496 diff --git a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.exe b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.exe new file mode 100644 index 0000000000..f15a832d79 --- /dev/null +++ b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae0d82addb30df18d3236770c583bd72e69a5b2fd5355b9314586f054dbc7c68 +size 690176 diff --git a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.exe.config b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.exe.config similarity index 100% rename from deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed.exe.config rename to deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.exe.config diff --git a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.pdb b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.pdb new file mode 100644 index 0000000000..a6239dfa2c --- /dev/null +++ b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.Packed2.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f8df5c9613d925197995194e6ee4eb91f7bd105950a3b2297d2b4984df1cf98 +size 302592 diff --git a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.exe b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.exe index d4fceeac6d..12302ade50 100644 --- a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.exe +++ b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de9f92bec3b9a30f85fdc0bd1f3fb4ac49968ce1bbec5a46cb6bca3157aedf19 -size 154624 +oid sha256:1ec781e548b880b7820a35d1865f3773a1b790c272881688d8ef639a40380d02 +size 156672 diff --git a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.pdb b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.pdb index 2532ee2925..ea8f985763 100644 --- a/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.pdb +++ b/deps/AssemblyProcessor/Xenko.Core.AssemblyProcessor.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2cb9d4d4cf1369a47060c4bbdda3b9313cc593d65274f9dfd970b01233137306 -size 409088 +oid sha256:7b8ea5c3e1d0dd2e06ff8d895f5349006ce9136b5a8ee9f2b183f79250c01c3c +size 439808 diff --git a/deps/BulletPhysics/Android/arm64-v8a/libbulletc.so b/deps/BulletPhysics/Android/arm64-v8a/libbulletc.so index 0f20a65e3d..ae4a295180 100644 --- a/deps/BulletPhysics/Android/arm64-v8a/libbulletc.so +++ b/deps/BulletPhysics/Android/arm64-v8a/libbulletc.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab8a771f504afd34885178f1fc8ae507b0c45130d3365eea443c8ab774171c4b -size 1385560 +oid sha256:82a8f2cdff26a6627a4f105a55587ef66d98ea678c192eeda350b4679808eb97 +size 3483168 diff --git a/deps/BulletPhysics/Android/armeabi-v7a/libbulletc.so b/deps/BulletPhysics/Android/armeabi-v7a/libbulletc.so index d0e53bf242..16889cb9d7 100644 --- a/deps/BulletPhysics/Android/armeabi-v7a/libbulletc.so +++ b/deps/BulletPhysics/Android/armeabi-v7a/libbulletc.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61c96e5134d8db1266175b05d76862c38bf8ef8adea010302009a966be4088f3 -size 1213064 +oid sha256:c3eac3a1573588914e8b21479753d5eeba20023047913b05f9df54f48d5c3dc7 +size 2843512 diff --git a/deps/BulletPhysics/Android/armeabi/libbulletc.so b/deps/BulletPhysics/Android/armeabi/libbulletc.so deleted file mode 100644 index c3bda905e1..0000000000 --- a/deps/BulletPhysics/Android/armeabi/libbulletc.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bf96f0c0e80e24962fae176a5870ee9c0872c17de833f7281f4711ab509756dc -size 1340040 diff --git a/deps/BulletPhysics/Android/x86/libbulletc.so b/deps/BulletPhysics/Android/x86/libbulletc.so index ac0c3018f1..d78870bd85 100644 --- a/deps/BulletPhysics/Android/x86/libbulletc.so +++ b/deps/BulletPhysics/Android/x86/libbulletc.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b134a167f8ce0e8ca5d67bdd057cb7ac5652d2ff359b92ef39e8ae069345c7e9 -size 1622648 +oid sha256:1a915bc1e2d31fdf7b27ac5dcdf231962711593b99c5d555a17222012aa67926 +size 4088704 diff --git a/deps/BulletPhysics/Android/x86_64/libbulletc.so b/deps/BulletPhysics/Android/x86_64/libbulletc.so index 800ca998ec..c8577c81a0 100644 --- a/deps/BulletPhysics/Android/x86_64/libbulletc.so +++ b/deps/BulletPhysics/Android/x86_64/libbulletc.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be7d933991e1b7acbca7c7cace80a7482e2ec0587fa0b0dc04fb401f35d60ffc -size 1643888 +oid sha256:83530aac2a491d7dc3f08ec1a631bca7bb7a029e8f9466fde1c745a2f0f78910 +size 4233016 diff --git a/deps/BulletPhysics/BulletSharp.NetStandard.dll b/deps/BulletPhysics/BulletSharp.NetStandard.dll new file mode 100644 index 0000000000..42a7d2e865 --- /dev/null +++ b/deps/BulletPhysics/BulletSharp.NetStandard.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a64b88b2dde526c0c857ac999d84ab76580c93f50c5b49920cc68027c52f6abe +size 775168 diff --git a/deps/BulletPhysics/BulletSharp.dll.config b/deps/BulletPhysics/BulletSharp.NetStandard.dll.config similarity index 100% rename from deps/BulletPhysics/BulletSharp.dll.config rename to deps/BulletPhysics/BulletSharp.NetStandard.dll.config diff --git a/deps/BulletPhysics/Linux/libbulletc.so b/deps/BulletPhysics/Linux/libbulletc.so index 6eab26dcaf..c02933f636 100644 --- a/deps/BulletPhysics/Linux/libbulletc.so +++ b/deps/BulletPhysics/Linux/libbulletc.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ebd4c5e85f5821b69f486273eb71e14e763ec07f1273389893f273a710a210d -size 2250240 +oid sha256:71e26f26f4b92e5cc08ea30b35d6a7bdd644f4abc2b29a40ae53752ff0b8acd6 +size 4028808 diff --git a/deps/BulletPhysics/UWP/ARM/libbulletc.dll b/deps/BulletPhysics/UWP/ARM/libbulletc.dll index 348004d7d0..7de06f29a8 100644 --- a/deps/BulletPhysics/UWP/ARM/libbulletc.dll +++ b/deps/BulletPhysics/UWP/ARM/libbulletc.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d607e869c81b0381a1ebc1c81dfe3114a75a2f22062b3c51ff60ad6895293f95 -size 1041408 +oid sha256:e66db69a02c1d423dc5dd01354129c459b9f6207ee4f94e4f81ebe7bc671c10c +size 1321472 diff --git a/deps/BulletPhysics/UWP/x64/libbulletc.dll b/deps/BulletPhysics/UWP/x64/libbulletc.dll index 81756da7e4..928b91ad40 100644 --- a/deps/BulletPhysics/UWP/x64/libbulletc.dll +++ b/deps/BulletPhysics/UWP/x64/libbulletc.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65944df8541ceb6ba9feafa87e1feef7012a7d514b2d3ec793abe9b180ffcb18 -size 1471488 +oid sha256:a3216d1b3ee9829fdb1eba3d007f36ef22f2fd32f5af7b8c62262ab874037cd5 +size 1835520 diff --git a/deps/BulletPhysics/UWP/x86/libbulletc.dll b/deps/BulletPhysics/UWP/x86/libbulletc.dll index a2cbf207fb..614a48ae04 100644 --- a/deps/BulletPhysics/UWP/x86/libbulletc.dll +++ b/deps/BulletPhysics/UWP/x86/libbulletc.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbaa97cb8bc5f6c4c696866eb299703602345d06b3b6fdf805c259b8b340e05b -size 1319936 +oid sha256:6d10abaf888b6d62b6f792b13984af90b7f4948dea6893b75d81763979be0ea6 +size 1605632 diff --git a/deps/BulletPhysics/Windows/BulletSharp.dll b/deps/BulletPhysics/Windows/BulletSharp.dll deleted file mode 100644 index 22e7b5bac2..0000000000 --- a/deps/BulletPhysics/Windows/BulletSharp.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9c57615a3883cd197e5273e2453db931fbe86233343f9606a52578cdce598419 -size 349696 diff --git a/deps/BulletPhysics/Windows/x64/libbulletc.dll b/deps/BulletPhysics/Windows/x64/libbulletc.dll index 98c279f3c3..b3a6a2cdbb 100644 --- a/deps/BulletPhysics/Windows/x64/libbulletc.dll +++ b/deps/BulletPhysics/Windows/x64/libbulletc.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:981a393e6b7f7533ada4a92c0b64073783dda5afd3ac8708ba5ae5404d0c23b5 -size 1458176 +oid sha256:fbbcadaafd01684a9d7a60ad4582d34f9511077391e9c6b93d7749fda083c9b0 +size 2078720 diff --git a/deps/BulletPhysics/Windows/x86/libbulletc.dll b/deps/BulletPhysics/Windows/x86/libbulletc.dll index 61e1fe90d2..a04dfda0db 100644 --- a/deps/BulletPhysics/Windows/x86/libbulletc.dll +++ b/deps/BulletPhysics/Windows/x86/libbulletc.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6a499af30345c340367f4a2f8cc707562265fcb185ba80fe73b6361fb4c1720 -size 1310208 +oid sha256:64b4e7de363c529ac57454eb5c0f96d2b93ab4608fed4917f1a22d9476774b9d +size 1814016 diff --git a/deps/BulletPhysics/checkout.bat b/deps/BulletPhysics/checkout.bat index 24ecc3cc03..39b42902db 100644 --- a/deps/BulletPhysics/checkout.bat +++ b/deps/BulletPhysics/checkout.bat @@ -6,5 +6,5 @@ IF NOT ERRORLEVEL 0 ( ECHO "Could not find git.exe" EXIT /B %ERRORLEVEL% ) -%GIT_CMD% clone git@github.com:xenko3d/bullet2-sharp-mobile.git ../../externals/bullet2-sharp-mobile +%GIT_CMD% clone https://github.com/phr00t/bullet2-sharp-mobile.git ../../externals/bullet2-sharp-mobile if NOT ERRORLEVEL 0 pause diff --git a/deps/BulletPhysics/iOS/BulletSharp.NetStandard.dll b/deps/BulletPhysics/iOS/BulletSharp.NetStandard.dll new file mode 100644 index 0000000000..565f01de8f --- /dev/null +++ b/deps/BulletPhysics/iOS/BulletSharp.NetStandard.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd8dc4520f55e8538fe382546fda918290060a3541540d0b571ac1fb81ce6279 +size 775168 diff --git a/deps/BulletPhysics/iOS/BulletSharp.dll b/deps/BulletPhysics/iOS/BulletSharp.dll deleted file mode 100644 index f175db1dbc..0000000000 --- a/deps/BulletPhysics/iOS/BulletSharp.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:408af31baf63f03950999ad096c35c10256b5bc5a35cd7eeabffa71c415e0212 -size 343552 diff --git a/deps/BulletPhysics/iOS/libbulletc.a b/deps/BulletPhysics/iOS/libbulletc.a index d9ac3e44b4..07f2dde586 100644 --- a/deps/BulletPhysics/iOS/libbulletc.a +++ b/deps/BulletPhysics/iOS/libbulletc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fc1710bff0091f7433f0505172b19b0770b053270d083c4f645386cf3f59a2a -size 12409032 +oid sha256:1b81f4bebe9ece9d4fb77eb2d60b634d38e35529160142ba3eb91bf752713124 +size 6412480 diff --git a/deps/BulletPhysics/macOS/libbulletc.dylib b/deps/BulletPhysics/macOS/libbulletc.dylib index d8c6cb9acf..ce23cbbf67 100644 --- a/deps/BulletPhysics/macOS/libbulletc.dylib +++ b/deps/BulletPhysics/macOS/libbulletc.dylib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3e02e0a238b46223917e9af6b14a8e89bde6238c454431f93a8c23f6363994c -size 1340892 +oid sha256:93032ee2c5f19b34034cd3f4b0fabc4773e091c993814755be87fdfe589c30a6 +size 2900016 diff --git a/deps/BulletPhysics/sign.bat b/deps/BulletPhysics/sign.bat deleted file mode 100644 index fa32b4a9af..0000000000 --- a/deps/BulletPhysics/sign.bat +++ /dev/null @@ -1,12 +0,0 @@ -call "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\vc\vcvarsall.bat" x86 - -ildasm /all /out:Windows\BulletSharp.il Windows\BulletSharp.dll -ildasm /all /out:iOS\BulletSharp.il iOS\BulletSharp.dll - -@echo "Please patch Windows\BulletSharp.il and iOS\BulletSharp.il Xenko.Core.Mathematics reference with .publickeytoken = ( BA CA CC 89 C3 B6 D5 56 )" -pause - -mkdir Windows\Signed -mkdir iOS\Signed -ilasm /dll /key:..\..\build\paradox.snk /output:Windows\Signed\BulletSharp.dll Windows\BulletSharp.il -ilasm /dll /key:..\..\build\paradox.snk /output:iOS\Signed\BulletSharp.dll iOS\BulletSharp.il \ No newline at end of file diff --git a/deps/FreeImage/Debug/x64/FreeImage.dll b/deps/FreeImage/Debug/x64/FreeImage.dll index f16234f8ac..907eb022b9 100644 --- a/deps/FreeImage/Debug/x64/FreeImage.dll +++ b/deps/FreeImage/Debug/x64/FreeImage.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:153acbe894674a98df589059868d7dacb79538016ddc59f3ef8fc437f76e389c -size 10278912 +oid sha256:938ef7c5798b7a48e5c5e92b08576d1c1f605d4bee3cfe7e20dcc4f68f9f67c6 +size 10181632 diff --git a/deps/FreeImage/Debug/x64/FreeImageNET.dll b/deps/FreeImage/Debug/x64/FreeImageNET.dll index 3a667996a9..6044966063 100644 --- a/deps/FreeImage/Debug/x64/FreeImageNET.dll +++ b/deps/FreeImage/Debug/x64/FreeImageNET.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc6242fba03afcf566e69ec53bb5bd8eafedf468b7cc184e256de62b295b3578 -size 216064 +oid sha256:6e9b8880eb5a5b17312b301121a92103987caeb51762c706e05e403540d7c0a0 +size 207360 diff --git a/deps/FreeImage/Debug/x64/FreeImageNET.pdb b/deps/FreeImage/Debug/x64/FreeImageNET.pdb index 0d4a3b6efe..69d08959b9 100644 --- a/deps/FreeImage/Debug/x64/FreeImageNET.pdb +++ b/deps/FreeImage/Debug/x64/FreeImageNET.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b449b3fc030dc76515aa5f790872e03d9f2cfdb8e41e15e6ee2a77adc03f05e7 -size 632320 +oid sha256:2da587e23a15ab3d38913ca927855e4a739d459d6a2eb426796b80b86b022190 +size 114292 diff --git a/deps/FreeImage/Debug/x86/FreeImage.dll b/deps/FreeImage/Debug/x86/FreeImage.dll index f9d23db166..514dea263a 100644 --- a/deps/FreeImage/Debug/x86/FreeImage.dll +++ b/deps/FreeImage/Debug/x86/FreeImage.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:909054b49f2044dafc494b34b382edee9799165c920b2c03aded3de043a792db -size 8317440 +oid sha256:755220fc93c27d4d61a0ec7b7ec927398710a2392280ba0fc82cf7bb796a17cb +size 8183296 diff --git a/deps/FreeImage/Debug/x86/FreeImageNET.dll b/deps/FreeImage/Debug/x86/FreeImageNET.dll index a67f9122f3..c261131435 100644 --- a/deps/FreeImage/Debug/x86/FreeImageNET.dll +++ b/deps/FreeImage/Debug/x86/FreeImageNET.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa711c552b119d962e1a73d65e14754ae7b380f04fbb25942b8e0c8c384d5fbd -size 208384 +oid sha256:98cfaa7f3ac7af8d28c8a0db6c075f37c9bb136a257c40086ca89a4882490ee2 +size 207872 diff --git a/deps/FreeImage/Debug/x86/FreeImageNET.pdb b/deps/FreeImage/Debug/x86/FreeImageNET.pdb index 69d1c78a9b..69d08959b9 100644 --- a/deps/FreeImage/Debug/x86/FreeImageNET.pdb +++ b/deps/FreeImage/Debug/x86/FreeImageNET.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcae597e214511c042ade778ad18203f9b90a04b618d11255c88caaf856dd840 -size 632320 +oid sha256:2da587e23a15ab3d38913ca927855e4a739d459d6a2eb426796b80b86b022190 +size 114292 diff --git a/deps/FreeImage/Release/x64/FreeImage.dll b/deps/FreeImage/Release/x64/FreeImage.dll index c564bee80b..97272eb2cd 100644 --- a/deps/FreeImage/Release/x64/FreeImage.dll +++ b/deps/FreeImage/Release/x64/FreeImage.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f539b6c800c105ee63115b5945e761979e51cf93df8d1d79b5814b5d62a73275 -size 4319744 +oid sha256:819b8ae2d021300f75be8a09347bc07b0bfbfc01e0127ba869122a2d092697ea +size 4257280 diff --git a/deps/FreeImage/Release/x64/FreeImageNET.dll b/deps/FreeImage/Release/x64/FreeImageNET.dll index c962ecf7ff..2596f3ee5f 100644 --- a/deps/FreeImage/Release/x64/FreeImageNET.dll +++ b/deps/FreeImage/Release/x64/FreeImageNET.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b15c3c45f74479fda13e6b3a9461f6b3c8d5d06a10ccc72744a2f6aa64733b5 -size 188928 +oid sha256:9cc7333845e364a8c5982806ad4416fad7a35c1d18af67048f4ac611c74658f9 +size 179712 diff --git a/deps/FreeImage/Release/x86/FreeImage.dll b/deps/FreeImage/Release/x86/FreeImage.dll index 95ea7495d8..886fd6b823 100644 --- a/deps/FreeImage/Release/x86/FreeImage.dll +++ b/deps/FreeImage/Release/x86/FreeImage.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aeba34601ef81af851e475a7ab46785ed621af8cb08e30f11f69ea16c20f66b2 -size 3649536 +oid sha256:2822d5b96ce00cea46c413aa0efb0485662f4c99ca100ecafa2406693b4f2f6c +size 3625984 diff --git a/deps/FreeImage/Release/x86/FreeImageNET.dll b/deps/FreeImage/Release/x86/FreeImageNET.dll index ed52aaea20..1dc56c0a5f 100644 --- a/deps/FreeImage/Release/x86/FreeImageNET.dll +++ b/deps/FreeImage/Release/x86/FreeImageNET.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a6b7fe075820a0a51186c5cd42d67183de4879589dcdaaab84777af529263b2 +oid sha256:8bea695a9a8503ba0cf943e253b60ce838407724db78f27c89ea3a89aaf89215 size 180224 diff --git a/deps/GraphX/GraphX.PCL.Common.dll b/deps/GraphX/GraphX.PCL.Common.dll deleted file mode 100644 index 2a32026ea5..0000000000 --- a/deps/GraphX/GraphX.PCL.Common.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ca07cc8586f560fd7defa3ff5aa6d091dcf51dbe96532421c3aa6b6bd687f04d -size 42496 diff --git a/deps/GraphX/GraphX.PCL.Logic.dll b/deps/GraphX/GraphX.PCL.Logic.dll deleted file mode 100644 index 06c5433099..0000000000 --- a/deps/GraphX/GraphX.PCL.Logic.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a203e08182fe37ec1c7d15d3a13a45542bb03bd93e5a7bd2dd51ad29a6afa548 -size 229888 diff --git a/deps/GraphX/GraphX.WPF.Controls.dll b/deps/GraphX/GraphX.WPF.Controls.dll deleted file mode 100644 index 2abad3d423..0000000000 --- a/deps/GraphX/GraphX.WPF.Controls.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ebcdfb455e11513ada8d9b3980b0bdf39b1fcd24cdc7b6bf14c914d6324280d -size 212480 diff --git a/deps/GraphX/LICENSE.txt b/deps/GraphX/LICENSE.txt deleted file mode 100644 index e06d208186..0000000000 --- a/deps/GraphX/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/deps/GraphX/QuickGraph.dll b/deps/GraphX/QuickGraph.dll deleted file mode 100644 index eeb7b4cbde..0000000000 --- a/deps/GraphX/QuickGraph.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:18eff726aef1330c1b6112d5a7d680177db777fd7ae633f25b8ab618304fed03 -size 322048 diff --git a/deps/MoltenVK/macOS/libvulkan.1.dylib b/deps/MoltenVK/macOS/libvulkan.1.dylib index a04f234b6b..bd2f2e3f7d 100644 --- a/deps/MoltenVK/macOS/libvulkan.1.dylib +++ b/deps/MoltenVK/macOS/libvulkan.1.dylib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb860118682d68a0beacb649c303c11d13079f688389dd90b9a229ea5b41122d -size 2711036 +oid sha256:ae6930ed4e79eafbcb84599187bc30ff151a2c8c65a304615b8c77a2836bbcaa +size 13639344 diff --git a/deps/Mono.Cecil/Mono.Cecil.Rocks.dll b/deps/Mono.Cecil/Mono.Cecil.Rocks.dll deleted file mode 100644 index a45c8a9d66..0000000000 --- a/deps/Mono.Cecil/Mono.Cecil.Rocks.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ddd6eb7e03cf200af3c560fe5717cbcca4b3df8932ac8511f7a2ad3dc1382390 -size 27648 diff --git a/deps/Mono.Cecil/build.bat b/deps/Mono.Cecil/build.bat deleted file mode 100644 index 4f542efaf9..0000000000 --- a/deps/Mono.Cecil/build.bat +++ /dev/null @@ -1,3 +0,0 @@ -call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\vc\vcvarsall.bat" x86 -msbuild ..\..\externals\il-repack\cecil\Mono.Cecil.sln /Property:Configuration=net_4_0_Release;Platform="Any CPU" -copy ..\..\externals\il-repack\cecil\bin\net_4_0_Release\*.* . diff --git a/deps/Mono.Cecil/checkout.bat b/deps/Mono.Cecil/checkout.bat deleted file mode 100644 index 1b8d8366f8..0000000000 --- a/deps/Mono.Cecil/checkout.bat +++ /dev/null @@ -1,2 +0,0 @@ -echo "Checking out ILRepack which contains Cecil" -..\ILRepack\checkout.bat diff --git a/deps/NativePath/Android/armeabi/libCelt.a b/deps/NativePath/Android/armeabi/libCelt.a deleted file mode 100644 index 6bd0377998..0000000000 --- a/deps/NativePath/Android/armeabi/libCelt.a +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ffe0ca7e62578766c8d5ac3fd0ea4001294f381732cc5a041e309216e2d7d1b9 -size 182544 diff --git a/deps/NativePath/Android/armeabi/libCompilerRt.a b/deps/NativePath/Android/armeabi/libCompilerRt.a deleted file mode 100644 index 3d4d980564..0000000000 --- a/deps/NativePath/Android/armeabi/libCompilerRt.a +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:41383584d35792884e2a021117c31c1abfee18659b01b4b9c10ac824d142ddc6 -size 199828 diff --git a/deps/NativePath/Android/armeabi/libDetour.a b/deps/NativePath/Android/armeabi/libDetour.a deleted file mode 100644 index f39366d594..0000000000 --- a/deps/NativePath/Android/armeabi/libDetour.a +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b704dd1eb9b24b979bdc31e3264ba07285860cc9fb2950517b39ad7d325a257d -size 118280 diff --git a/deps/NativePath/Android/armeabi/libNativePath.a b/deps/NativePath/Android/armeabi/libNativePath.a deleted file mode 100644 index 4173a41b36..0000000000 --- a/deps/NativePath/Android/armeabi/libNativePath.a +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:98cd07ec978374121d4e9665dbbde79baf348fccdb9da595a51a37d747e08630 -size 97782 diff --git a/deps/NativePath/Android/armeabi/libRecast.a b/deps/NativePath/Android/armeabi/libRecast.a deleted file mode 100644 index 982dabad2e..0000000000 --- a/deps/NativePath/Android/armeabi/libRecast.a +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:75c6e83bf98aabd7e2354ac1eeefae9f8070282709144f66ea1a382d63836c94 -size 161256 diff --git a/deps/NativePath/Android/armeabi/libc++abi.a b/deps/NativePath/Android/armeabi/libc++abi.a deleted file mode 100644 index c157c1e223..0000000000 --- a/deps/NativePath/Android/armeabi/libc++abi.a +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ade1d31240ecc07561f3f96368398fe1dc5f79795e958a15e12c0033e984a469 -size 2275308 diff --git a/deps/Nuget/NuGet.exe b/deps/Nuget/NuGet.exe index 72ebed5875..e6b0aa8159 100644 --- a/deps/Nuget/NuGet.exe +++ b/deps/Nuget/NuGet.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:399ec24c26ed54d6887cde61994bb3d1cada7956c1b19ff880f06f060c039918 -size 4266712 +oid sha256:ae3bb02517b52a744833a4777e99d647cd80b29a62fd360e9aabaa34f09af59c +size 6661528 diff --git a/deps/OpenAL/Windows/OpenAL.dll b/deps/OpenAL/Windows/OpenAL.dll new file mode 100644 index 0000000000..70e620a236 --- /dev/null +++ b/deps/OpenAL/Windows/OpenAL.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5eee04c029b6564b6a3ff00388212e4380dc89391dd4bd9ba8cf7109c6b764a5 +size 727040 diff --git a/deps/OpenAL/Windows/OpenAL32.dll b/deps/OpenAL/Windows/OpenAL32.dll new file mode 100644 index 0000000000..dd03536e85 --- /dev/null +++ b/deps/OpenAL/Windows/OpenAL32.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:741f4f01699c551b16adb810be8790ac691765f9a84543869092dd38e9ac01b9 +size 640000 diff --git a/deps/OpenTK/.gitignore b/deps/OpenTK/.gitignore deleted file mode 100644 index 348b3e3568..0000000000 --- a/deps/OpenTK/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pdb -*.nupkg \ No newline at end of file diff --git a/deps/OpenTK/Android/OpenTK-1.1.dll b/deps/OpenTK/Android/OpenTK-1.1.dll deleted file mode 100644 index 7d6ead3ef5..0000000000 --- a/deps/OpenTK/Android/OpenTK-1.1.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d21d9811e85755709093f047afdd015af2407b1d09fa326e0337962993fd8412 -size 1732096 diff --git a/deps/OpenTK/CoreCLR/Linux/OpenTK.dll b/deps/OpenTK/CoreCLR/Linux/OpenTK.dll deleted file mode 100644 index db135da8e2..0000000000 --- a/deps/OpenTK/CoreCLR/Linux/OpenTK.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02727386ebfacb0c7702ee9742116ccf9bebd83dced385163c59110326607a32 -size 4407808 diff --git a/deps/OpenTK/CoreCLR/Windows/OpenTK.dll b/deps/OpenTK/CoreCLR/Windows/OpenTK.dll deleted file mode 100644 index fb041afb12..0000000000 --- a/deps/OpenTK/CoreCLR/Windows/OpenTK.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b72c6c6d110a9f4fbeffbe25d45172e96aea96137d881fe05b4277d7e88bd3d5 -size 4408320 diff --git a/deps/OpenTK/CoreCLR/macOS/OpenTK.dll b/deps/OpenTK/CoreCLR/macOS/OpenTK.dll deleted file mode 100644 index 1b7e7ac45b..0000000000 --- a/deps/OpenTK/CoreCLR/macOS/OpenTK.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f15eee117c1aa3656b3fc642bb6e79819bec9b52dfdf638f9f551b2a1241f335 -size 4407808 diff --git a/deps/OpenTK/Linux/OpenTK.dll b/deps/OpenTK/Linux/OpenTK.dll deleted file mode 100644 index 20f71da264..0000000000 --- a/deps/OpenTK/Linux/OpenTK.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f106371b9971f518e74173e815009a15aff3a0a71377c532dd30727183c497c6 -size 4406272 diff --git a/deps/OpenTK/Linux/OpenTK.dll.config b/deps/OpenTK/Linux/OpenTK.dll.config deleted file mode 100644 index 7098d39e9c..0000000000 --- a/deps/OpenTK/Linux/OpenTK.dll.config +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deps/OpenTK/OpenTK.dll b/deps/OpenTK/OpenTK.dll deleted file mode 100644 index 9ceff79153..0000000000 --- a/deps/OpenTK/OpenTK.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e96b4f836d579244f0ee90a5603a20561417daae942a534600a62ee20fc6aca3 -size 4616192 diff --git a/deps/OpenTK/OpenTK.dll.config b/deps/OpenTK/OpenTK.dll.config deleted file mode 100644 index 7098d39e9c..0000000000 --- a/deps/OpenTK/OpenTK.dll.config +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deps/OpenTK/Xenko.OpenTK.nuspec b/deps/OpenTK/Xenko.OpenTK.nuspec deleted file mode 100644 index a8b293282d..0000000000 --- a/deps/OpenTK/Xenko.OpenTK.nuspec +++ /dev/null @@ -1,19 +0,0 @@ - - - - Xenko.OpenTK - 1.0.2 - Xenko contributors and OpenTK team - Xenko contributors and OpenTK team - false - OpenTK for Xenko - - - - - - - - - - \ No newline at end of file diff --git a/deps/OpenTK/build-debug.bat b/deps/OpenTK/build-debug.bat deleted file mode 100644 index 5af814a99c..0000000000 --- a/deps/OpenTK/build-debug.bat +++ /dev/null @@ -1,10 +0,0 @@ -@echo off - -rem If not already loaded, setup VisualStudio -if "%VisualStudioVersion%" EQ "" call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\vc\vcvarsall.bat" x86 - -msbuild ..\..\externals\opentk\OpenTK.sln /Property:Configuration=Debug;Platform="Any CPU" -copy ..\..\externals\opentk\Binaries\OpenTK\Debug\OpenTK.dll . -copy ..\..\externals\opentk\Binaries\OpenTK\Debug\OpenTK.pdb . -copy ..\..\externals\opentk\Binaries\OpenTK\Debug\OpenTK.GLControl.dll . -copy ..\..\externals\opentk\Binaries\OpenTK\Debug\OpenTK.GLControl.pdb . diff --git a/deps/OpenTK/build.bat b/deps/OpenTK/build.bat deleted file mode 100644 index 0e9c06ed5b..0000000000 --- a/deps/OpenTK/build.bat +++ /dev/null @@ -1,28 +0,0 @@ -@echo off - -rem If not already loaded, setup VisualStudio -call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\vc\vcvarsall.bat" x86 - -set opentk=..\..\externals\opentk - -pushd %opentk% -..\..\build\.nuget\NuGet.exe restore OpenTK.sln -..\..\build\.nuget\NuGet.exe restore source\OpenTK\OpenTK.NETStandard.csproj -popd - -REM NET Standard -msbuild %opentk%\source\OpenTK\OpenTK.NETStandard.csproj /Property:Configuration=Release;Platform="AnyCPU" -copy /Y %opentk%\Binaries\OpenTK\Release\netstandard2.0\OpenTK.dll . -copy /Y %opentk%\Binaries\OpenTK\Release\netstandard2.0\OpenTK.pdb . - -REM Android -msbuild %opentk%\OpenTK.Android.sln /Property:Configuration=Release;Platform="Any CPU" -if not exist Android mkdir Android -copy /Y %opentk%\Binaries\Android\Release\OpenTK-1.1.dll Android -copy /Y %opentk%\Binaries\Android\Release\OpenTK-1.1.dll.mdb Android - -REM iOS -msbuild %opentk%\OpenTK.iOS.sln /Property:Configuration=Release;Platform="Any CPU" -if not exist iOS mkdir iOS -copy /Y %opentk%\Binaries\iOS\Release\OpenTK-1.1.dll iOS -copy /Y %opentk%\Binaries\iOS\Release\OpenTK-1.1.dll.mdb iOS diff --git a/deps/OpenTK/checkout.bat b/deps/OpenTK/checkout.bat deleted file mode 100644 index b9e0aa72e6..0000000000 --- a/deps/OpenTK/checkout.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo OFF -setlocal -set HOME=%USERPROFILE% -CALL ..\find_git.cmd -IF NOT ERRORLEVEL 0 ( - ECHO "Could not find git.exe" - EXIT /B %ERRORLEVEL% -) -%GIT_CMD% clone git@github.com:xenko3d/opentk ../../externals/opentk -b develop -if NOT ERRORLEVEL 0 pause -pushd ..\..\externals\opentk -%GIT_CMD% remote add upstream git@github.com:opentk/opentk.git -%GIT_CMD% fetch --all -popd -if NOT ERRORLEVEL 0 pause \ No newline at end of file diff --git a/deps/OpenTK/iOS/OpenTK-1.1.dll b/deps/OpenTK/iOS/OpenTK-1.1.dll deleted file mode 100644 index a2366ee942..0000000000 --- a/deps/OpenTK/iOS/OpenTK-1.1.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce8fb17099a496a07a4481b9663b06da7ce02f7e065fe177b82551f8b2136ba4 -size 457216 diff --git a/deps/OpenTK/iOS/link.bat b/deps/OpenTK/iOS/link.bat deleted file mode 100644 index ee55e4a7da..0000000000 --- a/deps/OpenTK/iOS/link.bat +++ /dev/null @@ -1,5 +0,0 @@ -pushd ..\..\..\bin\iOS-OpenGLES -..\..\deps\Mono.Cecil\monolinker -a Xenko.Engine.dll -a Xenko.Games.dll -a Xenko.Input.dll -a Xenko.Graphics.dll -p link OpenTK-1.1 -u copy -b true -d "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Xamarin.iOS\v1.0" -popd - -copy ..\..\..\bin\iOS-OpenGLES\output\OpenTK-1.1.dll . \ No newline at end of file diff --git a/deps/OpenTK/license.txt b/deps/OpenTK/license.txt deleted file mode 100644 index 61edfe258f..0000000000 --- a/deps/OpenTK/license.txt +++ /dev/null @@ -1,27 +0,0 @@ -Source: http://www.opentk.com/project/license - -The Open Toolkit library license -Copyright (c) 2006 - 2013 Stefanos Apostolopoulos (stapostol@gmail.com) for the Open Toolkit library. -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. -Third parties -OpenTK.Platform.Windows and OpenTK.Platform.X11 include portions of the Mono class library. These portions are covered by the following license: -Copyright (c) 2004 Novell, Inc. -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. -OpenTK.Compatibility includes portions of the Tao Framework library (Tao.OpenGl, Tao.OpenAl and Tao.Platform.Windows.SimpleOpenGlControl). These portions are covered by the following license: -Copyright (c) 2003-2007 Tao Framework Team -http://www.taoframework.com -All rights reserved. -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. -OpenTK.Half offers Half-to-Single and Single-to-Half conversions based on OpenEXR source code, which is covered by the following license: -Copyright (c) 2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC. All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name of Industrial Light & Magic nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/deps/OpenTK/macOS/OpenTK.dll b/deps/OpenTK/macOS/OpenTK.dll deleted file mode 100644 index a2d08f1eb0..0000000000 --- a/deps/OpenTK/macOS/OpenTK.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57989c07a4d16349d83da90644d1d42315c484536dfa3c70db6ba8a5af922b6a -size 4406784 diff --git a/deps/OpenVR/Linux/libopenvr_api.so b/deps/OpenVR/Linux/libopenvr_api.so new file mode 100644 index 0000000000..129f237aab --- /dev/null +++ b/deps/OpenVR/Linux/libopenvr_api.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd77728b5ea0b93ee01e678c9a5f9d47e4ea8f90f41ba9dcfb6a164b1e2a83ac +size 325366 diff --git a/deps/OpenVR/Windows/x64/openvr_api.dll b/deps/OpenVR/Windows/x64/openvr_api.dll index eda79981b9..4fb8fe0b55 100644 --- a/deps/OpenVR/Windows/x64/openvr_api.dll +++ b/deps/OpenVR/Windows/x64/openvr_api.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:877b038c01486f6014b7711f3d5d9f8c59d976d032edc8915261d2b5656d5098 -size 314656 +oid sha256:71db78e77e577db6d0666c25437695d42ceafb9c7f8da94fbe765525b8e2f5f2 +size 819664 diff --git a/deps/OpenVR/Windows/x86/openvr_api.dll b/deps/OpenVR/Windows/x86/openvr_api.dll index 644ae0761c..e49ec9df6f 100644 --- a/deps/OpenVR/Windows/x86/openvr_api.dll +++ b/deps/OpenVR/Windows/x86/openvr_api.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4ddd7ea3fe7bfffa07867c07a7651b2a141e0d61aefe24b1d7dea7f832eafc2 -size 267040 +oid sha256:965d24d2b097880475fb825d7675c819e42dc392209c742dd0fbf23ad322e005 +size 621520 diff --git a/deps/OpenXR/openxr_loader.dll b/deps/OpenXR/openxr_loader.dll new file mode 100644 index 0000000000..db9bda3498 --- /dev/null +++ b/deps/OpenXR/openxr_loader.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d255fc8a2cb893712673b5de39bb308fb578df9dede972fd2e2240d850397eb2 +size 1959424 diff --git a/deps/PVRTT/include/PVRTArray.h b/deps/PVRTT/include/PVRTArray.h index 9697e0709f..487ddbae09 100644 --- a/deps/PVRTT/include/PVRTArray.h +++ b/deps/PVRTT/include/PVRTArray.h @@ -57,7 +57,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief constructor from ordinary array. + @brief Constructor from ordinary array. @param[in] pArray an ordinary array @param[in] uiSize number of elements passed *****************************************************************************/ @@ -73,7 +73,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief constructor from a capacity and initial value. + @brief Constructor from a capacity and initial value. @param[in] uiSize initial capacity @param[in] val value to populate with *****************************************************************************/ @@ -192,7 +192,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief Changes the array to the new size + @brief Changes the array to the new size. @param[in] uiSize New size of array *****************************************************************************/ EPVRTError Resize(const unsigned int uiSize) @@ -207,7 +207,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief Expands array to new capacity + @brief Expands array to new capacity. @param[in] uiSize New capacity of array *****************************************************************************/ EPVRTError SetCapacity(const unsigned int uiSize) @@ -274,7 +274,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief assignment operator. + @brief Assignment operator. @param[in] other The CPVRTArray needing copied *****************************************************************************/ CPVRTArray& operator=(const CPVRTArray& other) @@ -286,7 +286,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief appends an existing CPVRTArray on to this one. + @brief Appends an existing CPVRTArray on to this one. @param[in] other the array to append. *****************************************************************************/ CPVRTArray& operator+=(const CPVRTArray& other) @@ -304,30 +304,30 @@ class CPVRTArray /*!*************************************************************************** @brief Indexed access into array. Note that this has no error - checking whatsoever + checking whatsoever. @param[in] uiIndex index of element in array @return the element indexed *****************************************************************************/ T& operator[](const unsigned int uiIndex) { - _ASSERT(uiIndex < m_uiCapacity); + _ASSERT(uiIndex < m_uiSize); return m_pArray[uiIndex]; } /*!*************************************************************************** - @brief Indexed access into array. Note that this has no error checking whatsoever + @brief Indexed access into array. Note that this has no error checking whatsoever. @param[in] uiIndex index of element in array @return The element indexed *****************************************************************************/ const T& operator[](const unsigned int uiIndex) const { - _ASSERT(uiIndex < m_uiCapacity); + _ASSERT(uiIndex < m_uiSize); return m_pArray[uiIndex]; } /*!*************************************************************************** @return Size of array - @brief Gives current size of array/number of elements + @brief Gives current size of array/number of elements. *****************************************************************************/ unsigned int GetSize() const { @@ -335,7 +335,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief Gives the default size of array/number of elements + @brief Gives the default size of array/number of elements. @return Default size of array *****************************************************************************/ static unsigned int GetDefaultSize() @@ -344,7 +344,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief Gives current allocated size of array/number of elements + @brief Gives current allocated size of array/number of elements. @return Capacity of array *****************************************************************************/ unsigned int GetCapacity() const @@ -422,7 +422,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief Removes the last element. Simply decrements the size value + @brief Removes the last element. Simply decrements the size value. @return success or failure *****************************************************************************/ virtual EPVRTError RemoveLast() @@ -446,7 +446,7 @@ class CPVRTArray }; /*!*************************************************************************** - @brief Internal sort algorithm + @brief Internal sort algorithm. @param[in] first The beginning index of the array @param[in] last The last index of the array @param[in] predicate A functor object to perform the comparison @@ -465,7 +465,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief Internal sort algorithm - in-place merge method + @brief Internal sort algorithm - in-place merge method. @param[in] first The beginning index of the array @param[in] middle The middle index of the array @param[in] last The last index of the array @@ -512,7 +512,7 @@ class CPVRTArray } /*!*************************************************************************** - @brief Internal sort algorithm - returns the bounded index of the range + @brief Internal sort algorithm - returns the bounded index of the range. @param[in] first The beginning index of the array @param[in] last The last index of the array @param[in] v Comparison object @@ -543,7 +543,7 @@ class CPVRTArray /*!*************************************************************************** @brief Internal sort algorithm - rotates the contents of the array such - that the middle becomes the first element + that the middle becomes the first element. @param[in] first The beginning index of the array @param[in] middle The middle index of the array @param[in] last The last index of the array @@ -634,7 +634,7 @@ class CPVRTArrayManagedPointers : public CPVRTArray } /*!*************************************************************************** - @brief Removes the last element. Simply decrements the size value + @brief Removes the last element. Simply decrements the size value. @return success or failure *****************************************************************************/ virtual EPVRTError RemoveLast() diff --git a/deps/PVRTT/include/PVRTDecompress.h b/deps/PVRTT/include/PVRTDecompress.h index 91f2b8e683..174b46074c 100644 --- a/deps/PVRTT/include/PVRTDecompress.h +++ b/deps/PVRTT/include/PVRTDecompress.h @@ -10,7 +10,7 @@ #define _PVRTDECOMPRESS_H_ /*!*********************************************************************** - @brief Decompresses PVRTC to RGBA 8888 + @brief Decompresses PVRTC to RGBA 8888. @param[in] pCompressedData The PVRTC texture data to decompress @param[in] Do2bitMode Signifies whether the data is PVRTC2 or PVRTC4 @param[in] XDim X dimension of the texture @@ -25,7 +25,7 @@ int PVRTDecompressPVRTC(const void *pCompressedData, unsigned char* pResultImage); /*!*********************************************************************** - @brief Decompresses ETC to RGBA 8888 + @brief Decompresses ETC to RGBA 8888. @param[in] pSrcData The ETC texture data to decompress @param[in] x X dimension of the texture @param[in] y Y dimension of the texture diff --git a/deps/PVRTT/include/PVRTGlobal.h b/deps/PVRTT/include/PVRTGlobal.h index 158b619aa0..729778f836 100644 --- a/deps/PVRTT/include/PVRTGlobal.h +++ b/deps/PVRTT/include/PVRTGlobal.h @@ -2,7 +2,7 @@ @file PVRTGlobal.h @copyright Copyright (c) Imagination Technologies Limited. - @brief Global defines and typedefs for PVRTools + @brief Global defines and typedefs for PVRTools. ******************************************************************************/ #ifndef _PVRTGLOBAL_H_ @@ -56,8 +56,8 @@ #else #if defined(__linux__) || defined(__APPLE__) -#include #ifdef _DEBUG +#include #ifndef _RPT0 #define _RPT0(a,b) printf(b) #endif @@ -65,10 +65,10 @@ #define _RPT1(a,b,c) printf(b,c) #endif #ifndef _ASSERT -#define _ASSERT(a) assert(a) +#define _ASSERT(a) if (!(a)) ::raise(SIGTRAP) #endif #ifndef _ASSERTE -#define _ASSERTE(a) assert(a) +#define _ASSERTE(a) if (!(a)) ::raise(SIGTRAP) #endif #else #ifndef _RPT0 @@ -93,33 +93,6 @@ #ifndef _RPT4 #define _RPT4(a,b,c,d,e,f)((void)0) #endif -#include -#include -#ifndef BYTE -#define BYTE unsigned char -#endif -#ifndef WORD -#define WORD unsigned short -#endif -#ifndef DWORD -#define DWORD unsigned int -#endif -#if !defined(BOOL) && !defined(OBJC_BOOL_DEFINED) -#define BOOL int -#endif -typedef struct tagRGBQUAD -{ - BYTE rgbBlue; - BYTE rgbGreen; - BYTE rgbRed; - BYTE rgbReserved; -} RGBQUAD; -#if !defined(TRUE) -#define TRUE 1 -#endif -#if !defined(FALSE) -#define FALSE 0 -#endif #else #define _CRT_WARN 0 #define _RPT0(a,b) @@ -134,6 +107,7 @@ typedef struct tagRGBQUAD #endif #include +#include #define FREE(X) { if(X) { free(X); (X) = 0; } } @@ -188,12 +162,13 @@ PVRTSIZEASSERT(PVRTfloat32, 4); /*!************************************************************************** @enum ETextureFilter - @brief Enum values for defining texture filtering + @brief Enum values for defining texture filtering. ****************************************************************************/ enum ETextureFilter { eFilter_Nearest, eFilter_Linear, + eFilter_Cubic, eFilter_None, eFilter_Size, @@ -203,7 +178,7 @@ enum ETextureFilter /*!************************************************************************** @enum ETextureWrap - @brief Enum values for defining texture wrapping + @brief Enum values for defining texture wrapping. ****************************************************************************/ enum ETextureWrap { @@ -218,7 +193,7 @@ enum ETextureWrap ** swap template function ****************************************************************************/ /*!*************************************************************************** - @brief A swap template function that swaps a and b + @brief A swap template function that swaps a and b. @param[in] a Type a @param[in] b Type b *****************************************************************************/ @@ -248,7 +223,7 @@ inline T PVRTClamp(const T& val, const T& min, const T& max) } /*!*************************************************************************** - @brief Swaps the endianness of pBytes in place + @brief Swaps the endianness of pBytes in place. @param[in] pBytes A number @param[in] i32ByteNo Number of bytes in pBytes *****************************************************************************/ @@ -261,7 +236,7 @@ inline void PVRTByteSwap(unsigned char* pBytes, int i32ByteNo) } /*!*************************************************************************** - @brief Converts the endianness of an unsigned int + @brief Converts the endianness of an unsigned int. @param[in] ui32Long A number @return ui32Long with its endianness changed *****************************************************************************/ @@ -271,7 +246,7 @@ inline unsigned int PVRTByteSwap32(unsigned int ui32Long) } /*!*************************************************************************** - @brief Converts the endianness of a unsigned short + @brief Converts the endianness of a unsigned short. @param[in] ui16Short A number @return ui16Short with its endianness changed *****************************************************************************/ @@ -281,7 +256,7 @@ inline unsigned short PVRTByteSwap16(unsigned short ui16Short) } /*!*************************************************************************** - @brief Returns true if the platform the code is ran on is little endian + @brief Returns true if the platform the code is ran on is little endian. @return True if the platform the code is ran on is little endian *****************************************************************************/ inline bool PVRTIsLittleEndian() @@ -302,7 +277,7 @@ inline bool PVRTIsLittleEndian() /*!*************************************************************************** - @brief Minimum of a, b. In case of tie, a is returned + @brief Minimum of a, b. In case of tie, a is returned. @return Returns b if a > b, otherwise a *****************************************************************************/ template @@ -312,7 +287,7 @@ inline const T& PVRTMin(const T& a, const T& b) } /*!*************************************************************************** - @brief Maximum of a, b. In case of tie, a is returned + @brief Maximum of a, b. In case of tie, a is returned. @return Returns b if a < b. otherwise a *****************************************************************************/ template diff --git a/deps/PVRTT/include/PVRTString.h b/deps/PVRTT/include/PVRTString.h index d42adeaf68..5138ca39d5 100644 --- a/deps/PVRTT/include/PVRTString.h +++ b/deps/PVRTT/include/PVRTString.h @@ -15,7 +15,7 @@ /*!*************************************************************************** @class CPVRTString - @brief A string class + @brief A string class. *****************************************************************************/ #if defined(_WINDLL_EXPORT) @@ -50,14 +50,14 @@ class CPVRTString /*!*********************************************************************** - @brief CPVRTString constructor + @brief CPVRTString constructor. @param[in] _Ptr A string @param[in] _Count Length of _Ptr ************************************************************************/ CPVRTString(const char* _Ptr, size_t _Count = npos); /*!*********************************************************************** - @brief CPVRTString constructor + @brief CPVRTString constructor. @param[in] _Right A string @param[in] _Roff Offset into _Right @param[in] _Count Number of chars from _Right to assign to the new string @@ -65,37 +65,37 @@ class CPVRTString CPVRTString(const CPVRTString& _Right, size_t _Roff = 0, size_t _Count = npos); /*!*********************************************************************** - @brief CPVRTString constructor + @brief CPVRTString constructor. @param[in] _Count Length of new string @param[in] _Ch A char to fill it with *************************************************************************/ CPVRTString(size_t _Count, const char _Ch); /*!*********************************************************************** - @brief Constructor + @brief Constructor. @param[in] _Ch A char *************************************************************************/ CPVRTString(const char _Ch); /*!*********************************************************************** - @brief Constructor + @brief Constructor. ************************************************************************/ CPVRTString(); /*!*********************************************************************** - @brief Destructor + @brief Destructor. ************************************************************************/ virtual ~CPVRTString(); /*!*********************************************************************** - @brief Appends a string + @brief Appends a string. @param[in] _Ptr A string @return Updated string *************************************************************************/ CPVRTString& append(const char* _Ptr); /*!*********************************************************************** - @brief Appends a string of length _Count + @brief Appends a string of length _Count. @param[in] _Ptr A string @param[in] _Count String length @return Updated string @@ -103,14 +103,14 @@ class CPVRTString CPVRTString& append(const char* _Ptr, size_t _Count); /*!*********************************************************************** - @brief Appends a string + @brief Appends a string. @param[in] _Str A string @return Updated string *************************************************************************/ CPVRTString& append(const CPVRTString& _Str); /*!*********************************************************************** - @brief Appends _Count letters of _Str from _Off in _Str + @brief Appends _Count letters of _Str from _Off in _Str. @param[in] _Str A string @param[in] _Off A position in string @param[in] _Count Number of letters to append @@ -119,7 +119,7 @@ class CPVRTString CPVRTString& append(const CPVRTString& _Str, size_t _Off, size_t _Count); /*!*********************************************************************** - @brief Appends _Ch _Count times + @brief Appends _Ch _Count times. @param[in] _Ch A char @param[in] _Count Number of times to append _Ch @return Updated string @@ -129,14 +129,14 @@ class CPVRTString //template CPVRTString& append(InputIterator _First, InputIterator _Last); /*!*********************************************************************** - @brief Assigns the string to the string _Ptr + @brief Assigns the string to the string _Ptr. @param[in] _Ptr A string @return Updated string *************************************************************************/ CPVRTString& assign(const char* _Ptr); /*!*********************************************************************** - @brief Assigns the string to the string _Ptr + @brief Assigns the string to the string _Ptr. @param[in] _Ptr A string @param[in] _Count Length of _Ptr @return Updated string @@ -144,14 +144,14 @@ class CPVRTString CPVRTString& assign(const char* _Ptr, size_t _Count); /*!*********************************************************************** - @brief Assigns the string to the string _Str + @brief Assigns the string to the string _Str. @param[in] _Str A string @return Updated string *************************************************************************/ CPVRTString& assign(const CPVRTString& _Str); /*!*********************************************************************** - @brief Assigns the string to _Count characters in string _Str starting at _Off + @brief Assigns the string to _Count characters in string _Str starting at _Off. @param[in] _Str A string @param[in] _Off First char to start assignment from @param[in] _Count Length of _Str @@ -160,7 +160,7 @@ class CPVRTString CPVRTString& assign(const CPVRTString& _Str, size_t _Off, size_t _Count=npos); /*!*********************************************************************** - @brief Assigns the string to _Count copies of _Ch + @brief Assigns the string to _Count copies of _Ch. @param[in] _Ch A string @param[in] _Count Number of times to repeat _Ch @return Updated string @@ -176,31 +176,31 @@ class CPVRTString // iterator begin(); /*!*********************************************************************** - @brief Returns a const char* pointer of the string + @brief Returns a const char* pointer of the string. @return const char* pointer of the string *************************************************************************/ const char* c_str() const; /*!*********************************************************************** - @brief Returns the size of the character array reserved + @brief Returns the size of the character array reserved. @return The size of the character array reserved *************************************************************************/ size_t capacity() const; /*!*********************************************************************** - @brief Clears the string + @brief Clears the string. *************************************************************************/ void clear(); /*!*********************************************************************** - @brief Compares the string with _Str + @brief Compares the string with _Str. @param[in] _Str A string to compare with @return 0 if the strings match *************************************************************************/ int compare(const CPVRTString& _Str) const; /*!*********************************************************************** - @brief Compares the string with _Str + @brief Compares the string with _Str. @param[in] _Pos1 Position to start comparing from @param[in] _Num1 Number of chars to compare @param[in] _Str A string to compare with @@ -209,7 +209,7 @@ class CPVRTString int compare(size_t _Pos1, size_t _Num1, const CPVRTString& _Str) const; /*!*********************************************************************** - @brief Compares the string with _Str + @brief Compares the string with _Str. @param[in] _Pos1 Position to start comparing from @param[in] _Num1 Number of chars to compare @param[in] _Str A string to compare with @@ -220,14 +220,14 @@ class CPVRTString int compare(size_t _Pos1, size_t _Num1, const CPVRTString& _Str, size_t _Off, size_t _Count) const; /*!*********************************************************************** - @brief Compares the string with _Ptr + @brief Compares the string with _Ptr. @param[in] _Ptr A string to compare with @return 0 if the strings match *************************************************************************/ int compare(const char* _Ptr) const; /*!*********************************************************************** - @brief Compares the string with _Ptr + @brief Compares the string with _Ptr. @param[in] _Pos1 Position to start comparing from @param[in] _Num1 Number of chars to compare @param[in] _Ptr A string to compare with @@ -236,7 +236,7 @@ class CPVRTString int compare(size_t _Pos1, size_t _Num1, const char* _Ptr) const; /*!*********************************************************************** - @brief Compares the string with _Str + @brief Compares the string with _Str. @param[in] _Pos1 Position to start comparing from @param[in] _Num1 Number of chars to compare @param[in] _Ptr A string to compare with @@ -246,35 +246,35 @@ class CPVRTString int compare(size_t _Pos1, size_t _Num1, const char* _Ptr, size_t _Count) const; /*!*********************************************************************** - @brief Less than operator + @brief Less than operator. @param[in] _Str A string to compare with @return True on success *************************************************************************/ bool operator<(const CPVRTString & _Str) const; /*!*********************************************************************** - @brief == Operator + @brief == Operator. @param[in] _Str A string to compare with @return True if they match *************************************************************************/ bool operator==(const CPVRTString& _Str) const; /*!*********************************************************************** - @brief == Operator + @brief == Operator. @param[in] _Ptr A string to compare with @return True if they match *************************************************************************/ bool operator==(const char* const _Ptr) const; /*!*********************************************************************** - @brief != Operator + @brief != Operator. @param[in] _Str A string to compare with @return True if they don't match *************************************************************************/ bool operator!=(const CPVRTString& _Str) const; /*!*********************************************************************** - @brief != Operator + @brief != Operator. @param[in] _Ptr A string to compare with @return True if they don't match *************************************************************************/ @@ -286,21 +286,21 @@ class CPVRTString @param[in] _Count Size of _Ptr @param[in] _Off Position to start copying from @return Number of bytes copied - @brief Copies the string to _Ptr + @brief Copies the string to _Ptr. *************************************************************************/ size_t copy(char* _Ptr, size_t _Count, size_t _Off = 0) const; /*!*********************************************************************** @fn data @return A const char* version of the string - @brief Returns a const char* version of the string + @brief Returns a const char* version of the string. *************************************************************************/ const char* data( ) const; /*!*********************************************************************** @fn empty @return True if the string is empty - @brief Returns true if the string is empty + @brief Returns true if the string is empty. *************************************************************************/ bool empty() const; @@ -311,7 +311,7 @@ class CPVRTString //iterator erase(iterator _It); /*!*********************************************************************** - @brief Erases a portion of the string + @brief Erases a portion of the string. @param[in] _Pos The position to start erasing from @param[in] _Count Number of chars to erase @return An updated string @@ -319,7 +319,7 @@ class CPVRTString CPVRTString& erase(size_t _Pos = 0, size_t _Count = npos); /*!*********************************************************************** - @brief Erases a portion of the string + @brief Erases a portion of the string. @param[in] _src Character to search @param[in] _subDes Character to substitute for @param[in] _all Substitute all @@ -328,7 +328,7 @@ class CPVRTString CPVRTString& substitute(char _src,char _subDes, bool _all = true); /*!*********************************************************************** - @brief Erases a portion of the string + @brief Erases a portion of the string. @param[in] _src Character to search @param[in] _subDes Character to substitute for @param[in] _all Substitute all @@ -357,7 +357,7 @@ class CPVRTString size_t find(const CPVRTString& _Str, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the first char that is not _Ch + @brief Returns the position of the first char that is not _Ch. @param[in] _Ch A char @param[in] _Off Start position of the find @return Position of the first char that is not _Ch @@ -365,7 +365,7 @@ class CPVRTString size_t find_first_not_of(char _Ch, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the first char that is not in _Ptr + @brief Returns the position of the first char that is not in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @return Position of the first char that is not in _Ptr @@ -373,7 +373,7 @@ class CPVRTString size_t find_first_not_of(const char* _Ptr, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the first char that is not in _Ptr + @brief Returns the position of the first char that is not in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @param[in] _Count Number of chars in _Ptr @@ -382,7 +382,7 @@ class CPVRTString size_t find_first_not_of(const char* _Ptr, size_t _Off, size_t _Count) const; /*!*********************************************************************** - @brief Returns the position of the first char that is not in _Str + @brief Returns the position of the first char that is not in _Str. @param[in] _Str A string @param[in] _Off Start position of the find @return Position of the first char that is not in _Str @@ -390,7 +390,7 @@ class CPVRTString size_t find_first_not_of(const CPVRTString& _Str, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the first char that is _Ch + @brief Returns the position of the first char that is _Ch. @param[in] _Ch A char @param[in] _Off Start position of the find @return Position of the first char that is _Ch @@ -398,7 +398,7 @@ class CPVRTString size_t find_first_of(char _Ch, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the first char that matches a char in _Ptr + @brief Returns the position of the first char that matches a char in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @return Position of the first char that matches a char in _Ptr @@ -406,7 +406,7 @@ class CPVRTString size_t find_first_of(const char* _Ptr, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the first char that matches a char in _Ptr + @brief Returns the position of the first char that matches a char in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @param[in] _Count Size of _Ptr @@ -415,7 +415,7 @@ class CPVRTString size_t find_first_of(const char* _Ptr, size_t _Off, size_t _Count) const; /*!*********************************************************************** - @brief Returns the position of the first char that matches all chars in _Ptr + @brief Returns the position of the first char that matches all chars in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @param[in] _Count Size of _Ptr @@ -425,7 +425,7 @@ class CPVRTString /*!*********************************************************************** - @brief Returns the position of the first char that matches a char in _Str + @brief Returns the position of the first char that matches a char in _Str. @param[in] _Str A string @param[in] _Off Start position of the find @return Position of the first char that matches a char in _Str @@ -433,7 +433,7 @@ class CPVRTString size_t find_first_of(const CPVRTString& _Str, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the last char that is not _Ch + @brief Returns the position of the last char that is not _Ch. @param[in] _Ch A char @param[in] _Off Start position of the find @return Position of the last char that is not _Ch @@ -441,7 +441,7 @@ class CPVRTString size_t find_last_not_of(char _Ch, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the last char that is not in _Ptr + @brief Returns the position of the last char that is not in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @return Position of the last char that is not in _Ptr @@ -449,7 +449,7 @@ class CPVRTString size_t find_last_not_of(const char* _Ptr, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the last char that is not in _Ptr + @brief Returns the position of the last char that is not in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @param[in] _Count Length of _Ptr @@ -458,7 +458,7 @@ class CPVRTString size_t find_last_not_of(const char* _Ptr, size_t _Off, size_t _Count) const; /*!*********************************************************************** - @brief Returns the position of the last char that is not in _Str + @brief Returns the position of the last char that is not in _Str. @param[in] _Str A string @param[in] _Off Start position of the find @return Position of the last char that is not in _Str @@ -466,7 +466,7 @@ class CPVRTString size_t find_last_not_of(const CPVRTString& _Str, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the last char that is _Ch + @brief Returns the position of the last char that is _Ch. @param[in] _Ch A char @param[in] _Off Start position of the find @return Position of the last char that is _Ch @@ -474,7 +474,7 @@ class CPVRTString size_t find_last_of(char _Ch, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the last char that is in _Ptr + @brief Returns the position of the last char that is in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @return Position of the last char that is in _Ptr @@ -482,7 +482,7 @@ class CPVRTString size_t find_last_of(const char* _Ptr, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the position of the last char that is in _Ptr + @brief Returns the position of the last char that is in _Ptr. @param[in] _Ptr A string @param[in] _Off Start position of the find @param[in] _Count Length of _Ptr @@ -491,7 +491,7 @@ class CPVRTString size_t find_last_of(const char* _Ptr, size_t _Off, size_t _Count) const; /*!*********************************************************************** - @brief Returns the position of the last char that is in _Str + @brief Returns the position of the last char that is in _Str. @param[in] _Str A string @param[in] _Off Start position of the find @return Position of the last char that is in _Str @@ -569,7 +569,7 @@ class CPVRTString int find_next_occurance_of(const CPVRTString& _Str, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the previous occurance of _Ch in the parent string + @brief Returns the previous occurance of _Ch in the parent string. before _Off. If not found, returns -1. @param[in] _Ch A char @param[in] _Off Start position of the find @@ -578,7 +578,7 @@ class CPVRTString int find_previous_occurance_of(char _Ch, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the previous occurance of _Ptr in the parent string + @brief Returns the previous occurance of _Ptr in the parent string. before _Off. If not found, returns -1. @param[in] _Ptr A string @param[in] _Off Start position of the find @@ -587,7 +587,7 @@ class CPVRTString int find_previous_occurance_of(const char* _Ptr, size_t _Off = 0) const; /*!*********************************************************************** - @brief Returns the previous occurance of _Ptr in the parent string + @brief Returns the previous occurance of _Ptr in the parent string. before _Off. If not found, returns -1. @param[in] _Ptr A string @param[in] _Off Start position of the find @@ -597,7 +597,7 @@ class CPVRTString int find_previous_occurance_of(const char* _Ptr, size_t _Off, size_t _Count) const; /*!*********************************************************************** - @brief Returns the previous occurance of _Str in the parent string + @brief Returns the previous occurance of _Str in the parent string. before _Off. If not found, returns -1. @param[in] _Str A string @param[in] _Off Start position of the find @@ -639,21 +639,21 @@ class CPVRTString /*!*********************************************************************** @fn length @return Length of the string - @brief Returns the length of the string + @brief Returns the length of the string. *************************************************************************/ size_t length() const; /*!*********************************************************************** @fn max_size @return The maximum number of chars that the string can contain - @brief Returns the maximum number of chars that the string can contain + @brief Returns the maximum number of chars that the string can contain. *************************************************************************/ size_t max_size() const; /*!*********************************************************************** @fn push_back @param[in] _Ch A char to append - @brief Appends _Ch to the string + @brief Appends _Ch to the string. *************************************************************************/ void push_back(char _Ch); @@ -678,7 +678,7 @@ class CPVRTString /*!*********************************************************************** @fn reserve @param[in] _Count Size of string to reserve - @brief Reserves space for _Count number of chars + @brief Reserves space for _Count number of chars. *************************************************************************/ void reserve(size_t _Count = 0); @@ -686,7 +686,7 @@ class CPVRTString @fn resize @param[in] _Count Size of string to resize to @param[in] _Ch Character to use to fill any additional space - @brief Resizes the string to _Count in length + @brief Resizes the string to _Count in length. *************************************************************************/ void resize(size_t _Count, char _Ch = char()); @@ -698,7 +698,7 @@ class CPVRTString /*!*********************************************************************** @fn size @return Size of the string - @brief Returns the size of the string + @brief Returns the size of the string. *************************************************************************/ size_t size() const; @@ -707,28 +707,28 @@ class CPVRTString @param[in] _Off Start of the substring @param[in] _Count Length of the substring @return A substring of the string - @brief Returns the size of the string + @brief Returns the size of the string. *************************************************************************/ CPVRTString substr(size_t _Off = 0, size_t _Count = npos) const; /*!*********************************************************************** @fn swap @param[in] _Str A string to swap with - @brief Swaps the contents of the string with _Str + @brief Swaps the contents of the string with _Str. *************************************************************************/ void swap(CPVRTString& _Str); /*!*********************************************************************** @fn toLower @return An updated string - @brief Converts the string to lower case + @brief Converts the string to lower case. *************************************************************************/ CPVRTString& toLower(); /*!*********************************************************************** @fn toUpper @return An updated string - @brief Converts the string to upper case + @brief Converts the string to upper case. *************************************************************************/ CPVRTString& toUpper(); @@ -736,7 +736,7 @@ class CPVRTString @fn format @param[in] pFormat A string containing the formating @return A formatted string - @brief return the formatted string + @brief Return the formatted string. ************************************************************************/ CPVRTString format(const char *pFormat, ...); @@ -746,69 +746,69 @@ class CPVRTString @param[in] pFormat A string containing the formatting. Positional modifiers may be used. @return A formatted string - @brief return the formatted string + @brief Return the formatted string. ************************************************************************/ CPVRTString formatPositional(const char *pFormat, ...); #endif /*!*********************************************************************** - @brief += Operator + @brief += Operator. @param[in] _Ch A char @return An updated string *************************************************************************/ CPVRTString& operator+=(char _Ch); /*!*********************************************************************** - @brief += Operator + @brief += Operator. @param[in] _Ptr A string @return An updated string *************************************************************************/ CPVRTString& operator+=(const char* _Ptr); /*!*********************************************************************** - @brief += Operator + @brief += Operator. @param[in] _Right A string @return An updated string *************************************************************************/ CPVRTString& operator+=(const CPVRTString& _Right); /*!*********************************************************************** - @brief = Operator + @brief = Operator. @param[in] _Ch A char @return An updated string *************************************************************************/ CPVRTString& operator=(char _Ch); /*!*********************************************************************** - @brief = Operator + @brief = Operator. @param[in] _Ptr A string @return An updated string *************************************************************************/ CPVRTString& operator=(const char* _Ptr); /*!*********************************************************************** - @brief = Operator + @brief = Operator. @param[in] _Right A string @return An updated string *************************************************************************/ CPVRTString& operator=(const CPVRTString& _Right); /*!*********************************************************************** - @brief [] Operator + @brief [] Operator. @param[in] _Off An index into the string @return A character *************************************************************************/ const_reference operator[](size_t _Off) const; /*!*********************************************************************** - @brief [] Operator + @brief [] Operator. @param[in] _Off An index into the string @return A character *************************************************************************/ reference operator[](size_t _Off); /*!*********************************************************************** - @brief + Operator + @brief + Operator. @param[in] _Left A string @param[in] _Right A string @return An updated string @@ -816,7 +816,7 @@ class CPVRTString friend CPVRTString operator+ (const CPVRTString& _Left, const CPVRTString& _Right); /*!*********************************************************************** - @brief + Operator + @brief + Operator. @param[in] _Left A string @param[in] _Right A string @return An updated string @@ -824,7 +824,7 @@ class CPVRTString friend CPVRTString operator+ (const CPVRTString& _Left, const char* _Right); /*!*********************************************************************** - @brief + Operator + @brief + Operator. @param[in] _Left A string @param[in] _Right A string @return An updated string @@ -832,7 +832,7 @@ class CPVRTString friend CPVRTString operator+ (const CPVRTString& _Left, const char _Right); /*!*********************************************************************** - @brief + Operator + @brief + Operator. @param[in] _Left A string @param[in] _Right A string @return An updated string @@ -841,7 +841,7 @@ class CPVRTString /*!*********************************************************************** - @brief + Operator + @brief + Operator. @param[in] _Left A string @param[in] _Right A string @return An updated string @@ -886,7 +886,7 @@ CPVRTString PVRTStringGetFileName(const CPVRTString& strFilePath); @fn PVRTStringStripWhiteSpaceFromStartOf @param[in] strLine A string @return Result of the white space stripping - @brief strips white space characters from the beginning of a CPVRTString. + @brief Strips white space characters from the beginning of a CPVRTString. ************************************************************************/ CPVRTString PVRTStringStripWhiteSpaceFromStartOf(const CPVRTString& strLine); @@ -894,7 +894,7 @@ CPVRTString PVRTStringStripWhiteSpaceFromStartOf(const CPVRTString& strLine); @fn PVRTStringStripWhiteSpaceFromEndOf @param[in] strLine A string @return Result of the white space stripping - @brief strips white space characters from the end of a CPVRTString. + @brief Strips white space characters from the end of a CPVRTString. ************************************************************************/ CPVRTString PVRTStringStripWhiteSpaceFromEndOf(const CPVRTString& strLine); @@ -902,7 +902,7 @@ CPVRTString PVRTStringStripWhiteSpaceFromEndOf(const CPVRTString& strLine); @fn PVRTStringFromFormattedStr @param[in] pFormat A string containing the formating @return A formatted string - @brief Creates a formatted string + @brief Creates a formatted string. ************************************************************************/ CPVRTString PVRTStringFromFormattedStr(const char *pFormat, ...); diff --git a/deps/PVRTT/include/PVRTTexture.h b/deps/PVRTT/include/PVRTTexture.h index 409914127d..23765f0c0a 100644 --- a/deps/PVRTT/include/PVRTTexture.h +++ b/deps/PVRTT/include/PVRTTexture.h @@ -107,6 +107,32 @@ enum EPVRTPixelFormat ePVRTPF_EAC_R11, ePVRTPF_EAC_RG11, + ePVRTPF_ASTC_4x4, + ePVRTPF_ASTC_5x4, + ePVRTPF_ASTC_5x5, + ePVRTPF_ASTC_6x5, + ePVRTPF_ASTC_6x6, + ePVRTPF_ASTC_8x5, + ePVRTPF_ASTC_8x6, + ePVRTPF_ASTC_8x8, + ePVRTPF_ASTC_10x5, + ePVRTPF_ASTC_10x6, + ePVRTPF_ASTC_10x8, + ePVRTPF_ASTC_10x10, + ePVRTPF_ASTC_12x10, + ePVRTPF_ASTC_12x12, + + ePVRTPF_ASTC_3x3x3, + ePVRTPF_ASTC_4x3x3, + ePVRTPF_ASTC_4x4x3, + ePVRTPF_ASTC_4x4x4, + ePVRTPF_ASTC_5x4x4, + ePVRTPF_ASTC_5x5x4, + ePVRTPF_ASTC_5x5x5, + ePVRTPF_ASTC_6x5x5, + ePVRTPF_ASTC_6x6x5, + ePVRTPF_ASTC_6x6x6, + //Invalid value ePVRTPF_NumCompressedPFs }; @@ -151,14 +177,14 @@ struct MetaDataBlock /*!*********************************************************************** @fn MetaDataBlock - @brief Meta Data Block Constructor + @brief Meta Data Block Constructor. *************************************************************************/ MetaDataBlock() : DevFOURCC(0), u32Key(0), u32DataSize(0), Data(NULL) {} /*!*********************************************************************** @fn MetaDataBlock - @brief Meta Data Block Copy Constructor + @brief Meta Data Block Copy Constructor. *************************************************************************/ MetaDataBlock(const MetaDataBlock& rhs) : DevFOURCC(rhs.DevFOURCC), u32Key(rhs.u32Key), u32DataSize(rhs.u32DataSize) { @@ -172,7 +198,7 @@ struct MetaDataBlock /*!*********************************************************************** @fn ~MetaDataBlock - @brief Meta Data Block Destructor + @brief Meta Data Block Destructor. *************************************************************************/ ~MetaDataBlock() { @@ -629,7 +655,7 @@ void PVRTGetFormatMinDims(PVRTuint64 u64PixelFormat, PVRTuint32 &minX, PVRTuint3 @param[in,out] NewHeader New header to output into. @param[in,out] pMetaData MetaData Map to output into. @brief Converts a legacy texture header (V1 or V2) to a current - generation header (V3) + generation header (V3). *************************************************************************/ void PVRTConvertOldTextureHeaderToV3(const PVR_Texture_Header* LegacyHeader, PVRTextureHeaderV3& NewHeader, CPVRTMap >* pMetaData); @@ -654,7 +680,7 @@ void PVRTMapLegacyTextureEnumToNewFormat(PVRTPixelType OldFormat, PVRTuint64& ne @param[in] nHeightSrc Height of source texture @param[in] nElementSize Bytes per pixel @param[in] bTwiddled True if the data is twiddled - @brief Needed by PVRTTextureTile() in the various PVRTTextureAPIs + @brief Needed by PVRTTextureTile() in the various PVRTTextureAPIs. *****************************************************************************/ void PVRTTextureLoadTiled( PVRTuint8 * const pDst, @@ -672,7 +698,7 @@ void PVRTTextureLoadTiled( @param[out] a Twiddled value @param[in] u Coordinate axis 0 @param[in] v Coordinate axis 1 - @brief Combine a 2D coordinate into a twiddled value + @brief Combine a 2D coordinate into a twiddled value. *****************************************************************************/ void PVRTTextureTwiddle(unsigned int &a, const unsigned int u, const unsigned int v); diff --git a/deps/PVRTT/include/PVRTexture.h b/deps/PVRTT/include/PVRTexture.h index 500b9c47b8..b1694a7817 100644 --- a/deps/PVRTT/include/PVRTexture.h +++ b/deps/PVRTT/include/PVRTexture.h @@ -44,7 +44,8 @@ in the PowerVR Insider SDK directory. #ifndef _PVRTEXTURE_H #define _PVRTEXTURE_H -#include "PVRTextureDefines.h" +#include + #include "PVRTextureHeader.h" #include "PVRTString.h" @@ -169,6 +170,39 @@ namespace pvrtexture *************************************************************************/ bool saveFileLegacyPVR(const CPVRTString& filepath, ELegacyApi eApi) const; + /*!*********************************************************************** + @brief Saves an ASTC File. + @param[in] filepath File path to write to + @return True if the method succeeds. + *************************************************************************/ + bool saveASTCFile(const CPVRTString& filepath) const; + + /*!*********************************************************************** + @brief Convert texture to KTX + @param[in] out Output stream for KTX data + *************************************************************************/ + void toKTX(std::ostream & out) const; + + /*!*********************************************************************** + @brief Convert texture to ASTC + @param[in] out Output stream for ASTC data + *************************************************************************/ + void toASTC(std::ostream & out) const; + + /*!*********************************************************************** + @brief Makes a PVRTexture from a KTX file stream + @param[in] in The KTX file stream + @return The texture + *************************************************************************/ + static CPVRTexture fromKTX(std::istream & in); + + /*!*********************************************************************** + @brief Makes a PVRTexture from a pointer to an ASTC file in memory + @param[in] in The ASTC file stream + @return The texture + *************************************************************************/ + static CPVRTexture fromASTC(std::istream & in); + private: size_t m_stDataSize; //!< Size of the texture data. uint8* m_pTextureData; //!< Pointer to texture data. @@ -191,32 +225,48 @@ namespace pvrtexture /*!*********************************************************************** @brief Loads a KTX file. - @param[in] pTextureFile PVR texture file + @param[in] pTextureFile KTX texture file @return True if the method succeeds. *************************************************************************/ bool privateLoadKTXFile(FILE* pTextureFile); + bool privateLoadKTXFile(std::istream & in); /*!*********************************************************************** @brief Saves a KTX File. - @param[in] pTextureFile PVR texture file + @param[in] pTextureFile KTX texture file @return True if the method succeeds. *************************************************************************/ bool privateSaveKTXFile(FILE* pTextureFile) const; /*!*********************************************************************** @brief Loads a DDS file. - @param[in] pTextureFile PVR texture file + @param[in] pTextureFile DDS texture file @return True if the method succeeds. *************************************************************************/ bool privateLoadDDSFile(FILE* pTextureFile); /*!*********************************************************************** @brief Saves a DDS File. - @param[in] pTextureFile PVR texture file + @param[in] pTextureFile DDS texture file @return True if the method succeeds. *************************************************************************/ bool privateSaveDDSFile(FILE* pTextureFile) const; + /*!*********************************************************************** + @brief Loads an ASTC file. + @param[in] pTextureFile ASTC texture file + @return True if the method succeeds. + *************************************************************************/ + bool privateLoadASTCFile(FILE* pTextureFile); + bool privateLoadASTCFile(std::istream & in); + + /*!*********************************************************************** + @brief Saves an ASTC file. + @param[in] pTextureFile ASTC texture file + @return True if the method succeeds. + *************************************************************************/ + bool privateSaveASTCFile(FILE* pTextureFile) const; + //Legacy IO /*!*********************************************************************** @@ -235,7 +285,7 @@ namespace pvrtexture *************************************************************************/ bool privateSaveLegacyPVRFile(FILE* pTextureFile, ELegacyApi eApi) const; }; -}; +} #endif //_PVRTEXTURE_H diff --git a/deps/PVRTT/include/PVRTextureDefines.h b/deps/PVRTT/include/PVRTextureDefines.h index d936fdff49..cb66e55eff 100644 --- a/deps/PVRTT/include/PVRTextureDefines.h +++ b/deps/PVRTT/include/PVRTextureDefines.h @@ -80,7 +80,14 @@ namespace pvrtexture eETCFastPerceptual, //!< ETC fast perceptual eETCSlow, //!< ETC slow eETCSlowPerceptual, //!< ETC slow perceptual - eNumETCModes //!< Number of ETC modes + eNumETCModes, //!< Number of ETC modes + + eASTCVeryFast=0, //!< ASTC very fast + eASTCFast, //!< ASTC fast + eASTCMedium, //!< ASTC medium + eASTCThorough, //!< ASTC thorough + eASTCExhaustive, //!< ASTC exhaustive + eNumASTCModes //!< Number of ASTC modes }; /*!*********************************************************************** @@ -129,5 +136,5 @@ namespace pvrtexture @brief Useful typedef for generating maps of MetaData blocks. *****************************************************************************/ typedef CPVRTMap > MetaDataMap; -}; +} #endif //_PVRTEXTURE_DEFINES_H diff --git a/deps/PVRTT/include/PVRTextureHeader.h b/deps/PVRTT/include/PVRTextureHeader.h index 12f11c9378..f6109416b5 100644 --- a/deps/PVRTT/include/PVRTextureHeader.h +++ b/deps/PVRTT/include/PVRTextureHeader.h @@ -76,6 +76,11 @@ namespace pvrtexture EPVRTVariableType eChannelType=ePVRTVarTypeUnsignedByteNorm, bool bPreMultiplied=false); + /*!*********************************************************************** + @brief Deconstructor for CPVRTextureHeader. + *************************************************************************/ + ~CPVRTextureHeader(); + /*!*********************************************************************** @brief Will copy the contents and information of another header into this one. @param[in] rhs Header to copy. @@ -240,6 +245,14 @@ namespace pvrtexture *************************************************************************/ void getOGLESFormat(uint32& internalformat, uint32& format, uint32& type) const; + /*!*********************************************************************** + @brief Gets the Vulkan equivalent values for this texture. + This will return any supported Vulkan texture formats, it is up to + the user to decide if these are valid for their current platform. + @return VkFormat, represented by a uint32. + *************************************************************************/ + uint32 getVulkanFormat() const; + /*!*********************************************************************** @brief Gets the D3DFormat (up to DirectX 9 and Direct 3D Mobile) equivalent values for this texture. This will return any @@ -254,7 +267,7 @@ namespace pvrtexture for this texture. This will return any supported DX texture formats, it is up to the user to decide if this is valid for their current platform. - @return GXGIFormat, represented by a uint32. + @return DXGIFormat, represented by a uint32. *************************************************************************/ uint32 getDXGIFormat() const; @@ -534,6 +547,6 @@ namespace pvrtexture *************************************************************************/ void removeMetaData(const uint32& DevFOURCC, const uint32& u32Key); }; -}; +} #endif diff --git a/deps/PVRTT/include/PVRTextureUtilities.h b/deps/PVRTT/include/PVRTextureUtilities.h index 96f0b31bc5..7aabe1a721 100644 --- a/deps/PVRTT/include/PVRTextureUtilities.h +++ b/deps/PVRTT/include/PVRTextureUtilities.h @@ -175,6 +175,6 @@ namespace pvrtexture @return True if the method succeeds. *************************************************************************/ bool PVR_DLL Transcode(CPVRTexture& sTexture, const PixelType ptFormat, const EPVRTVariableType eChannelType, const EPVRTColourSpace eColourspace, const ECompressorQuality eQuality=ePVRTCNormal, const bool bDoDither=false); -}; +} #endif //_PVRTEXTURE_UTILTIES_H diff --git a/deps/PVRTT/include/PVRTextureVersion.h b/deps/PVRTT/include/PVRTextureVersion.h index 6358e30368..872f17e86d 100644 --- a/deps/PVRTT/include/PVRTextureVersion.h +++ b/deps/PVRTT/include/PVRTextureVersion.h @@ -1,7 +1,7 @@ #ifndef PVRTEXLIBVERSION_H #define PVRTEXLIBVERSION_H #define PVRTLMAJORVERSION 4 -#define PVRTLMINORVERSION 14 -#define PVRTLSUBVERSION 6 -#define PVRTLSTRINGVERSION "4.14.6" +#define PVRTLMINORVERSION 22 +#define PVRTLSUBVERSION 0 +#define PVRTLSTRINGVERSION "4.22.0" #endif diff --git a/deps/PVRTT/x64/PVRTexLib.dll b/deps/PVRTT/x64/PVRTexLib.dll index 4b38a74a30..3b46352c73 100644 --- a/deps/PVRTT/x64/PVRTexLib.dll +++ b/deps/PVRTT/x64/PVRTexLib.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df7d5b0f1094b8d0bd7d81e9cd235ff029cdc943797eb91909ae0608c5c00ec7 -size 2817024 +oid sha256:9b686bacc28059ab06517a39a741346195817e93782cb72bd3eb3b7e336e9c4f +size 2182144 diff --git a/deps/PVRTT/x64/PVRTexLib.lib b/deps/PVRTT/x64/PVRTexLib.lib index 296f4b3e47..5e7ae82d9b 100644 --- a/deps/PVRTT/x64/PVRTexLib.lib +++ b/deps/PVRTT/x64/PVRTexLib.lib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1937b153d98ac7790f1d586df08e8449c1db69c708f8a4827f6998466a34a288 -size 100654 +oid sha256:1a5b85a2714ddbb3d4f607578cee925e9c601f16222eff0578c4c5b929e77271 +size 4498620 diff --git a/deps/PVRTT/x86/PVRTexLib.dll b/deps/PVRTT/x86/PVRTexLib.dll index 23169bf578..dc7716f2cb 100644 --- a/deps/PVRTT/x86/PVRTexLib.dll +++ b/deps/PVRTT/x86/PVRTexLib.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:877e96a9cbed32fdc029b9018f3c8981aef5c734e089e9758386e35c98609091 -size 2719232 +oid sha256:1816a1f3c9fe0b994347ecf2f449e1fbd1870f157fb4283a73a8d74b9801f967 +size 2180608 diff --git a/deps/PVRTT/x86/PVRTexLib.lib b/deps/PVRTT/x86/PVRTexLib.lib index 5dab68c0f1..f06870bc8a 100644 --- a/deps/PVRTT/x86/PVRTexLib.lib +++ b/deps/PVRTT/x86/PVRTexLib.lib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ea9ca04e6073df9c75cccd63022dc307f01bf77d01c6ba6fc3e590b383e5d9f -size 98132 +oid sha256:74fa42864a5347d5464ed257273cad7eaf1e23ef470db8cd9300b9b960114332 +size 3685238 diff --git a/deps/RoslynPad/README.md b/deps/RoslynPad/README.md index 3b7a8ad2e2..d39f071f25 100644 --- a/deps/RoslynPad/README.md +++ b/deps/RoslynPad/README.md @@ -1 +1 @@ -Version: https://github.com/aelij/RoslynPad/commit/184451f2fc3552c9fa8c99bf7e3b8d11334a18b2 \ No newline at end of file +Version: https://github.com/aelij/RoslynPad/commit/c2f1c488ad3a418b0fc5d7f46ecaf3ab6fe8e7c3 \ No newline at end of file diff --git a/deps/RoslynPad/RoslynPad.Editor.Windows.dll b/deps/RoslynPad/RoslynPad.Editor.Windows.dll deleted file mode 100644 index 4d29943daa..0000000000 --- a/deps/RoslynPad/RoslynPad.Editor.Windows.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9fa4e2916bb2fa965d1f21b3bdd24b387261e91694f96576c770cd3af0c87a0 -size 130560 diff --git a/deps/RoslynPad/RoslynPad.Editor.Windows.pdb b/deps/RoslynPad/RoslynPad.Editor.Windows.pdb deleted file mode 100644 index 1a34753535..0000000000 --- a/deps/RoslynPad/RoslynPad.Editor.Windows.pdb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:afb793797a1fcc2319ac08625a71455c43ab80c8760584fb54d589621aaeb017 -size 30056 diff --git a/deps/RoslynPad/RoslynPad.Roslyn.Windows.dll b/deps/RoslynPad/RoslynPad.Roslyn.Windows.dll deleted file mode 100644 index 89ac0046de..0000000000 --- a/deps/RoslynPad/RoslynPad.Roslyn.Windows.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:af6091435a373053625f7a51e255cde836f70215fc6d57032b0a91b0351c4db0 -size 104448 diff --git a/deps/RoslynPad/RoslynPad.Roslyn.Windows.pdb b/deps/RoslynPad/RoslynPad.Roslyn.Windows.pdb deleted file mode 100644 index 21348e9ce1..0000000000 --- a/deps/RoslynPad/RoslynPad.Roslyn.Windows.pdb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cda968adc1a84a2920112324d9dedf4d949259161e8fad366bac4a50f7f39f08 -size 8388 diff --git a/deps/RoslynPad/RoslynPad.Roslyn.dll b/deps/RoslynPad/RoslynPad.Roslyn.dll deleted file mode 100644 index 1397985c63..0000000000 --- a/deps/RoslynPad/RoslynPad.Roslyn.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:83d15236ab583389e4bd2d5fd3c1d688d5a3a08a9dacfb9483a38913d4484d9e -size 190976 diff --git a/deps/RoslynPad/RoslynPad.Roslyn.pdb b/deps/RoslynPad/RoslynPad.Roslyn.pdb deleted file mode 100644 index 1b2d2d59de..0000000000 --- a/deps/RoslynPad/RoslynPad.Roslyn.pdb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0cdc6b380ca86362d98e9293a1e43d24edfb334e8b1915120d657f8009f1d121 -size 50872 diff --git a/deps/RoslynPad/build.bat b/deps/RoslynPad/build.bat new file mode 100644 index 0000000000..a53873432c --- /dev/null +++ b/deps/RoslynPad/build.bat @@ -0,0 +1,18 @@ +@echo off +setlocal +set ROSLYNPAD=%~dp0..\..\externals\RoslynPad + +pushd %ROSLYNPAD%\src + +msbuild /nologo /restore /p:Configuration=Release RoslynPad.sln +if ERRORLEVEL 1 echo "Cannot build RoslynPad" && pause + +popd + +xcopy /Y /Q %ROSLYNPAD%\src\RoslynPad.Editor.Windows\bin\Release\net462\RoslynPad*.* net462 > nul +if ERRORLEVEL 1 echo "Cannot copy RoslynPad net462 files" && pause + +xcopy /Y /Q %ROSLYNPAD%\src\RoslynPad.Editor.Windows\bin\Release\netcoreapp3.1\RoslynPad*.* netcoreapp3.1 > nul +if ERRORLEVEL 1 echo "Cannot copy RoslynPad netcoreapp3.1 files" && pause + +echo RoslynPad build completed successfully diff --git a/deps/RoslynPad/checkout.bat b/deps/RoslynPad/checkout.bat new file mode 100644 index 0000000000..5e59cacf7b --- /dev/null +++ b/deps/RoslynPad/checkout.bat @@ -0,0 +1,13 @@ +@echo OFF +setlocal +set HOME=%USERPROFILE% +CALL ..\find_git.cmd +IF NOT ERRORLEVEL 0 ( + ECHO "Could not find git.exe" + EXIT /B %ERRORLEVEL% +) +%GIT_CMD% clone --recursive https://github.com/aelij/RoslynPad -b master ../../externals/RoslynPad +pushd ..\..\externals\RoslynPad +%GIT_CMD% checkout 0d576ca5d18d67d447bce5d078f0a568a69a677d +popd +if ERRORLEVEL 1 echo "Could not checkout RoslynPad" && pause diff --git a/deps/RoslynPad/net462/RoslynPad.Editor.Windows.dll b/deps/RoslynPad/net462/RoslynPad.Editor.Windows.dll new file mode 100644 index 0000000000..a3197cb6d9 --- /dev/null +++ b/deps/RoslynPad/net462/RoslynPad.Editor.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e5cc3d68ed93824d6ea45ff690e0121c2dfe4fdaf754d626030201e50fba939 +size 135168 diff --git a/deps/RoslynPad/net462/RoslynPad.Editor.Windows.pdb b/deps/RoslynPad/net462/RoslynPad.Editor.Windows.pdb new file mode 100644 index 0000000000..11e16b6cd1 --- /dev/null +++ b/deps/RoslynPad/net462/RoslynPad.Editor.Windows.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f044716f4bf79ea1f030a8dca2fc728786030b63efb8096064f39eea5dda6932 +size 31684 diff --git a/deps/RoslynPad/net462/RoslynPad.Roslyn.Windows.dll b/deps/RoslynPad/net462/RoslynPad.Roslyn.Windows.dll new file mode 100644 index 0000000000..6174cd97e0 --- /dev/null +++ b/deps/RoslynPad/net462/RoslynPad.Roslyn.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d88980edfdfa982281bceb4e07a7c61864c145daa059398d360a6ddcf7e4121b +size 105984 diff --git a/deps/RoslynPad/net462/RoslynPad.Roslyn.Windows.pdb b/deps/RoslynPad/net462/RoslynPad.Roslyn.Windows.pdb new file mode 100644 index 0000000000..24c275f52f --- /dev/null +++ b/deps/RoslynPad/net462/RoslynPad.Roslyn.Windows.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9faeadbc894bb56cd88ed48ad000c2ea5c5d6d7ff092139990123c7261fb3e5f +size 9192 diff --git a/deps/RoslynPad/net462/RoslynPad.Roslyn.dll b/deps/RoslynPad/net462/RoslynPad.Roslyn.dll new file mode 100644 index 0000000000..5fefff9a2a --- /dev/null +++ b/deps/RoslynPad/net462/RoslynPad.Roslyn.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:249273517b2c37185749fe1f8db7bde3a9a7bd2289b4f960de4d5ecc7dd93410 +size 190464 diff --git a/deps/RoslynPad/net462/RoslynPad.Roslyn.pdb b/deps/RoslynPad/net462/RoslynPad.Roslyn.pdb new file mode 100644 index 0000000000..da31ac27d4 --- /dev/null +++ b/deps/RoslynPad/net462/RoslynPad.Roslyn.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f78a30a78d459530dfe30b328f19f1314ab3bd2cd638612314601b09df7dca2 +size 48936 diff --git a/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.deps.json b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.deps.json new file mode 100644 index 0000000000..70cc9d0cd1 --- /dev/null +++ b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.deps.json @@ -0,0 +1,1265 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v3.1", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v3.1": { + "RoslynPad.Editor.Windows/1.2.0": { + "dependencies": { + "AvalonEdit": "6.0.0", + "RoslynPad.Roslyn": "3.4.0", + "RoslynPad.Roslyn.Windows": "3.4.0", + "System.Reactive.Linq": "4.3.1", + "System.Reactive.Reference": "4.3.0.0" + }, + "runtime": { + "RoslynPad.Editor.Windows.dll": {} + } + }, + "AvalonEdit/6.0.0": { + "runtime": { + "lib/netcoreapp3.0/ICSharpCode.AvalonEdit.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.0.0" + } + } + }, + "Microsoft.CodeAnalysis.Analyzers/2.9.6": {}, + "Microsoft.CodeAnalysis.Common/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "2.9.6", + "System.Collections.Immutable": "1.5.0", + "System.Memory": "4.5.3", + "System.Reflection.Metadata": "1.6.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.2", + "System.Text.Encoding.CodePages": "4.5.1", + "System.Threading.Tasks.Extensions": "4.5.3" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "3.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Features/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.CSharp": "3.4.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "3.4.0", + "Microsoft.CodeAnalysis.Common": "3.4.0", + "Microsoft.CodeAnalysis.Features": "3.4.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "3.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Features.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Features.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Scripting/3.4.0": { + "dependencies": { + "Microsoft.CSharp": "4.3.0", + "Microsoft.CodeAnalysis.CSharp": "3.4.0", + "Microsoft.CodeAnalysis.Common": "3.4.0", + "Microsoft.CodeAnalysis.Scripting.Common": "3.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Scripting.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Scripting.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.CSharp": "3.4.0", + "Microsoft.CodeAnalysis.Common": "3.4.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "3.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Features/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "3.4.0", + "Microsoft.CodeAnalysis.FlowAnalysis.Utilities": "2.9.6", + "Microsoft.CodeAnalysis.Workspaces.Common": "3.4.0", + "Microsoft.DiaSymReader": "1.3.0", + "System.Threading.Tasks.Extensions": "4.5.3" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.Features.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.Features.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.FlowAnalysis.Utilities/2.9.6": { + "runtime": { + "lib/netstandard1.3/Microsoft.CodeAnalysis.FlowAnalysis.Utilities.dll": { + "assemblyVersion": "2.9.5.0", + "fileVersion": "2.9.519.46601" + } + } + }, + "Microsoft.CodeAnalysis.Scripting.Common/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "3.4.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.Scripting.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.Scripting.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "3.4.0", + "System.Composition": "1.0.31" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "3.4.0.0", + "fileVersion": "3.400.19.56804" + } + }, + "resources": { + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CSharp/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "Microsoft.DiaSymReader/1.3.0": { + "runtime": { + "lib/netstandard1.1/Microsoft.DiaSymReader.dll": { + "assemblyVersion": "1.3.0.0", + "fileVersion": "1.3.0.63011" + } + } + }, + "Microsoft.NETCore.Platforms/2.1.2": {}, + "Microsoft.NETCore.Targets/1.1.0": {}, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Immutable/1.5.0": {}, + "System.Composition/1.0.31": { + "dependencies": { + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Convention": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Composition.TypedParts": "1.0.31" + } + }, + "System.Composition.AttributedModel/1.0.31": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Convention/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Convention.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Hosting/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Hosting.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.Runtime/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.Runtime.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Composition.TypedParts/1.0.31": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Composition.AttributedModel": "1.0.31", + "System.Composition.Hosting": "1.0.31", + "System.Composition.Runtime": "1.0.31", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "1.0.31.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Dynamic.Runtime/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Memory/4.5.3": {}, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Reactive/4.3.1": {}, + "System.Reactive.Linq/4.3.1": { + "dependencies": { + "System.Reactive": "4.3.1", + "System.Threading.Tasks.Extensions": "4.5.3" + }, + "runtime": { + "lib/netstandard2.0/System.Reactive.Linq.dll": { + "assemblyVersion": "3.0.6000.0", + "fileVersion": "3.0.6000.0" + } + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Metadata/1.6.0": {}, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/4.5.2": {}, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages/4.5.1": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions/4.5.3": {}, + "RoslynPad.Roslyn/3.4.0": { + "dependencies": { + "Microsoft.CodeAnalysis.CSharp": "3.4.0", + "Microsoft.CodeAnalysis.CSharp.Features": "3.4.0", + "Microsoft.CodeAnalysis.CSharp.Scripting": "3.4.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "3.4.0" + }, + "runtime": { + "RoslynPad.Roslyn.dll": {} + } + }, + "RoslynPad.Roslyn.Windows/3.4.0": { + "dependencies": { + "RoslynPad.Roslyn": "3.4.0" + }, + "runtime": { + "RoslynPad.Roslyn.Windows.dll": {} + } + }, + "System.Reactive.Reference/4.3.0.0": { + "runtime": { + "System.Reactive.dll": { + "assemblyVersion": "4.3.0.0", + "fileVersion": "4.3.1.32151" + } + } + } + } + }, + "libraries": { + "RoslynPad.Editor.Windows/1.2.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "AvalonEdit/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QMbyJrlhOuWzLRPqvW724ly9XbSEkp8Xg2mQY7tvsh1se1pDEJnmDjS6c6OuqDe2Q37uCnXwKdV8tJUx2iLUnw==", + "path": "avalonedit/6.0.0", + "hashPath": "avalonedit.6.0.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Analyzers/2.9.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Kmms3TxGQMNb95Cu/3K+0bIcMnV4qf/phZBLAB0HUi65rBPxP4JO3aM2LoAcb+DFS600RQJMZ7ZLyYDTbLwJOQ==", + "path": "microsoft.codeanalysis.analyzers/2.9.6", + "hashPath": "microsoft.codeanalysis.analyzers.2.9.6.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3ncA7cV+iXGA1VYwe2UEZXcvWyZSlbexWjM9AvocP7sik5UD93qt9Hq0fMRGk0jFRmvmE4T2g+bGfXiBVZEhLw==", + "path": "microsoft.codeanalysis.common/3.4.0", + "hashPath": "microsoft.codeanalysis.common.3.4.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/LsTtgcMN6Tu1oo7/WYbRAHL4/ubXC/miEakwTpcZKJKtFo7D0AK95Hw0dbGxul6C8WJu60v6NP2435TDYZM+Q==", + "path": "microsoft.codeanalysis.csharp/3.4.0", + "hashPath": "microsoft.codeanalysis.csharp.3.4.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Features/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JGtqSGzy5bR+BKPYK4/vE/TMUJG4lNjBTtwM7uJH3t5/rpeRvDK8BCSzxqhtrRHUHWmG01k1/a9trbYD3BWbDQ==", + "path": "microsoft.codeanalysis.csharp.features/3.4.0", + "hashPath": "microsoft.codeanalysis.csharp.features.3.4.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Scripting/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tLgqc76qXHmONUhWhxo7z3TcL/LmGFWIUJm1exbQmVJohuQvJnejUMxmVkdxDfMuMZU1fIyJXPZ6Fkp4FEneAg==", + "path": "microsoft.codeanalysis.csharp.scripting/3.4.0", + "hashPath": "microsoft.codeanalysis.csharp.scripting.3.4.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ReUtqcb+Pz1jtnVZTfDZl1uPV0mrngVA2U+pzxJ7MtrFM1rjlCU2KxuXs8VaOXUteYYAlAn1ZhMYlE3P8j2hIg==", + "path": "microsoft.codeanalysis.csharp.workspaces/3.4.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.3.4.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Features/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Vfa9b4mX8ov9uWWZfmkxxvyK39bHIF2Zg+UH3lp8TKmnGJa+A8cKIF1Q6YrRzHt9DiXeCA5JtkMBqM9VLbIrZg==", + "path": "microsoft.codeanalysis.features/3.4.0", + "hashPath": "microsoft.codeanalysis.features.3.4.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.FlowAnalysis.Utilities/2.9.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JKvxsOOCvOnpBpkX6I7L7Wl29nlC2w2Z4aKsXZDuK8JfH+aXeiYv7g/i2h965tWphl0uZ67nmAoCDH0J9ux5rQ==", + "path": "microsoft.codeanalysis.flowanalysis.utilities/2.9.6", + "hashPath": "microsoft.codeanalysis.flowanalysis.utilities.2.9.6.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Scripting.Common/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+b6I3DZL2zvck+B/E/aiOveakj5U2G2BcYODQxcGh2IDbatNU3XXxGT1HumkWB5uIZI2Leu0opBgBpjScmjGMA==", + "path": "microsoft.codeanalysis.scripting.common/3.4.0", + "hashPath": "microsoft.codeanalysis.scripting.common.3.4.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/3.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AJszIKY+hXBXDqbcYTiztAQ17GTYfSMDB5u2plzJQqwKN17bqYKr1aC/1NkI5Oho9tixVJ0T/SoeYHpDUMsIBA==", + "path": "microsoft.codeanalysis.workspaces.common/3.4.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.3.4.0.nupkg.sha512" + }, + "Microsoft.CSharp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-P+MBhIM0YX+JqROuf7i306ZLJEjQYA9uUyRDE+OqwUI5sh41e2ZbPQV3LfAPh+29cmceE1pUffXsGfR4eMY3KA==", + "path": "microsoft.csharp/4.3.0", + "hashPath": "microsoft.csharp.4.3.0.nupkg.sha512" + }, + "Microsoft.DiaSymReader/1.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/fn1Tfo7j7k/slViPlM8azJuxQmri7FZ8dQ+gTeLbI29leN/1VK0U/BFcRdJNctsRCUgyKJ2q+I0Tjq07Rc1/Q==", + "path": "microsoft.diasymreader/1.3.0", + "hashPath": "microsoft.diasymreader.1.3.0.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/2.1.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mOJy3M0UN+LUG21dLGMxaWZEP6xYpQEpLuvuEQBaownaX4YuhH6NmNUlN9si+vNkAS6dwJ//N1O4DmLf2CikVg==", + "path": "microsoft.netcore.platforms/2.1.2", + "hashPath": "microsoft.netcore.platforms.2.1.2.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "path": "microsoft.netcore.targets/1.1.0", + "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/1.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==", + "path": "system.collections.immutable/1.5.0", + "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512" + }, + "System.Composition/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I+D26qpYdoklyAVUdqwUBrEIckMNjAYnuPJy/h9dsQItpQwVREkDFs4b4tkBza0kT2Yk48Lcfsv2QQ9hWsh9Iw==", + "path": "system.composition/1.0.31", + "hashPath": "system.composition.1.0.31.nupkg.sha512" + }, + "System.Composition.AttributedModel/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NHWhkM3ZkspmA0XJEsKdtTt1ViDYuojgSND3yHhTzwxepiwqZf+BCWuvCbjUt4fe0NxxQhUDGJ5km6sLjo9qnQ==", + "path": "system.composition.attributedmodel/1.0.31", + "hashPath": "system.composition.attributedmodel.1.0.31.nupkg.sha512" + }, + "System.Composition.Convention/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GLjh2Ju71k6C0qxMMtl4efHa68NmWeIUYh4fkUI8xbjQrEBvFmRwMDFcylT8/PR9SQbeeL48IkFxU/+gd0nYEQ==", + "path": "system.composition.convention/1.0.31", + "hashPath": "system.composition.convention.1.0.31.nupkg.sha512" + }, + "System.Composition.Hosting/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fN1bT4RX4vUqjbgoyuJFVUizAl2mYF5VAb+bVIxIYZSSc0BdnX+yGAxcavxJuDDCQ1K+/mdpgyEFc8e9ikjvrg==", + "path": "system.composition.hosting/1.0.31", + "hashPath": "system.composition.hosting.1.0.31.nupkg.sha512" + }, + "System.Composition.Runtime/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0LEJN+2NVM89CE4SekDrrk5tHV5LeATltkp+9WNYrR+Huiyt0vaCqHbbHtVAjPyeLWIc8dOz/3kthRBj32wGQg==", + "path": "system.composition.runtime/1.0.31", + "hashPath": "system.composition.runtime.1.0.31.nupkg.sha512" + }, + "System.Composition.TypedParts/1.0.31": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0Zae/FtzeFgDBBuILeIbC/T9HMYbW4olAmi8XqqAGosSOWvXfiQLfARZEhiGd0LVXaYgXr0NhxiU1LldRP1fpQ==", + "path": "system.composition.typedparts/1.0.31", + "hashPath": "system.composition.typedparts.1.0.31.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Dynamic.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==", + "path": "system.dynamic.runtime/4.3.0", + "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Memory/4.5.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", + "path": "system.memory/4.5.3", + "hashPath": "system.memory.4.5.3.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, + "System.Reactive/4.3.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zoUO99u1mJlsNure7gyMIYMAfR0R4ey6rFob4jr8sSFKiuwgT5PEYNC/04JCyZDIS6YDFfP5uRgIjwSyCacCmQ==", + "path": "system.reactive/4.3.1", + "hashPath": "system.reactive.4.3.1.nupkg.sha512" + }, + "System.Reactive.Linq/4.3.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UFiiMI11bX5/d6qR0Rez1+tN271DwpXRTd1H7ROB/fz5Rqa+0Lt8CH5G8UJUzCWHLTReFQOTGZI0Zzj8un92iw==", + "path": "system.reactive.linq/4.3.1", + "hashPath": "system.reactive.linq.4.3.1.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==", + "path": "system.reflection.metadata/1.6.0", + "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/4.5.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==", + "path": "system.runtime.compilerservices.unsafe/4.5.2", + "hashPath": "system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "path": "system.text.encoding.codepages/4.5.1", + "hashPath": "system.text.encoding.codepages.4.5.1.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.5.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+MvhNtcvIbqmhANyKu91jQnvIRVSTiaOiFNfKWwXGHG48YAb4I/TyH8spsySiPYla7gKal5ZnF3teJqZAximyQ==", + "path": "system.threading.tasks.extensions/4.5.3", + "hashPath": "system.threading.tasks.extensions.4.5.3.nupkg.sha512" + }, + "RoslynPad.Roslyn/3.4.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "RoslynPad.Roslyn.Windows/3.4.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "System.Reactive.Reference/4.3.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.dll b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.dll new file mode 100644 index 0000000000..95612c1bd6 --- /dev/null +++ b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a0e0b22bc3bc79ccea90629dbcc19bb03d5c909860a2011bbaee29c51da7182 +size 135680 diff --git a/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.pdb b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.pdb new file mode 100644 index 0000000000..fd638b0e61 --- /dev/null +++ b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Editor.Windows.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fb37f577ac4fa2e35f7c3b019e72278e76a14be1b9c55eeb5f32bae71323c43 +size 31688 diff --git a/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.Windows.dll b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.Windows.dll new file mode 100644 index 0000000000..7240cec7ac --- /dev/null +++ b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa9eb1948bde2b6fdd7fee5c52730023bd9c607a1fd5c1345f644b0c1d160ca3 +size 106496 diff --git a/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.Windows.pdb b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.Windows.pdb new file mode 100644 index 0000000000..5e9b2cb467 --- /dev/null +++ b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.Windows.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdf8871b4a60a2ff206439cbcbcf143a88b3c19bbd5b2be01d8c4fff22511857 +size 9204 diff --git a/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.dll b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.dll new file mode 100644 index 0000000000..5fefff9a2a --- /dev/null +++ b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:249273517b2c37185749fe1f8db7bde3a9a7bd2289b4f960de4d5ecc7dd93410 +size 190464 diff --git a/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.pdb b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.pdb new file mode 100644 index 0000000000..da31ac27d4 --- /dev/null +++ b/deps/RoslynPad/netcoreapp3.1/RoslynPad.Roslyn.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f78a30a78d459530dfe30b328f19f1314ab3bd2cd638612314601b09df7dca2 +size 48936 diff --git a/deps/SDL2-CS/SDL2-CS.dll b/deps/SDL2-CS/SDL2-CS.dll index 99ff3f59d3..c7c4afd256 100644 --- a/deps/SDL2-CS/SDL2-CS.dll +++ b/deps/SDL2-CS/SDL2-CS.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28a91a09a61a79521fc4d913e610f24dd4c31ea85189ea9798ae6095b7b389fd -size 104448 +oid sha256:702ca2d11d244f4d97d29ff902946bcd4ac866b3bbae1bc4098b41779db1a6f4 +size 141824 diff --git a/deps/SDL2-CS/build.bat b/deps/SDL2-CS/build.bat deleted file mode 100644 index 6c0744559c..0000000000 --- a/deps/SDL2-CS/build.bat +++ /dev/null @@ -1,22 +0,0 @@ -@echo off - -if "%1" == "" ( - echo Missing Debug or Release argument - EXIT /B 1 -) - -pushd ..\..\externals\SDL2-CS - -REM SDL2-CS -call "%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Community\Common7\Tools\VsMSBuildCmd.bat" -msbuild /p:Configuration="%1" SDL2-CS.Core.csproj /restore -if %ERRORLEVEL% neq 0 ( - echo Error during compilation - popd - EXIT /B %ERRORLEVEL% -) - -popd - -rem Copying assemblies -copy ..\..\externals\SDL2-CS\bin\%1\netstandard2.0\*.* . diff --git a/deps/SDL2-CS/checkout.bat b/deps/SDL2-CS/checkout.bat deleted file mode 100644 index 1720ca0736..0000000000 --- a/deps/SDL2-CS/checkout.bat +++ /dev/null @@ -1,9 +0,0 @@ -@echo OFF -setlocal -set HOME=%USERPROFILE% -CALL ..\find_git.cmd -IF NOT ERRORLEVEL 0 ( - ECHO "Could not find git.exe" - EXIT /B %ERRORLEVEL% -) -%GIT_CMD% clone "https://github.com/flibitijibibo/SDL2-CS.git" ../../externals/SDL2-CS diff --git a/deps/SDL2/Linux/libSDL2.so b/deps/SDL2/Linux/libSDL2.so new file mode 100644 index 0000000000..02361e14d6 --- /dev/null +++ b/deps/SDL2/Linux/libSDL2.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7d11e8aa1d8455583b2ce37be290f567f7fb8e8454df6447650bcbe9e5ca6fb +size 1600040 diff --git a/deps/SDL2/Windows/x64/SDL2.dll b/deps/SDL2/Windows/x64/SDL2.dll index 0dcbc0089a..ab622162a2 100644 --- a/deps/SDL2/Windows/x64/SDL2.dll +++ b/deps/SDL2/Windows/x64/SDL2.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5b603fd71086b15a81fb294297f634d242519828ba0f20d027d8a2a4d8c4f70 -size 1331712 +oid sha256:f1a82c299206d5bd3231f5edb16fb7f33aaf4dc7c20bf57c25cf8e92eda6ec72 +size 1599488 diff --git a/deps/SDL2/Windows/x86/SDL2.dll b/deps/SDL2/Windows/x86/SDL2.dll index 4dda4959e4..e1906e94dc 100644 --- a/deps/SDL2/Windows/x86/SDL2.dll +++ b/deps/SDL2/Windows/x86/SDL2.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6510202682a42c85928267e17746d88e972b062c99a4e01b750483954c59ddc8 -size 1088000 +oid sha256:fd0fced955da838e5138e6ac37a7ffd56b5919ce5339b0ed81df0ff5575719d5 +size 1364480 diff --git a/deps/SDL2/gamecontrollerdb.txt b/deps/SDL2/gamecontrollerdb.txt new file mode 100644 index 0000000000..066fc2f524 --- /dev/null +++ b/deps/SDL2/gamecontrollerdb.txt @@ -0,0 +1,2048 @@ +# Game Controller DB for SDL in 2.0.16 format +# Source: https://github.com/gabomdq/SDL_GameControllerDB + +# Windows +03000000300f00000a01000000000000,3 In 1 Conversion Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows, +03000000fa2d00000100000000000000,3dRudder Foot Motion Controller,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows, +03000000d0160000040d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000050d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000060d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000070d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000d0160000600a000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows, +03000000c82d00000031000000000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000531000000000000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000951000000000000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightx:a3,righty:a5,start:b11,platform:Windows, +03000000008000000210000000000000,8BitDo F30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +030000003512000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000c82d00001028000000000000,8BitDo F30 Arcade Joystick,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000801000000900000000000000,8BitDo F30 Arcade Stick,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001251000000000000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001151000000000000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000150000000000000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000151000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00005106000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,guide:b2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00002090000000000000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000451000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightx:a3,righty:a5,start:b11,platform:Windows, +03000000c82d00002028000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00008010000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d0000e002000000000000,8BitDo N30,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b6,platform:Windows, +03000000c82d00000190000000000000,8BitDo N30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001590000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00006528000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000290000000000000,8BitDo N64,+rightx:b9,+righty:b3,-rightx:b4,-righty:b8,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,platform:Windows, +03000000c82d00003038000000000000,8BitDo N64,+rightx:b9,+righty:b3,-rightx:b4,-righty:b8,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,platform:Windows, +03000000c82d00006928000000000000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b11,platform:Windows, +03000000c82d00002590000000000000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000003512000012ab000000000000,8BitDo NES30,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Windows, +03000000c82d000012ab000000000000,8BitDo NES30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000022000000090000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000203800000900000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00002038000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000751000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000851000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000360000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000361000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000660000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000131000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000231000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000331000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000431000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00002867000000000000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a2,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b10,x:b3,y:b4,platform:Windows, +03000000c82d00000130000000000000,8BitDo SF30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000060000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000061000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000102800000900000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d000021ab000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00003028000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +030000003512000020ab000000000000,8BitDo SN30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000030000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000351000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a2,rightshoulder:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001290000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d000020ab000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00004028000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00006228000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000021000000000000,8BitDo SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000260000000000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00000261000000000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00001230000000000000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001530000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001630000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001730000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001130000000000000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001330000000000000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00000121000000000000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000a00500003232000000000000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows, +03000000c82d00001890000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows, +03000000c82d00003032000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows, +030000008f0e00001200000000000000,Acme GA02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000c01100000355000000000000,Acrux,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000fa190000f0ff000000000000,Acteck AGJ 3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d1180000402c000000000000,ADT1,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a3,rightx:a2,righty:a5,x:b3,y:b4,platform:Windows, +030000006f0e00008801000000000000,Afterglow Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00000263000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001101000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001401000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001301000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001302000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001304000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00001413000000000000,Afterglow Xbox Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00003901000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ab1200000103000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000000f9000000000000,Afterglow Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000100000008200000000000000,Akishop Customs PS360,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000007c1800000006000000000000,Alienware Dual Compatible PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows, +0300000008100000e501000000000000,Anbernic Game Pad,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows, +03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000490b00004406000000000000,ASCII Seamic Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000869800002500000000000000,Astro C40 TR PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000a30c00002700000000000000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000a30c00002800000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000050b00000579000000000000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000050b00000679000000000000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000503200000110000000000000,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,start:b3,platform:Windows, +03000000503200000210000000000000,Atari VCS Modern Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, +030000008a3500000102000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +030000008a3500000201000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +030000008a3500000302000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +030000008a3500000402000000000000,Backbone One,a:b4,b:b5,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b10,leftstick:b17,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b18,righttrigger:b13,rightx:a3,righty:a4,start:b15,x:b7,y:b8,platform:Windows, +03000000e4150000103f000000000000,Batarang,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d6200000e557000000000000,Batarang PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows, +030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ad1b000001f9000000000000,BB 070,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000002a79000000000000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000bc2000005250000000000000,Beitong G3,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a3,righty:a4,start:b15,x:b3,y:b4,platform:Windows, +030000000d0500000208000000000000,Belkin Nostromo N40,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000000055000000000000,Betop BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000006321000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000790000000700000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000808300000300000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +030000006f0e00006401000000000000,BF One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000300f00000202000000000000,Bigben,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a5,righty:a2,start:b7,x:b2,y:b3,platform:Windows, +030000006b1400000209000000000000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000120c0000200e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000210e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f10e000000000000,Brook PS2 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000310c000000000000,Brook Super Converter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000d81d00000b00000000000000,Buffalo BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows, +030000005b1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, +030000005b1c00002500000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows, +030000006d04000042c2000000000000,ChillStream,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000457500000401000000000000,Cobra,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000b0400003365000000000000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows, +030000004c050000c505000000000000,CronusMax Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000d814000007cd000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000d8140000cefa000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows, +030000003807000002cb000000000000,Cyborg,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000a306000022f6000000000000,Cyborg V.3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000f806000000a3000000000000,DA Leader,a:b7,b:b6,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b8,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:b3,rightx:a2,righty:a3,start:b12,x:b4,y:b5,platform:Windows, +030000001a1c00000001000000000000,Datel Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000791d00000103000000000000,Dual Box Wii,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c0160000e105000000000000,Dual Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +030000004f040000070f000000000000,Dual Power,a:b8,b:b9,back:b4,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,leftshoulder:b13,leftstick:b6,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b12,rightstick:b7,righttrigger:b15,start:b5,x:b10,y:b11,platform:Windows, +030000004f04000012b3000000000000,Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000004f04000020b3000000000000,Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +03000000bd12000002e0000000000000,Dual Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows, +03000000ff1100003133000000000000,DualForce,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b1,platform:Windows, +030000008f0e00000910000000000000,DualShock 2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows, +03000000317300000100000000000000,DualShock 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +030000006f0e00003001000000000000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000fc0400000250000000000000,Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000bc2000000091000000000000,EasySMX Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000006e0500000a20000000000000,Elecom DUX60 MMO,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows, +03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +030000006e0500000520000000000000,Elecom P301U PlayStation Controller Adapter,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +03000000411200004450000000000000,Elecom U1012,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000320000000000000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000e20000000000000,Elecom U3912T,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000f20000000000000,Elecom U4013S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500001320000000000000,Elecom U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006e0500001020000000000000,Elecom U4113S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, +030000006e0500000720000000000000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +030000007d0400000640000000000000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Windows, +03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000430b00000300000000000000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows, +03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000341a00000108000000000000,EXEQ RF Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006f0e00008401000000000000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00008101000000000000,Faceoff Deluxe Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00008001000000000000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000021000000090000000000000,FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows, +0300000011040000c600000000000000,FC801,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000852100000201000000000000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ad1b000028f0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b00002ef0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000038f0000000000000,Fightpad TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03005036852100000000000000000000,Final Fantasy XIV Online Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000f806000001a3000000000000,Firestorm,a:b9,b:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b10,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b12,x:b8,y:b4,platform:Windows, +03000000b50700000399000000000000,Firestorm 2,a:b2,b:b4,back:b10,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,righttrigger:b9,start:b11,x:b3,y:b5,platform:Windows, +03000000b50700001302000000000000,Firestorm D3,a:b0,b:b2,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,x:b1,y:b3,platform:Windows, +03000000b40400001024000000000000,Flydigi Apex,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000151900004000000000000000,Flydigi Vader 2,a:b27,b:b26,back:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b23,leftstick:b17,lefttrigger:b21,leftx:a0,lefty:a1,misc1:b15,paddle1:b11,paddle2:b10,paddle3:b13,paddle4:b12,rightshoulder:b22,rightstick:b16,righttrigger:b20,rightx:a3,righty:a4,start:b18,x:b25,y:b24,platform:Windows, +03000000b40400001124000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b14,paddle1:b4,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b2,y:b3,platform:Windows, +03000000b40400001224000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000008305000000a0000000000000,G08XU,a:b0,b:b1,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b5,x:b2,y:b3,platform:Windows, +0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, +03000000260900002625000000000000,GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows, +03000000341a000005f7000000000000,GameCube Controller,a:b2,b:b3,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b1,y:b0,platform:Windows, +03000000430b00000500000000000000,GameCube Controller,a:b0,b:b2,dpdown:b10,dpleft:b8,dpright:b9,dpup:b11,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a3,rightx:a5,righty:a2,start:b7,x:b1,y:b3,platform:Windows, +03000000790000004718000000000000,GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +030000008f0e00000d31000000000000,Gamepad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ac0500003d03000000000000,GameSir G3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ac0500005b05000000000000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000ac0500002d02000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000ac0500004d04000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ac0500001a06000000000000,GameSir-T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000004c0e00001035000000000000,Gamester,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00001110000000000000,GameStick Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +0300000047530000616d000000000000,GameStop,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000c01100000140000000000000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000b62500000100000000000000,Gametel GT004 01,a:b3,b:b0,dpdown:b10,dpleft:b9,dpright:b8,dpup:b11,leftshoulder:b4,rightshoulder:b5,start:b7,x:b1,y:b2,platform:Windows, +030000008f0e00001411000000000000,Gamo2 Divaller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000a857000000000000,Gator Claw,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000c9110000f055000000000000,GC100XF,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000005c1a00003330000000000000,Genius MaxFire Grandias 12V,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000300f00000b01000000000000,GGE909 Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c283000000000000,Gioteck PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f025000031c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c383000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000f0250000c483000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000004f04000026b3000000000000,GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +0300000079000000d418000000000000,GPD Win,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000025b000000000000,GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000007d0400000840000000000000,Gravis Destroyer Tilt,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,x:b0,y:b3,platform:Windows, +030000007d0400000540000000000000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000280400000140000000000000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a3,dpup:-a4,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000008f0e00000610000000000000,GreenAsia,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a5,righty:a2,start:b11,x:b3,y:b0,platform:Windows, +03000000ac0500006b05000000000000,GT2a,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004900000000000000,Hatsune Miku Sho PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000001008000001e1000000000000,Havit HV G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows, +030000000d0f00000c00000000000000,HEXT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d81400000862000000000000,HitBox Edition Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +03000000632500002605000000000000,HJD X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +030000000d0f00000a00000000000000,Hori DOA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00008500000000000000,Hori Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002500000000000000,Hori Fighting Commander 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002d00000000000000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008400000000000000,Hori Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006201000000000000,Hori Fighting Commander Octa,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006401000000000000,Hori Fighting Commander Octa,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00005100000000000000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008600000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f0000ba00000000000000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00008800000000000000,Hori Fighting Stick mini 4 (PS3),a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, +030000000d0f00008700000000000000,Hori Fighting Stick mini 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00001000000000000000,Hori Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00003200000000000000,Hori Fightstick 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000c000000000000000,Hori Fightstick 4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00000d00000000000000,Hori Fightstick EX2,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00003701000000000000,Hori Fightstick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Windows, +030000000d0f00004000000000000000,Hori Fightstick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002100000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002700000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000a000000000000000,Hori Grip TAC4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b13,x:b0,y:b3,platform:Windows, +030000000d0f0000a500000000000000,Hori Miku Project Diva X HD PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000a600000000000000,Hori Miku Project Diva X HD PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00000101000000000000,Hori Mini Hatsune Miku FT,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00003801000000000000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Windows, +030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002301000000000000,Hori PS4 Controller Light,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +030000000d0f00001100000000000000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00002600000000000000,Hori Real Arcade Pro 3P,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004b00000000000000,Hori Real Arcade Pro 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008a00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00008b00000000000000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006f00000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00007000000000000000,Hori Real Arcade Pro 4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00003d00000000000000,Hori Real Arcade Pro N3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b4,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b6,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000ae00000000000000,Hori Real Arcade Pro N4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f00008c00000000000000,Hori Real Arcade Pro P4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f0000aa00000000000000,Hori Real Arcade Pro S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000d800000000000000,Hori Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00002200000000000000,Hori Real Arcade Pro V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005b00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005c00000000000000,Hori Real Arcade Pro V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000af00000000000000,Hori Real Arcade Pro VHS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00001b00000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000002f5000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00009c00000000000000,Hori TAC Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000c900000000000000,Hori Taiko Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006400000000000000,Horipad 3TP,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00001300000000000000,Horipad 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00005500000000000000,Horipad 4 FPS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006e00000000000000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00006600000000000000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f00004200000000000000,Horipad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000ad1b000001f5000000000000,Horipad EXT2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f0000ee00000000000000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000c100000000000000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000000d0f0000f600000000000000,Horipad Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000000d0f00006700000000000000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000000d0f0000dc00000000000000,Horipad Switch,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000242e00000b20000000000000,Hyperkin Admiral N64 Controller,+rightx:b11,+righty:b13,-rightx:b8,-righty:b12,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,platform:Windows, +03000000242e0000ff0b000000000000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Windows, +03000000790000004e95000000000000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Windows, +03000000242e00006a48000000000000,Hyperkin RetroN Sq,a:b3,b:b7,back:b5,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b0,rightshoulder:b1,start:b4,x:b2,y:b6,platform:Windows, +03000000242e00006a38000000000000,Hyperkin Trooper 2,a:b0,b:b1,back:b4,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b3,start:b5,platform:Windows, +03000000d81d00000e00000000000000,iBuffalo AC02 Arcade Joystick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows, +03000000d81d00000f00000000000000,iBuffalo BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d81d00001000000000000000,iBuffalo BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000005c0a00000285000000000000,iDroidCon,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b6,platform:Windows, +03000000696400006964000000000000,iDroidCon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000511d00000230000000000000,iGUGU Gamecore,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b1,leftstick:b4,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b2,platform:Windows, +03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +030000006f0e00002401000000000000,Injustice Fightstick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000830500005130000000000000,InterAct ActionPad,a:b0,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000ef0500000300000000000000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows, +03000000fd0500000230000000000000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows, +03000000fd0500000030000000000000,Interact GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows, +03000000fd0500003902000000000000,InterAct Hammerhead,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,rightshoulder:b7,rightstick:b5,righttrigger:b9,start:b10,x:b0,y:b1,platform:Windows, +03000000fd0500002a26000000000000,InterAct Hammerhead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows, +03000000fd0500002f26000000000000,InterAct Hammerhead FX,a:b4,b:b5,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b1,y:b2,platform:Windows, +03000000fd0500005302000000000000,InterAct ProPad,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows, +03000000ac0500002c02000000000000,Ipega Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000491900000204000000000000,Ipega PG9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000491900000304000000000000,Ipega PG9087,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows, +030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows, +030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000250900000017000000000000,Joypad Adapter,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows, +03000000bd12000003c0000000000000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ff1100004033000000000000,JPD FFB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a2,start:b15,x:b3,y:b0,platform:Windows, +03000000242f00002d00000000000000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000242f00008a00000000000000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, +03000000c4100000c082000000000000,KADE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000828200000180000000000000,Keio,a:b4,b:b5,back:b8,leftshoulder:b2,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b1,platform:Windows, +03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000bd12000001e0000000000000,Leadership,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000006f0e00000103000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00000104000000000000,Logic3,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000008f0e00001300000000000000,Logic3,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows, +030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d0400001dc2000000000000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d0400001ec2000000000000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006d04000019c2000000000000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006d0400001ac2000000000000,Logitech Precision,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000009c2000000000000,Logitech WingMan,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000006d0400000bc2000000000000,Logitech WingMan Action Pad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:a5~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:a2~,start:b8,x:b3,y:b4,platform:Windows, +030000006d0400000ac2000000000000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows, +03000000380700005645000000000000,Lynx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000222200006000000000000000,Macally,a:b1,b:b2,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700003888000000000000,Mad Catz Arcade Fightstick TE S Plus PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008532000000000000,Mad Catz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006352000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006652000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000380700005032000000000000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700005082000000000000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008031000000000000,Mad Catz FightStick Alpha PS3 ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000003807000038b7000000000000,Mad Catz Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000380700008433000000000000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008483000000000000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008134000000000000,Mad Catz Fightstick TE2 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008184000000000000,Mad Catz Fightstick TE2 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700006252000000000000,Mad Catz Micro CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008232000000000000,Mad Catz PlayStation Brawlpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008731000000000000,Mad Catz PlayStation Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000003807000056a8000000000000,Mad Catz PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700001888000000000000,Mad Catz SFIV Fightstick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000380700008081000000000000,Mad Catz SFV Arcade Fightstick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700001847000000000000,Mad Catz Street Fighter 4 Xbox 360 FightStick,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, +030000009f000000adbb000000000000,MaxJoypad Virtual Controller,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows, +030000008f0e00001330000000000000,Mayflash Controller Adapter,a:b1,b:b2,back:b8,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3~,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000242f00003700000000000000,Mayflash F101,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000790000003018000000000000,Mayflash F300 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000242f00003900000000000000,Mayflash F300 Elite Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000790000004418000000000000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000790000004318000000000000,Mayflash GameCube Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, +0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000242f0000f400000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows, +03000000790000007918000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,righttrigger:b7,rightx:a3,righty:a2,start:b8,platform:Windows, +030000008f0e00001030000000000000,Mayflash Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +0300000025090000e803000000000000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +03000000790000000318000000000000,Mayflash Wii DolphinBar,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows, +03000000790000000018000000000000,Mayflash Wii U Pro Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000790000002418000000000000,Mega Drive Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows, +0300000079000000ae18000000000000,Mega Drive Controller,a:b0,b:b1,back:b7,dpdown:b14,dpleft:b15,dpright:b13,dpup:b2,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000c0160000990a000000000000,Mega Drive Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,righttrigger:b2,start:b3,platform:Windows, +030000005e0400002800000000000000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Windows, +030000005e0400000300000000000000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000005e0400000700000000000000,Microsoft SideWinder,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +030000005e0400000e00000000000000,Microsoft SideWinder Freestyle Pro,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows, +030000005e0400002700000000000000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Windows, +03000000280d00000202000000000000,Miller Lite Cantroller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b5,x:b2,y:b3,platform:Windows, +03000000ad1b000023f0000000000000,MLG,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a6,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000ad1b00003ef0000000000000,MLG Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +03000000380700006382000000000000,MLG PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000004523000015e0000000000000,Mobapad Chitu HD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000491900000904000000000000,Mobapad Chitu HD,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000ffff00000000000000000000,Mocute M053,a:b3,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b11,leftstick:b7,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b6,righttrigger:b4,rightx:a3,righty:a4,start:b8,x:b1,y:b0,platform:Windows, +03000000d6200000e589000000000000,Moga 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000007162000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +03000000d6200000ad0d000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c62400002a89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c62400002b89000000000000,Moga XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c62400001a89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c62400001b89000000000000,Moga XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000091200004488000000000000,MUSIA PlayStation 2 Input Display,a:b0,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b6,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:b11,rightx:a2,righty:a3,start:b5,x:b1,y:b3,platform:Windows, +03000000f70600000100000000000000,N64 Adaptoid,+rightx:b2,+righty:b1,-rightx:b4,-righty:b5,a:b0,b:b3,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,platform:Windows, +030000006f0e00001311000000000000,N64 Controller,+rightx:b10,+righty:b3,-rightx:b0,-righty:b11,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,platform:Windows, +030000006b140000010c000000000000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006b1400001106000000000000,Nacon Revolution 3 PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +0300000085320000170d000000000000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +0300000085320000190d000000000000,Nacon Revolution 5 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000006b140000100d000000000000,Nacon Revolution Infinity PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006b140000080d000000000000,Nacon Revolution Unlimited Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000bd12000001c0000000000000,Nebular,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000eb0300000000000000000000,NeGcon Adapter,a:a2,b:b13,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,lefttrigger:a4,leftx:a1,righttrigger:b11,start:b3,x:a3,y:b12,platform:Windows, +0300000038070000efbe000000000000,NEO SE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +0300000092120000474e000000000000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Windows, +03000000921200004b46000000000000,NES 2 port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows, +03000000000f00000100000000000000,NES Controller,a:b1,b:b0,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, +03000000921200004346000000000000,NES Controller,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, +03000000790000004518000000000000,NEXILUX GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows, +03000000050b00000045000000000000,Nexus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Windows, +03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows, +030000007e0500001920000000000000,NSO N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Windows, +030000007e0500001720000000000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Windows, +03000000550900001472000000000000,NVIDIA Controller,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows, +03000000550900001072000000000000,NVIDIA Shield,a:b9,b:b8,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b3,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b2,righttrigger:a4,rightx:a2,righty:a5,start:b0,x:b7,y:b6,platform:Windows, +030000005509000000b4000000000000,NVIDIA Virtual,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000120c00000288000000000000,Nyko Air Flo Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000004b120000014d000000000000,NYKO Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000d62000001d57000000000000,Nyko Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000791d00000900000000000000,Nyko Playpad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000782300000a10000000000000,Onlive Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows, +030000000d0f00000401000000000000,Onyx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000008916000001fd000000000000,Onza CE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a3,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000008916000000fd000000000000,Onza TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows, +03000000362800000100000000000000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows, +03000000120c0000f60e000000000000,P4 Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows, +03000000790000002201000000000000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000006f0e00008501000000000000,PDP Fightpad Pro GameCube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006f0e00000901000000000000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000008f0e00004100000000000000,PlaySega,a:b1,b:b0,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b4,y:b3,platform:Windows, +03000000666600006706000000000000,PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows, +03000000e30500009605000000000000,PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000004c050000da0c000000000000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000632500002306000000000000,PlayStation Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000f0250000c183000000000000,PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d9040000160f000000000000,PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000004c0500003713000000000000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000d620000011a7000000000000,PowerA Core Plus GameCube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000dd62000015a7000000000000,PowerA Fusion Nintendo Switch Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d620000012a7000000000000,PowerA Fusion Nintendo Switch Fight Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000dd62000016a7000000000000,PowerA Fusion Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d620000013a7000000000000,PowerA Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +0300000062060000d570000000000000,PowerA PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d620000014a7000000000000,PowerA Spectra Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000084ca000000000000,Precision,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000c62400001a53000000000000,Pro Ex Mini,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000110e000000000000,Pro5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +030000008f0e00007530000000000000,PS1 Controller,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000100800000300000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000250900000088000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900006888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b6,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900008888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000151a00006222000000000000,PS2 Dual Plus Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000120a00000100000000000000,PS3 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000120c00001307000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c00001cf1000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f90e000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000250900000118000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900000218000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows, +030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows, +030000004f1f00000800000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +03000000632500007505000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Windows, +03000000888800000804000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows, +030000008f0e00000300000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000ba2200002010000000000000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Windows, +03000000120c00000807000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000111e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000121e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000130e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000150e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000180e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000181e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000191e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c00001e0e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000a957000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000aa57000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f21c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f31c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f41c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f51c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120c0000f70e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000120e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000160e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000001a1e0000120c000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004c0500005f0e000000000000,PS5 Access Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +030000004c050000f20d000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows, +03000000830500005020000000000000,PSX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Windows, +03000000300f00000111000000000000,Qanba 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00000211000000000000,Qanba 2P,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000300f00000011000000000000,Qanba Arcade Stick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows, +03000000300f00001611000000000000,Qanba Arcade Stick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows, +03000000222c00000025000000000000,Qanba Dragon Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000222c00000020000000000000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001211000000000000,Qanba Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001210000000000000,Qanba Joystick Plus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows, +03000000341a00000104000000000000,Qanba Joystick Q4RAF,a:b5,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b1,y:b2,platform:Windows, +03000000222c00000223000000000000,Qanba Obsidian Arcade Stick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000222c00000023000000000000,Qanba Obsidian Arcade Stick PS4,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000008a2400006682000000000000,R1 Mobile Controller,a:b3,b:b1,back:b7,leftx:a0,lefty:a1,start:b6,x:b4,y:b0,platform:Windows, +03000000086700006626000000000000,RadioShack,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000ff1100004733000000000000,Ramox FPS Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows, +030000009b2800002300000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows, +030000009b2800006900000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows, +030000009b2800000800000000000000,Raphnet Dreamcast Adapter,a:b2,b:b1,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,lefttrigger:a2,leftx:a0,righttrigger:a3,righty:a1,start:b3,x:b10,y:b9,platform:Windows, +030000009b280000d000000000000000,Raphnet Dreamcast Adapter,a:b1,b:b0,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,lefttrigger:+a5,leftx:a0,lefty:a1,righttrigger:+a2,start:b3,x:b5,y:b4,platform:Windows, +030000009b2800006200000000000000,Raphnet GameCube Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, +030000009b2800003200000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, +030000009b2800006000000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows, +030000009b2800001800000000000000,Raphnet Jaguar Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows, +030000009b2800006100000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, +030000009b2800006300000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows, +030000009b2800000200000000000000,Raphnet NES Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows, +030000009b2800004400000000000000,Raphnet PS1 and PS2 Adapter,a:b1,b:b2,back:b5,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b9,rightx:a3,righty:a4,start:b4,x:b0,y:b3,platform:Windows, +030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000009b2800000500000000000000,Raphnet Saturn Adapter 2.0,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +030000009b2800000300000000000000,Raphnet SNES Adapter,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +030000009b2800002600000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800002e00000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800002f00000000000000,Raphnet SNES Adapter,a:b1,b:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800005600000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800005700000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800001e00000000000000,Raphnet Vectrex Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a1,lefty:a2,x:b2,y:b3,platform:Windows, +030000009b2800002b00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800002c00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, +030000009b2800008000000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows, +03000000790000008f18000000000000,Rapoo Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000f8270000bf0b000000000000,Razer Kishi,a:b6,b:b7,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b18,leftshoulder:b12,leftstick:b19,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b13,rightstick:b20,righttrigger:b15,rightx:a3,righty:a4,start:b17,x:b9,y:b10,platform:Windows, +03000000321500000204000000000000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000104000000000000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000010000000000000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000321500000707000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000321500000710000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000a10000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000410000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000910000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000011000000000000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000921200004547000000000000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b6,x:b3,y:b4,platform:Windows, +03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +03000000830500006020000000000000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows, +0300000003040000c197000000000000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +03000000bd12000013d0000000000000,Retrolink Sega Saturn Classic Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows, +03000000bd12000015d0000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000341200000400000000000000,RetroUSB N64 RetroPort,+rightx:b8,+righty:b10,-rightx:b9,-righty:b11,a:b7,b:b6,dpdown:b2,dpleft:b1,dpright:b0,dpup:b3,leftshoulder:b13,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b12,start:b4,platform:Windows, +0300000000f000000300000000000000,RetroUSB RetroPad,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, +0300000000f00000f100000000000000,RetroUSB Super RetroPort,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows, +03000000830500000960000000000000,Revenger,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b5,platform:Windows, +030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006b140000020d000000000000,Revolution Pro Controller 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006b140000130d000000000000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001f01000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00004601000000000000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000fefa000000000000,Rock Candy Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e00008701000000000000,Rock Candy Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000050b0000e318000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b0000e518000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b00005819000000000000,ROG Chakram Core,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b0000181a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b00001a1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +03000000050b00001c1a000000000000,ROG Chakram X,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows, +030000004f04000001d0000000000000,Rumble Force,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000000d0f0000ad00000000000000,RX Gamepad,a:b0,b:b4,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b6,start:b9,x:b2,y:b1,platform:Windows, +030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000023f6000000000000,Saitek Cyborg V.1 Game,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001201000000000000,Saitek Dual Analog,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Windows, +03000000a30600000cff000000000000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows, +03000000a30600000d5f000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows, +03000000a30600000dff000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b8,x:b0,y:b3,platform:Windows, +03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000018f5000000000000,Saitek P3200,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001001000000000000,Saitek P480 Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000a30600000901000000000000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b5,rightx:a3,righty:a2,x:b0,y:b1,platform:Windows, +03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows, +03000000a30600002106000000000000,Saitek PS1000 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000a306000020f6000000000000,Saitek PS2700 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows, +03000000300f00001101000000000000,Saitek Rumble,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000e804000000a0000000000000,Samsung EIGP20,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000c01100000252000000000000,Sanwa Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000c01100004350000000000000,Sanwa Micro Grip P3,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,x:b3,y:b2,platform:Windows, +03000000411200004550000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a1,righty:a2,start:b9,x:b1,y:b3,platform:Windows, +03000000c01100004150000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +03000000c01100004450000000000000,Sanwa Online Grip,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b14,x:b3,y:b4,platform:Windows, +03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows, +03000000830500006120000000000000,Sanwa Smart Grip II,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,x:b1,y:b3,platform:Windows, +03000000c01100000051000000000000,Satechi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +030000004f04000028b3000000000000,Score A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000952e00002577000000000000,Scuf PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000a30c00002500000000000000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows, +03000000a30c00002400000000000000,Sega Mega Drive Mini 6B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000d804000086e6000000000000,Sega Multi Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +0300000000050000289b000000000000,Sega Saturn Adapter,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows, +0300000000f000000800000000000000,Sega Saturn Controller,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b7,righttrigger:b3,start:b0,x:b5,y:b6,platform:Windows, +03000000730700000601000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows, +03000000b40400000a01000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows, +030000003b07000004a1000000000000,SFX,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Windows, +03000000f82100001900000000000000,Shogun Bros Chameleon X1,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000120c00001c1e000000000000,SnakeByte 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000140300000918000000000000,SNES Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +0300000081170000960a000000000000,SNES Controller,a:b4,b:b0,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b5,y:b1,platform:Windows, +03000000811700009d0a000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +030000008b2800000300000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +03000000921200004653000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows, +03000000ff000000cb01000000000000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000341a00000208000000000000,Speedlink 6555,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows, +03000000341a00000908000000000000,Speedlink 6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000380700001722000000000000,Speedlink Competition Pro,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,x:b2,y:b3,platform:Windows, +030000008f0e00000800000000000000,Speedlink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000d11800000094000000000000,Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows, +03000000de280000fc11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000de280000ff11000000000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000120c0000160e000000000000,Steel Play Metaltech PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000381000001214000000000000,SteelSeries Free,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows, +03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000381000003014000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000381000003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,platform:Windows, +03000000790000001c18000000000000,STK 7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000380700003847000000000000,Street Fighter Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows, +030000001f08000001e4000000000000,Super Famicom Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows, +03000000790000000418000000000000,Super Famicom Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000341200001300000000000000,Super Racer,a:b2,b:b3,back:b8,leftshoulder:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b7,x:b0,y:b1,platform:Windows, +03000000457500002211000000000000,Szmy Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000004f0400000ab1000000000000,T16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows, +030000000d0f00007b00000000000000,TAC GEAR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000e40a00000307000000000000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Windows, +03000000e40a00000207000000000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Windows, +03000000d814000001a0000000000000,TE Kitty,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000ba2200000701000000000000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b2,platform:Windows, +03000000c61100001000000000000000,Tencent Xianyou Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows, +03000000790000002601000000000000,TGZ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000591c00002400000000000000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000591c00002600000000000000,THEGamepad,a:b2,b:b1,back:b6,leftx:a0,lefty:a1,start:b7,x:b3,y:b0,platform:Windows, +030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000004f04000023b3000000000000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f0400000ed0000000000000,ThrustMaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000008d0000000000000,ThrustMaster Ferrari 150 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows, +030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows, +030000004f04000003d0000000000000,ThrustMaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000004f04000009d0000000000000,ThrustMaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +030000006d04000088ca000000000000,Thunderpad,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000666600000288000000000000,TigerGame PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +03000000666600000488000000000000,TigerGame PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000004f04000007d0000000000000,TMini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000571d00002100000000000000,Tomee NES Controller Adapter,a:b1,b:b0,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,start:b3,platform:Windows, +03000000571d00002000000000000000,Tomee SNES Controller Adapter,a:b0,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000c01100000055000000000000,Tronsmart,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000004f04000087b6000000000000,TWCS Throttle,dpdown:b8,dpleft:b9,dpright:b7,dpup:b6,leftstick:b5,lefttrigger:-a5,leftx:a0,lefty:a1,righttrigger:+a5,platform:Windows, +03000000411200000450000000000000,Twin Shock,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Windows, +03000000d90400000200000000000000,TwinShock PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000151900005678000000000000,Uniplay U6,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +030000000b0400003065000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000242f00006e00000000000000,USB Controller,a:b1,b:b4,back:b10,leftshoulder:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b3,platform:Windows, +03000000300f00000701000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000341a00002308000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000666600000188000000000000,USB Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows, +030000006b1400000203000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000790000000a00000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows, +03000000b404000081c6000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows, +03000000b50700001503000000000000,USB Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b0,y:b1,platform:Windows, +03000000bd12000012d0000000000000,USB Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows, +03000000ff1100004133000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000632500002305000000000000,USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows, +03000000790000001a18000000000000,Venom,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, +03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00000302000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +030000006f0e00000702000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows, +0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:a3,righty:a4,start:b4,x:b2,y:b3,platform:Windows, +03000000120c0000ab57000000000000,Warrior Joypad JS083,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +030000007e0500003003000000000000,Wii U Pro,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b6,leftstick:b11,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b12,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows, +0300000032150000030a000000000000,Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +0300000032150000140a000000000000,Wolverine,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000002e160000efbe000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows, +03000000380700001647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700002045000000000000,Xbox 360 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, +03000000380700002644000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a5,start:b8,x:b2,y:b3,platform:Windows, +03000000380700002647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000003807000026b7000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700003647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a7,righty:a5,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400001907000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400009102000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000000fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000001fd000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b000016f0000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000ad1b00008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c62400000053000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c6240000fdfa000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700002847000000000000,Xbox 360 Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000a102000000000000,Xbox 360 Wireless Receiver,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000120c00000a88000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a2,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000120c00001088000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2~,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5~,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000002a0600002000000000000000,Xbox Controller,a:b0,b:b1,back:b13,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b5,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b15,righttrigger:b7,rightx:a2,righty:a5,start:b12,x:b2,y:b3,platform:Windows, +03000000300f00008888000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:b13,dpleft:b10,dpright:b11,dpup:b12,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000380700001645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000380700002645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000380700003645000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +03000000380700008645000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400000202000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000005e0400008502000000000000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400008702000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000005e0400008902000000000000,Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b10,leftstick:b8,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b9,righttrigger:b4,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows, +030000000d0f00006300000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e0400000c0b000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000fd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000ff02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e0000a802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000006f0e0000c802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000c62400003a54000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000005e040000130b000000000000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +03000000450c00002043000000000000,Xeox SL6556BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, +030000006f0e00000300000000000000,XGear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows, +03000000e0ff00000201000000000000,Xiaomi Black Shark (L),back:b0,dpdown:b11,dpleft:b9,dpright:b10,dpup:b8,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,platform:Windows, +03000000172700004431000000000000,Xiaomi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows, +03000000172700003350000000000000,Xiaomi XMGP01YM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000bc2000005060000000000000,Xiaomi XMGP01YM,+lefty:+a2,+righty:+a5,-lefty:-a1,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows, +xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows, +030000007d0400000340000000000000,Xterminator Digital Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:-a4,lefttrigger:+a4,leftx:a0,lefty:a1,paddle1:b7,paddle2:b6,rightshoulder:b5,rightstick:b9,righttrigger:b2,rightx:a3,righty:a5,start:b8,x:b3,y:b4,platform:Windows, +030000002c3600000100000000000000,Yawman Arrow,+rightx:h0.2,+righty:h0.4,-rightx:h0.8,-righty:h0.1,a:b4,b:b5,back:b6,dpdown:b15,dpleft:b14,dpright:b16,dpup:b13,leftshoulder:b10,leftstick:b0,lefttrigger:-a4,leftx:a0,lefty:a1,paddle1:b11,paddle2:b12,rightshoulder:b8,rightstick:b9,righttrigger:+a4,start:b3,x:b1,y:b2,platform:Windows, +03000000790000004f18000000000000,ZDT Android Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows, +03000000120c00000500000000000000,Zeroplus Adapter,a:b2,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b0,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows, +03000000120c0000101e000000000000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, + +# Mac OS X +030000008f0e00000300000009010000,2 In 1 Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000c82d00000031000001000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000531000000020000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001251000000010000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001251000000020000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001151000000010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001151000000020000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000a30c00002400000006020000,8BitDo M30,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,guide:b9,leftshoulder:b6,lefttrigger:b5,rightshoulder:b4,righttrigger:b7,start:b8,x:b3,y:b0,platform:Mac OS X, +03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00005106000000010000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b2,leftshoulder:b6,lefttrigger:a5,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00002090000000010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000451000000010000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00001590000001000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00006928000000010000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X, +03000000c82d00002590000000010000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00002590000001000000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00002690000000010000,8BitDo NEOGEO,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b10,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +030000003512000012ab000001000000,8BitDo NES30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d000012ab000001000000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00002028000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000022000000090000001000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000190000001000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000751000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000851000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000660000000020000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000131000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000231000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000331000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000431000001000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00002867000000010000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b3,y:b4,platform:Mac OS X, +03000000c82d00003028000000010000,8Bitdo SFC30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000102800000900000000000000,8BitDo SFC30 Joystick,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000351000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001290000001000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00004028000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000260000001000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00000261000000010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00001230000000010000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001530000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001630000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001730000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001130000000020000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001330000001000000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001330000000020000,8BitDo Ultimate Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000a00500003232000008010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000a00500003232000009010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c82d00001890000001000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, +0300000008100000e501000019040000,Anbernic Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b4,y:b3,platform:Mac OS X, +03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000a30c00002800000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000050b00000579000000010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b42,paddle1:b9,paddle2:b11,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X, +03000000050b00000679000000010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b23,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X, +03000000503200000110000047010000,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b3,start:b2,platform:Mac OS X, +03000000503200000210000047010000,Atari VCS Modern Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Mac OS X, +030000008a3500000102000000010000,Backbone One,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X, +030000008a3500000201000000010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000008a3500000202000000010000,Backbone One,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X, +030000008a3500000402000000010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000008a3500000302000000010000,Backbone One PlayStationÆ Edition,a:b0,b:b1,back:b16,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b17,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b15,x:b2,y:b3,platform:Mac OS X, +03000000c62400001a89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X, +03000000c62400001b89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000120c0000200e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000120c0000210e000000010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000d8140000cecf000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000a306000022f6000001030000,Cyborg V3 Rumble Pad PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000791d00000103000009010000,Dual Box Wii Classic Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000006e0500000720000010020000,Elecom JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Mac OS X, +030000006f0e00008401000003010000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000151900004000000001000000,Flydigi Vader 2,a:b14,b:b15,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Mac OS X, +03000000b40400001124000001040000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000b40400001224000003030000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000790000004618000000010000,GameCube Controller Adapter,a:b4,b:b0,dpdown:b56,dpleft:b60,dpright:b52,dpup:b48,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X, +03000000ac0500001a06000002020000,GameSir-T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000ad1b000001f9000000000000,Gamestop BB070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006f0e00000102000000000000,GameStop Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000ff1100003133000007010000,GameWare PC Control Pad,a:b2,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Mac OS X, +030000007d0400000540000001010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000280400000140000000020000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008f0e00000300000007010000,GreenAsia Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X, +030000000d0f00002d00000000100000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005f00000000010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00005e00000000010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008400000000010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008500000000010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000341a00000302000014010000,Hori Fighting Stick Mini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008800000000010000,Hori Fighting Stick mini 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00008700000000010000,Hori Fighting Stick mini 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00004d00000000000000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00003801000008010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Mac OS X, +030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f0000aa00000072050000,Hori Real Arcade Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000000d0f00000002000017010000,Hori Split Pad Fit,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00000002000015010000,Hori Switch Split Pad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006e00000000010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006600000000010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f00006600000000000000,Horipad FPS Plus 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f0000ee00000000010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000000d0f0000c100000072050000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000242e0000ff0b000000010000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Mac OS X, +03000000790000004e95000000010000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Mac OS X, +03000000830500006020000000000000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X, +03000000ef0500000300000000020000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Mac OS X, +03000000fd0500000030000010010000,Interact GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Mac OS X, +030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X, +030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000242f00002d00000007010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000006d04000019c2000000000000,Logitech Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000016c2000000000000,Logitech F310,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d04000019c2000005030000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000006d04000018c2000000010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700005032000000010000,Mad Catz PS3 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700008433000000010000,Mad Catz PS3 Fightstick TE S Plus,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700005082000000010000,Mad Catz PS4 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000380700008483000000010000,Mad Catz PS4 Fightstick TE S Plus,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000008f0e00001330000011010000,Mayflash Controller Adapter,a:b2,b:b4,back:b16,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b12,lefttrigger:b16,leftx:a0,lefty:a2,rightshoulder:b14,rightx:a6~,righty:a4,start:b18,x:b0,y:b6,platform:Mac OS X, +03000000790000004318000000010000,Mayflash GameCube Adapter,a:b4,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X, +03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000242f00007300000000020000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Mac OS X, +0300000079000000d218000026010000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000d620000010a7000003010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008f0e00001030000011010000,Mayflash Saturn Adapter,a:b0,b:b2,dpdown:b28,dpleft:b30,dpright:b26,dpup:b24,leftshoulder:b10,lefttrigger:b14,rightshoulder:b12,righttrigger:b4,start:b18,x:b6,y:b8,platform:Mac OS X, +0300000025090000e803000000000000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X, +03000000790000000318000000010000,Mayflash Wii DolphinBar,a:b8,b:b12,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b44,leftshoulder:b16,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b4,platform:Mac OS X, +03000000790000000018000000000000,Mayflash Wii U Pro Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X, +03000000790000000018000000010000,Mayflash Wii U Pro Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X, +030000005e0400002800000002010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Mac OS X, +030000005e0400000300000006010000,Microsoft SideWinder,a:b0,b:b1,back:b9,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Mac OS X, +030000005e0400000700000006010000,Microsoft SideWinder,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Mac OS X, +030000005e0400002700000001010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Mac OS X, +030000004523000015e0000072050000,Mobapad Chitu HD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X, +03000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c62400002b89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000632500007505000000020000,NeoGeo mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X, +030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X, +030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +030000007e0500000920000010020000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X, +050000007e05000009200000ff070000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X, +030000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Mac OS X, +030000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000550900001472000025050000,NVIDIA Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X, +030000004b120000014d000000010000,Nyko Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Mac OS X, +030000006f0e00000901000002010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000008f0e00000300000000000000,Piranha Xtreme PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000666600006706000088020000,PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Mac OS X, +030000004c050000da0c000000010000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +030000004c0500003713000000010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000d620000011a7000000020000,PowerA Core Plus Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000d620000011a7000010050000,PowerA Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000100800000300000006010000,PS2 Adapter,a:b2,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c0500006802000072050000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, +030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +0300004b4c0500005f0e000000010000,PS5 Access Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000004c050000f20d000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +050000004c050000f20d000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X, +030000005e040000e002000001000000,PXN P30 Pro Mobile,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000222c00000225000000010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000222c00000020000000010000,Qanba Drone Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000009b2800005600000020020000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Mac OS X, +030000009b2800008000000022020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Mac OS X, +030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000321500000204000000010000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000104000000010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000010000000010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000321500000011000000010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, +030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, +0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000632500008005000000010000,Redgear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000921200004547000000020000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b2,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,lefttrigger:b14,rightshoulder:b10,righttrigger:b4,start:b12,x:b6,y:b8,platform:Mac OS X, +03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000830500006020000000010000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Mac OS X, +0300000003040000c197000000000000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Mac OS X, +03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000341200000400000000000000,RetroUSB N64 RetroPort,+rightx:b8,+righty:b10,-rightx:b9,-righty:b11,a:b7,b:b6,dpdown:b2,dpleft:b1,dpright:b0,dpup:b3,leftshoulder:b13,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b12,start:b4,platform:Mac OS X, +030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006b140000130d000000010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c0500006802000002100000,Rii RK707,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b3,righttrigger:b9,rightx:a2,righty:a3,start:b1,x:b15,y:b12,platform:Mac OS X, +030000006f0e00008701000005010000,Rock Candy Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000c6240000fefa000000000000,Rock Candy PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000e804000000a000001b010000,Samsung EIGP20,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b11,leftx:a1,lefty:a3,rightshoulder:b12,rightx:a4,righty:a5,start:b16,x:b7,y:b9,platform:Mac OS X, +03000000730700000401000000010000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Mac OS X, +03000000a30c00002500000006020000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Mac OS X, +03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X, +03000000b40400000a01000000000000,Sega Saturn,a:b0,b:b1,back:b5,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b2,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X, +030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X, +0300000000f00000f100000000000000,SNES RetroPort,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,rightshoulder:b7,start:b6,x:b0,y:b1,platform:Mac OS X, +030000004c050000a00b000000000000,Sony DualShock 4 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000d11800000094000000010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X, +05000000484944204465766963650000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, +050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X, +03000000381000003014000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000381000003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, +03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X, +030000000d0f0000f600000000010000,Switch Hori Pad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, +03000000457500002211000000010000,SZMY Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000e40a00000307000001000000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X, +03000000e40a00000207000001000000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Mac OS X, +03000000790000001c18000003100000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000591c00002400000021000000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Mac OS X, +03000000591c00002600000021000000,THEGamepad,a:b2,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Mac OS X, +030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X, +030000004f0400000ed0000000020000,ThrustMaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X, +03000000571d00002100000021000000,Tomee NES Controller Adapter,a:b1,b:b0,back:b2,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,start:b3,platform:Mac OS X, +03000000bd12000015d0000000010000,Tomee Retro Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000bd12000015d0000000000000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000571d00002000000021000000,Tomee SNES Controller Adapter,a:b0,b:b1,back:b6,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005f140000c501000000020000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X, +03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X, +03000000632500002605000000010000,Uberwith Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000151900005678000010010000,Uniplay U6,a:b3,b:b6,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,leftstick:b31,lefttrigger:b21,leftx:a1,lefty:a3,rightshoulder:b19,rightstick:b33,righttrigger:b23,rightx:a4,righty:a5,start:b27,x:b11,y:b13,platform:Mac OS X, +030000006f0e00000302000025040000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +030000006f0e00000702000003060000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X, +050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X, +050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X, +030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000006f0e00000104000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +03000000c6240000045d000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000050b000003090000,Xbox Elite Controller Series 2,a:b0,b:b1,back:b31,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b53,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000200b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000200b000013050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000200b000015050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X, +030000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000c62400003a54000000000000,Xbox One PowerA Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, +030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000015050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000130b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +030000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X, +03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, +03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, + +# Linux +03000000c82d00000031000011010000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux, +03000000021000000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001251000011010000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001251000000010000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001151000011010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001151000000010000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000151000000010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000650000011010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00002090000011010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00002090000000010000,8BitDo Micro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000451000000010000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux, +03000000c82d00001590000011010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00006928000000010000,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Linux, +05000000c82d00002590000001000000,8BitDo NEOGEO,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000008000000210000011010000,8BitDo NES30,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000c82d00000310000011010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00008010000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux, +03000000022000000090000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000190000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00002038000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000751000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00000851000000010000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:a8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000660000011010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001030000011010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000020000000000000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +06000000c82d00000020000006010000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00000131000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000231000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000331000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000431000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00002867000000010000,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b3,y:b4,platform:Linux, +05000000c82d00000060000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000061000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +030000003512000012ab000010010000,8BitDo SFC30,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux, +030000003512000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000102800000900000000010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00003028000000010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000351000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000160000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001290000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00006228000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00000260000011010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00000261000000010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +05000000202800000900000000010000,8BitDo SNES30,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +05000000c82d00001230000000010000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001530000011010000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001630000011010000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001730000011010000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001130000011010000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000631000010010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00000760000011010000,8BitDo Ultimate Wireless,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c82d00001230000011010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001330000011010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00000631000014010000,8BitDo Ultimate Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c82d00000121000011010000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c82d00000121000000010000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000a00500003232000001000000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, +05000000a00500003232000008010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux, +03000000c82d00001890000011010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux, +050000005e040000e002000030110000,8BitDo Zero 2,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, +05000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux, +03000000c01100000355000011010000,Acrux Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00008801000011010000,Afterglow Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003901000013020000,Afterglow Prismatic Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001302000000010000,Afterglow Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003901000020060000,Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000100000008200000011010000,Akishop Customs PS360,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000007c1800000006000010010000,Alienware Dual Compatible Game PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +05000000491900000204000021000000,Amazon Fire Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +05000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +0300000008100000e501000001010000,Anbernic Gamepad,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Linux, +03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux, +05000000050b00000045000040000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux, +03000000050b00000579000011010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b36,paddle1:b52,paddle2:b53,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000050b00000679000000010000,ASUS ROG Kunai 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b21,paddle1:b22,paddle2:b23,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000503200000110000000000000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +03000000503200000110000011010000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +05000000503200000110000000000000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +05000000503200000110000044010000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +05000000503200000110000046010000,Atari VCS Classic Controller,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,platform:Linux, +03000000503200000210000000000000,Atari VCS Modern Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux, +03000000503200000210000011010000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000000000000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000045010000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000046010000,Atari VCS Modern Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +05000000503200000210000047010000,Atari VCS Modern Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:-a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux, +030000008a3500000201000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008a3500000202000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008a3500000302000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008a3500000402000011010000,Backbone One,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000c62400001b89000011010000,BDA MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000c21100000791000011010000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000c31100000791000011010000,Be1 GC101 Controller 1.03,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000005e0400008e02000003030000,Be1 GC101 Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000bc2000004d50000011010000,Beitong A1T2 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000bc2000000055000001000000,Betop AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000bc2000006412000011010000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b30,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006b1400000209000011010000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000af1e00002400000010010000,Clockwork Pi DevTerm,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b9,x:b3,y:b0,platform:Linux, +030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux, +03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux, +03000000a306000022f6000011010000,Cyborg V3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000791d00000103000010010000,Dual Box Wii Classic Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c11100000191000011010000,EasySMX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000242f00009100000000010000,EasySMX ESM-9101,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006e0500000320000010010000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux, +030000006e0500000720000010010000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, +030000007d0400000640000010010000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Linux, +03000000430b00000300000000010000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00008401000011010000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00008101000011010000,Faceoff Deluxe Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00008001000011010000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03005036852100000201000010010000,Final Fantasy XIV Online Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000b40400001124000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000b40400001224000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000007e0500003703000000000000,GameCube Adapter,a:b0,b:b1,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux, +19000000030000000300000002030000,GameForce Controller,a:b1,b:b0,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000ac0500005b05000010010000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000558500001b06000010010000,GameSir G4 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000ac0500002d0200001b010000,GameSir G4s,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b33,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000ac0500007a05000011010000,GameSir G5,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000bc2000005656000011010000,GameSir T4w,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000ac0500001a06000011010000,GameSir-T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +190000004b4800000010000000010000,GO-Advance Controller,a:b1,b:b0,back:b10,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,leftshoulder:b4,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b13,start:b15,x:b2,y:b3,platform:Linux, +190000004b4800000010000001010000,GO-Advance Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b13,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b16,righttrigger:b15,start:b17,x:b2,y:b3,platform:Linux, +190000004b4800000011000000010000,GO-Super Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b2,y:b3,platform:Linux, +03000000f0250000c183000010010000,Goodbetterbest Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000001010000,GPD Win Max 2 (6800U) Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000007d0400000540000000010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000280400000140000000010000,Gravis GamePad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000008f0e00000610000000010000,GreenAsia Electronics Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux, +030000008f0e00001200000010010000,GreenAsia Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +06000000adde0000efbe000002010000,Hidromancer Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d81400000862000011010000,HitBox PS3 PC Analog Mode,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux, +03000000c9110000f055000011010000,HJC Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f00006d00000020010000,Hori EDGE 301,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:+a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00008400000011010000,Hori Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00005f00000011010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00005e00000011010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00005001000009040000,Hori Fighting Commander OCTA Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00008500000010010000,Hori Fighting Commander PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00008600000002010000,Hori Fighting Commander Xbox 360,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f00003701000013010000,Hori Fighting Stick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b3,y:b2,platform:Linux, +030000000d0f00008800000011010000,Hori Fighting Stick mini 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00008700000011010000,Hori Fighting Stick mini 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,rightstick:b11,righttrigger:a4,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00001000000011010000,Hori Fightstick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b000003f5000033050000,Hori Fightstick VX,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b8,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f00004d00000011010000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00003801000011010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Linux, +030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00001100000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00002200000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006a00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006b00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00001600000000010000,Hori Real Arcade Pro EXSE,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, +030000000d0f0000aa00000011010000,Hori Real Arcade Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000000d0f00008501000017010000,Hori Split Pad Fit,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00008501000015010000,Hori Switch Split Pad Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00006e00000011010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006600000011010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f0000ee00000011010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f0000c100000011010000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000000d0f00006700000001010000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000000d0f0000f600000001000000,Horipad Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000341a000005f7000010010000,HuiJia GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +05000000242e00000b20000001000000,Hyperkin Admiral N64 Controller,+rightx:b11,+righty:b13,-rightx:b8,-righty:b12,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,platform:Linux, +03000000242e0000ff0b000011010000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,platform:Linux, +03000000242e00006a38000010010000,Hyperkin Trooper 2,a:b0,b:b1,back:b4,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b3,start:b5,platform:Linux, +03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000f00300008d03000011010000,HyperX Clutch,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000830500006020000010010000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, +030000008f0e00001330000001010000,iCode Retro Adapter,b:b3,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b1,start:b7,x:b2,y:b0,platform:Linux, +050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000d80400008200000003000000,IMS PCU0,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux, +03000000120c00000500000010010000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux, +03000000ef0500000300000000010000,InterAct AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux, +03000000fd0500000030000000010000,InterAct GoPad,a:b3,b:b4,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Linux, +03000000fd0500002a26000000010000,InterAct HammerHead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux, +0500000049190000020400001b010000,Ipega PG 9069,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000632500007505000011010000,Ipega PG 9099,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +0500000049190000030400001b010000,Ipega PG9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000491900000204000000000000,Ipega PG9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000300f00001001000010010000,Jess Tech Dual Analog Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000ba2200002010000001010000,Jess Technology Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux, +050000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux, +030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux, +03000000bd12000003c0000010010000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000242f00002d00000011010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000242f00008a00000011010000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux, +030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d040000d1ca000000000000,Logitech Chillstream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d040000d1ca000011010000,Logitech Chillstream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d0400001dc2000014400000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d0400001ec2000019200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d0400001ec2000020200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d04000019c2000011010000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d0400001fc2000005030000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux, +030000006d0400000ac2000010010000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux, +05000000380700006652000025010000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008532000010010000,Mad Catz Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +03000000380700005032000011010000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700005082000011010000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000380700008034000011010000,Mad Catz Fightstick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008084000011010000,Mad Catz Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008433000011010000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700008483000011010000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000380700001888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700003888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000380700001647000010040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000380700003847000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +030000008f0e00001330000010010000,Mayflash Controller Adapter,a:b1,b:b2,back:b8,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3~,righty:a2,start:b9,x:b0,y:b3,platform:Linux, +03000000790000004318000010010000,Mayflash GameCube Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000242f00007300000011010000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux, +0300000079000000d218000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d620000010a7000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000242f0000f700000001010000,Mayflash Magic S Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000008f0e00001030000010010000,Mayflash Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux, +0300000025090000e803000001010000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +03000000790000000318000011010000,Mayflash Wii DolphinBar,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, +03000000790000000018000011010000,Mayflash Wii U Pro Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000b50700001203000010010000,Mega World Logic 3 Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000b50700004f00000000010000,Mega World Logic 3 Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux, +03000000780000000600000010010000,Microntek Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +030000005e0400002800000000010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Linux, +030000005e0400000300000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux, +030000005e0400000700000000010000,Microsoft SideWinder,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux, +030000005e0400000e00000000010000,Microsoft SideWinder Freestyle Pro,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux, +030000005e0400002700000000010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Linux, +030000005e0400008502000000010000,Microsoft Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000005e0400008902000021010000,Microsoft Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000005e0400008e02000001000000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.1,dpleft:h0.2,dpright:h0.8,dpup:h0.4,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000004010000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000056210000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000062230000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000d102000001010000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000d102000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000dd02000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000008040000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b000009050000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000e302000003020000,Microsoft Xbox One Elite,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000000b000007040000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b12,paddle2:b14,paddle3:b13,paddle4:b15,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000000b000008040000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b12,paddle2:b14,paddle3:b13,paddle4:b15,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000050b000003090000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e0400008e02000030110000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b00000b050000,Microsoft Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux, +03000000790000001c18000010010000,Mobapad Chitu HD,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000004d4f435554452d3035335800,Mocute 053X,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +05000000e80400006e0400001b010000,Mocute 053X M59,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000004d4f435554452d3035305800,Mocute 054X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000d6200000e589000001000000,Moga 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +05000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux, +03000000c62400002b89000011010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000c62400001a89000000010000,MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000250900006688000000010000,MP8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +030000005e0400008e02000010020000,MSI GC20 V2,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00001311000011010000,N64 Controller,+rightx:b10,+righty:b3,-rightx:b0,-righty:b11,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,platform:Linux, +030000006b1400000906000014010000,Nacon Asymmetric Wireless PS4 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006b140000010c000010010000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000853200000706000012010000,Nacon GC-100,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004f1f00000800000011010000,NeoGeo PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +0300000092120000474e000000010000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Linux, +03000000790000004518000010010000,Nexilux GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux, +060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux, +03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux, +060000004e696e74656e646f20537700,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +060000007e0500000620000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +050000004c69632050726f20436f6e00,Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500000620000001800000,Nintendo Switch Left Joy-Con,a:b16,b:b15,back:b4,leftshoulder:b6,leftstick:b12,leftx:a1,lefty:a0~,rightshoulder:b8,start:b9,x:b14,y:b17,platform:Linux, +030000007e0500000920000000026803,Nintendo Switch Pro Controller,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Linux, +030000007e0500000920000011810000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500000920000001800000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux, +050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux, +05000000010000000100000003000000,Nintendo Wii Remote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000007e0500003003000001000000,Nintendo Wii U Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux, +030000007e0500001920000011810000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux, +050000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux, +050000007e0500001920000001800000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux, +030000007e0500001720000011810000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +050000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b8,start:b10,x:b3,y:b2,platform:Linux, +050000007e0500001720000001800000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, +05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux, +030000004b120000014d000000010000,NYKO Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +19000000010000000100000001010000,ODROID Go 2,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux, +19000000010000000200000011000000,ODROID Go 2,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux, +05000000362800000100000002010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, +05000000362800000100000003010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux, +05000000362800000100000004010000,OUYA Controller,a:b0,b:b3,back:b14,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,start:b16,x:b1,y:b2,platform:Linux, +03000000830500005020000010010000,Padix Rockfire PlayStation Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux, +03000000ff1100003133000010010000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e0000b802000001010000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000b802000013020000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000d702000006640000,PDP Black Camo Wired Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b13,dpup:b14,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00008501000011010000,PDP Fightpad Pro Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00002801000011010000,PDP PS3 Rock Candy Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00000901000011010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00002f01000011010000,PDP Wired PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000ad1b000004f9000000010000,PDP Xbox 360 Versus Fighting,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000a802000023020000,PDP Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +030000006f0e0000a702000023020000,PDP Xbox One Raven Black,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000d802000006640000,PDP Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e0000ef02000007640000,PDP Xbox Series Kinetic Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000666600006706000000010000,PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux, +030000004c050000da0c000011010000,PlayStation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000d9040000160f000000010000,PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +030000004c0500003713000011010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d620000011a7000011010000,PowerA Core Plus Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +03000000dd62000015a7000011010000,PowerA Fusion Nintendo Switch Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d620000012a7000011010000,PowerA Fusion Nintendo Switch Fight Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d62000000140000001010000,PowerA Fusion Pro 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000dd62000016a7000000000000,PowerA Fusion Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c62400001a53000000010000,PowerA Mini Pro Ex,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d620000013a7000011010000,PowerA Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000d620000014a7000011010000,PowerA Spectra Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c62400001a58000001010000,PowerA Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000220000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux, +03000000d62000000228000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c62400001a54000001010000,PowerA Xbox One Mini Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000240000001010000,PowerA Xbox One Spectra Infinity,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d62000000f20000001010000,PowerA Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000005f1400003102000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +050000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +050000004c0500006802000000800000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +05000000504c415953544154494f4e00,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +060000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, +030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000cc09000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004c050000cc09000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +03000000c01100000140000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000c405000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000cc09000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +0300004b4c0500005f0e000011010000,PS5 Access Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +030000004c050000e60c000011810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +030000004c050000f20d000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +050000004c050000e60c000000810000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux, +050000004c050000f20d000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000300f00001211000011010000,Qanba Arcade Joystick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux, +03000000222c00000225000011010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000222c00000025000011010000,Qanba Dragon Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000222c00000020000011010000,Qanba Drone Arcade PS4 Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000300f00001210000010010000,Qanba Joystick Plus,a:b0,b:b1,back:b8,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,start:b9,x:b2,y:b3,platform:Linux, +03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000009b2800000300000001010000,Raphnet 4nes4snes,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux, +030000009b2800004200000001010000,Raphnet Dual NES Adapter,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux, +030000009b2800003200000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, +030000009b2800006000000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux, +030000009b2800008000000020020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux, +03000000f8270000bf0b000011010000,Razer Kishi,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000104000011010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000810000011010000,Razer Panthera PS4 Evo Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000010000011010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000321500000a10000001000000,Razer Raiju Tournament Edition,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000321500000011000011010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000321500000b10000011010000,Razer Wolverine PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux, +03000000790000001100000010010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Linux, +0300000003040000c197000011010000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux, +190000004b4800000111000000010000,RetroGame Joypad,a:b1,b:b0,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +0300000081170000990a000001010000,Retronic Adapter,a:b0,leftx:a0,lefty:a1,platform:Linux, +0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, +00000000526574726f53746f6e653200,RetroStone 2 Controller,a:b1,b:b0,back:b10,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,start:b11,x:b4,y:b3,platform:Linux, +03000000341200000400000000010000,RetroUSB N64 RetroPort,+rightx:b8,+righty:b10,-rightx:b9,-righty:b11,a:b7,b:b6,dpdown:b2,dpleft:b1,dpright:b0,dpup:b3,leftshoulder:b13,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b12,start:b4,platform:Linux, +030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000006b140000130d000011010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00001f01000000010000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00008701000011010000,Rock Candy Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000c6240000fefa000000010000,Rock Candy Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000a306000023f6000011010000,Saitek Cyborg V1 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux, +03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux, +03000000a30600000cff000010010000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux, +03000000a30600000c04000011010000,Saitek P2900,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux, +03000000a306000018f5000010010000,Saitek P3200 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux, +03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux, +03000000a30600000b04000000010000,Saitek P990 Dual Analog,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux, +03000000a306000020f6000011010000,Saitek PS2700 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux, +05000000e804000000a000001b010000,Samsung EIGP20,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000d81d00000e00000010010000,Savior,a:b0,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b9,x:b4,y:b5,platform:Linux, +03000000952e00004b43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000952e00004d43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000952e00004e43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux, +03000000a30c00002500000011010000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux, +03000000790000001100000011010000,Sega Saturn,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux, +03000000790000002201000011010000,Sega Saturn,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux, +03000000b40400000a01000000010000,Sega Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux, +030000001f08000001e4000010010000,SFC Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000632500002305000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000632500002605000010010000,Shanwan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000632500007505000010010000,Shanwan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000bc2000000055000010010000,Shanwan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000f025000021c1000010010000,Shanwan Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000341a00000908000010010000,SL6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +050000004c050000cc09000001000000,Sony DualShock 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000ff000000cb01000010010000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, +03000000250900000500000000010000,Sony PS2 pad with SmartJoy Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +030000005e0400008e02000073050000,Speedlink Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000020200000,SpeedLink Xeox Pro Analog,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000d11800000094000011010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000d11800000094000000010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000112000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:+a5,dpleft:-a4,dpright:+a4,dpup:-a5,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, +03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, +03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800004211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:a6,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux, +03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux, +03000000de2800000512000010010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux, +03000000de2800000512000011010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,misc1:b2,paddle1:b21,paddle2:b20,paddle3:b23,paddle4:b22,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux, +03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b10,guide:b11,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Linux, +03000000381000003014000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000381000003114000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +0500000011010000311400001b010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b32,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +05000000110100001914000009010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000ad1b000038f0000090040000,Street Fighter IV Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000003b07000004a1000000010000,Suncom SFX Plus,a:b0,b:b2,back:b7,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux, +03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux, +0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux, +030000008f0e00000d31000010010000,SZMY Power 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000457500000401000011010000,SZMY Power DS4 Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000457500002211000010010000,SZMY Power Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +030000008f0e00001431000010010000,SZMY Power PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +03000000e40a00000307000011010000,Taito Egret II Mini Control Panel,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Linux, +03000000e40a00000207000011010000,Taito Egret II Mini Controller,a:b4,b:b2,back:b6,guide:b9,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b1,start:b7,x:b8,y:b3,platform:Linux, +03000000ba2200000701000001010000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Linux, +03000000790000001c18000011010000,TGZ Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000591c00002400000010010000,THEC64 Joystick,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, +03000000591c00002600000010010000,THEGamepad,a:b2,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux, +030000004f04000015b3000001010000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000020b3000010010000,Thrustmaster Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000023b3000000010000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004f0400000ed0000011010000,Thrustmaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000b50700000399000000010000,Thrustmaster Firestorm Digital 2,a:b2,b:b4,back:b11,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b0,righttrigger:b9,start:b1,x:b3,y:b5,platform:Linux, +030000004f04000003b3000010010000,Thrustmaster Firestorm Dual Analog 2,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b9,rightx:a2,righty:a3,x:b1,y:b3,platform:Linux, +030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux, +030000004f04000004b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +030000004f04000026b3000002040000,Thrustmaster GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c6240000025b000002020000,Thrustmaster GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000004f04000008d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000009d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000007d0000000010000,Thrustmaster T Mini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, +030000004f04000012b3000010010000,Thrustmaster Vibrating Gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux, +03000000571d00002000000010010000,Tomee SNES Adapter,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux, +03000000bd12000015d0000010010000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux, +03000000d814000007cd000011010000,Toodles 2008 Chimp PC PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux, +030000005e0400008e02000070050000,Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000c01100000591000011010000,Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +03000000680a00000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +03000000780300000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +03000000e00d00000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +03000000f00600000300000003000000,TRBot Virtual Joypad,a:b11,b:b12,back:b15,dpdown:b6,dpleft:b3,dpright:b4,dpup:b5,leftshoulder:b17,leftstick:b21,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b22,righttrigger:a2,rightx:a3,righty:a4,start:b16,x:b13,y:b14,platform:Linux, +030000005f140000c501000010010000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux, +06000000f51000000870000003010000,Turtle Beach Recon,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000100800000100000010010000,Twin PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000151900005678000010010000,Uniplay U6,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, +03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux, +03000000790000001100000000010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux, +030000006f0e00000302000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +030000006f0e00000702000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux, +05000000ac0500003232000001000000,VR Box Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux, +05000000434f4d4d414e440000000000,VX Gaming Command Series,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +0000000058626f782033363020576900,Xbox 360 Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux, +030000005e0400001907000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000014010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400009102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000030060000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400008e02000000010000,Xbox 360 EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000a102000014010000,Xbox 360 Receiver,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400000202000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +030000006f0e00001304000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000ffff0000ffff000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux, +0000000058626f782047616d65706100,Xbox Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux, +030000005e0400000a0b000005040000,Xbox One Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux, +030000005e040000d102000002010000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000ea02000001030000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000e302000002090000,Xbox One Elite,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000220b000013050000,Xbox One Elite 2 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +030000005e040000ea02000011050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000ea0200000b050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000ea0200000d050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000001050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000005050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000007050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000009050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b00000d050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000007050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000011050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000013050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000130b000015050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +060000005e040000120b000007050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b00000b050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +060000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000011050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +030000005e040000120b000014050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000130b000017050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +060000005e040000120b00000d050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +050000005e040000200b000013050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000200b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +050000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux, +03000000450c00002043000010010000,XEOX SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, +05000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux, +03000000c0160000e105000001010000,XinMo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux, +030000005e0400008e02000020010000,XInput Adapter,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, +03000000120c0000100e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, +03000000120c0000101e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, + +# Android +38653964633230666463343334313533,8BitDo Adapter,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +36666264316630653965636634386234,8BitDo Adapter 2,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f20417263616465205374,8BitDo Arcade Stick,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b5,leftshoulder:b9,lefttrigger:a4,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61393962646434393836356631636132,8BitDo Arcade Stick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +64323139346131306233636562663738,8BitDo Arcade Stick,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +64643565386136613265663236636564,8BitDo Arcade Stick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +33313433353539306634656436353432,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f20446f67626f6e65204d,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, +34343439373236623466343934376233,8BitDo FC30 Pro,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b28,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b29,righttrigger:b7,start:b5,x:b30,y:b2,platform:Android, +38426974446f2038426974446f204c69,8BitDo Lite,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +30643332373663313263316637356631,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f204c6974652032000000,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +62656331626461363634633735353032,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38393936616436383062666232653338,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f204c6974652053450000,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +39356430616562366466646636643435,8BitDo Lite SE,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000006500000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b17,leftshoulder:b9,lefttrigger:a5,rightshoulder:b10,righttrigger:a4,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000051060000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b17,leftshoulder:b9,lefttrigger:a4,rightshoulder:b10,righttrigger:a5,start:b6,x:b3,y:b2,platform:Android, +32323161363037623637326438643634,8BitDo M30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +33656266353630643966653238646264,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,start:b10,x:b19,y:b2,platform:Android, +38426974446f204d3330204d6f646b69,8BitDo M30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39366630663062373237616566353437,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,start:b6,x:b2,y:b3,platform:Android, +64653533313537373934323436343563,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,start:b6,x:b2,y:b3,platform:Android, +66356438346136366337386437653934,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,start:b18,x:b19,y:b2,platform:Android, +66393064393162303732356665666366,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b2,y:b3,platform:Android, +38426974446f204d6963726f2067616d,8BitDo Micro,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,lefttrigger:a4,leftx:b0,lefty:b1,rightshoulder:b10,righttrigger:a5,rightx:b2,righty:b3,start:b6,x:b3,y:b2,platform:Android, +61653365323561356263373333643266,8BitDo Micro,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,lefttrigger:a4,leftx:b0,lefty:b1,rightshoulder:b10,righttrigger:a5,rightx:b2,righty:b3,start:b6,x:b3,y:b2,platform:Android, +62613137616239666338343866326336,8BitDo Micro,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,lefttrigger:a4,leftx:b0,lefty:b1,rightshoulder:b10,righttrigger:a5,rightx:b2,righty:b3,start:b6,x:b3,y:b2,platform:Android, +33663431326134333366393233616633,8BitDo N30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, +38426974446f204e3330204d6f646b69,8BitDo N30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android, +05000000c82d000015900000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000065280000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38323035343766666239373834336637,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,platform:Android, +38426974446f204e3634204d6f646b69,8BitDo N64,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,platform:Android, +32363135613966656338666638666237,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35363534633333373639386466346631,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f204e454f47454f204750,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39383963623932353561633733306334,8BitDo NEOGEO,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000000220000000900000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +050000002038000009000000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38313433643131656262306631373166,8BitDo P30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38326536643339353865323063616339,8BitDo P30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38426974446f2050333020636c617373,8BitDo P30,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35376664343164386333616535333434,8BitDo Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,start:b10,x:b19,y:b2,platform:Android, +38426974446f2038426974446f205072,8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f2050726f203200000000,8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +61333362366131643730353063616330,8BitDo Pro 2,a:b1,b:b0,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +62373739366537363166326238653463,8BitDo Pro 2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b3,y:b2,platform:Android, +38386464613034326435626130396565,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f2038426974446f205265,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +66303230343038613365623964393766,8BitDo Receiver,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f20533330204d6f646b69,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66316462353561376330346462316137,8BitDo S30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000c82d000000600000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000000610000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974646f20534633302050726f00,8BitDo SF30 Pro,a:b1,b:b0,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b17,platform:Android, +61623334636338643233383735326439,8BitDo SFC30,a:b0,b:b1,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b31,start:b5,x:b30,y:b2,platform:Android, +05000000c82d000012900000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000062280000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +38316230613931613964356666353839,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f20534e3330204d6f646b,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +65323563303231646531383162646335,8BitDo SN30,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +35383531346263653330306238353131,8BitDo SN30 PP,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000c82d000001600000ffff3f00,8BitDo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000002600000ffff0f00,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +36653638656632326235346264663661,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +38303232393133383836366330346462,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +38346630346135363335366265656666,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38426974446f20534e33302050726f2b,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +536f6e7920436f6d707574657220456e,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66306331643531333230306437353936,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +050000002028000009000000ffff3f00,8BitDo SNES30,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +050000003512000020ab000000780f00,8BitDo SNES30,a:b21,b:b20,back:b30,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b26,rightshoulder:b27,start:b31,x:b24,y:b23,platform:Android, +33666663316164653937326237613331,8BitDo Zero,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +38426974646f205a65726f2047616d65,8BitDo Zero,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +05000000c82d000018900000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +05000000c82d000030320000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +33663434393362303033616630346337,8BitDo Zero 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +34656330626361666438323266633963,8BitDo Zero 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, +63396666386564393334393236386630,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +63633435623263373466343461646430,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +32333634613735616163326165323731,Amazon Luna Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +4c696e757820342e31392e3137322077,Anbernic Gamepad,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a4,start:b6,x:b2,y:b3,platform:Android, +417374726f2063697479206d696e6920,Astro City Mini,a:b23,b:b22,back:b29,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android, +35643263313264386134376362363435,Atari VCS Classic Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,start:b6,platform:Android, +32353831643566306563643065356239,Atari VCS Modern Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4f64696e20436f6e74726f6c6c657200,AYN Odin,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b14,dpright:b13,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:+a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +32303165626138343962363666346165,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +38383337343564366131323064613561,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +34313430343161653665353737323365,Elecom JC-W01U,a:b23,b:b24,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, +4875694a6961204a432d573031550000,Elecom JC-W01U,a:b23,b:b24,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, +30363230653635633863366338623265,Evo VR,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,x:b2,y:b3,platform:Android, +05000000b404000011240000dfff3f00,Flydigi Vader 2,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +34323662653333636330306631326233,Google Nexus,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35383633353935396534393230616564,Google Stadia Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000d6020000e5890000dfff3f00,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, +05000000d6020000e5890000dfff3f80,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a3,rightx:a4,righty:a5,start:b6,x:b2,y:b3,platform:Android, +66633030656131663837396562323935,Hori Battle,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +35623466343433653739346434636330,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +484f524920434f2e2c4c54442e203130,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +484f524920434f2e2c4c544420205041,Hori Gem Pad 3,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android, +65656436646661313232656661616130,Hori PC Engine Mini Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b18,platform:Android, +31303433326562636431653534636633,Hori Real Arcade Pro 3,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +32656664353964393561366362333636,Hori Switch Split Pad Pro,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +30306539356238653637313730656134,HORIPAD Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +48797065726b696e2050616400000000,Hyperkin Admiral N64 Controller,+rightx:b6,+righty:b7,-rightx:b17,-righty:b5,a:b1,b:b0,leftshoulder:b3,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,platform:Android, +62333331353131353034386136626636,Hyperkin Admiral N64 Controller,+rightx:b6,+righty:b7,-rightx:b17,-righty:b5,a:b1,b:b0,leftshoulder:b3,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,platform:Android, +31306635363562663834633739396333,Hyperkin N64 Adapter,a:b1,b:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +5368616e57616e202020202048797065,Hyperkin N64 Adapter,a:b1,b:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +0500000083050000602000000ffe0000,iBuffalo SNES Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b2,y:b3,platform:Android, +5553422c322d6178697320382d627574,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,rightshoulder:b18,start:b10,x:b3,y:b2,platform:Android, +64306137363261396266353433303531,InterAct GoPad,a:b24,b:b25,leftshoulder:b23,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,x:b21,y:b22,platform:Android, +532e542e442e20496e74657261637420,InterAct HammerHead FX,a:b23,b:b24,back:b30,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b22,lefttrigger:b28,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b25,righttrigger:b29,rightx:a2,righty:a3,start:b31,x:b20,y:b21,platform:Android, +65346535636333663931613264643164,Joy-Con,a:b21,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b23,y:b24,platform:Android, +33346566643039343630376565326335,Joy-Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, +35313531613435623366313835326238,Joy-Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, +4a6f792d436f6e20284c290000000000,Joy-Con (L),a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android, +38383665633039363066383334653465,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +39363561613936303237333537383931,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +4a6f792d436f6e202852290000000000,Joy-Con (R),a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +39656136363638323036303865326464,JYS Aapter,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +63316564383539663166353034616434,JYS Adapter,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android, +64623163333561643339623235373232,Logitech F310,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35623364393661626231343866613337,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4c6f6769746563682047616d65706164,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64396331333230326333313330336533,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39653365373864633935383236363438,Logitech G Cloud,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +416d617a6f6e2047616d6520436f6e74,Luna Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +4c756e612047616d6570616400000000,Luna Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30363066623539323534363639323363,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +31353762393935386662336365626334,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +39623565346366623931666633323530,Magic NS,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android, +6d6179666c617368206c696d69746564,Mayflash GameCube Adapter,a:b22,b:b21,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a5,righty:a2,start:b30,x:b23,y:b24,platform:Android, +436f6e74726f6c6c6572000000000000,Mayflash N64 Adapter,a:b1,b:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +65666330633838383061313633326461,Mayflash N64 Adapter,a:b1,b:b19,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a2,righty:a3,start:b18,platform:Android, +37316565396364386635383230353365,Mayflash Saturn Adapter,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, +4875694a696120205553422047616d65,Mayflash Saturn Adapter,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, +535a4d792d706f776572204c54442043,Mayflash Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b31,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, +30653962643666303631376438373532,Mayflash Wii DolphinBar,a:b23,b:b24,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b0,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b22,platform:Android, +39346131396233376535393665363161,Mayflash Wii U Pro Adapter,a:b22,b:b23,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,leftstick:b31,lefttrigger:b27,rightshoulder:b26,rightstick:b0,righttrigger:b28,rightx:a0,righty:a1,start:b30,x:b21,y:b24,platform:Android, +31323564663862633234646330373138,Mega Drive,a:b23,b:b22,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android, +37333564393261653735306132613061,Mega Drive,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android, +64363363336633363736393038313464,Mega Drive,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Android, +33323763323132376537376266393366,Microsoft Dual Strike,a:b24,b:b23,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b29,rightshoulder:b78,rightx:a0,righty:a1~,start:b26,x:b22,y:b21,platform:Android, +30306461613834333439303734316539,Microsoft SideWinder Pro,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b20,lefttrigger:b9,rightshoulder:b19,righttrigger:b10,start:b17,x:b2,y:b3,platform:Android, +32386235353630393033393135613831,Microsoft Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4d4f42415041442050726f2d48440000,Mobapad Chitu HD,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4d4f435554452d303533582d4d35312d,Mocute 053X,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +33343361376163623438613466616531,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39306635663061636563316166303966,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Android, +050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android, +34323437396534643531326161633738,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +50726f20436f6e74726f6c6c65720000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b2,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b10,rightx:a2,righty:a3,start:b18,y:b3,platform:Android, +36326533353166323965623661303933,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android, +4e363420436f6e74726f6c6c65720000,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android, +534e455320436f6e74726f6c6c657200,NSO SNES Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +64623863346133633561626136366634,NSO SNES Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android, +050000005509000003720000cf7f3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005509000010720000ffff3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005509000014720000df7f3f00,NVIDIA Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, +050000005509000014720000df7f3f80,NVIDIA Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a3,rightx:a4,righty:a5,start:b6,x:b2,y:b3,platform:Android, +37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +39383335313438623439373538343266,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b16,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,x:b1,y:b19,platform:Android, +4f5559412047616d6520436f6e74726f,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b6,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b19,platform:Android, +506572666f726d616e63652044657369,PDP PS3 Rock Candy Controller,a:b1,b:b17,back:h0.2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android, +62653335326261303663356263626339,PlayStation Classic Controller,a:b19,b:b1,back:b17,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,lefttrigger:b3,rightshoulder:b10,righttrigger:b20,start:b18,x:b2,y:b0,platform:Android, +536f6e7920496e746572616374697665,PlayStation Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +576972656c65737320436f6e74726f6c,PlayStation Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61653962353232366130326530363061,Pokken,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,rightshoulder:b20,righttrigger:b10,start:b18,x:b0,y:b2,platform:Android, +32666633663735353234363064386132,PS2,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a3,righty:a2,start:b30,x:b24,y:b21,platform:Android, +050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +536f6e7920504c415953544154494f4e,PS3 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +61363034663839376638653463633865,PS3 Controller,a:b0,b:b1,back:b15,dpdown:a14,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66366539656564653432353139356536,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66383132326164626636313737373037,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000c405000000783f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000c4050000fffe3f80,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000cc090000fffe3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30303839663330346632363232623138,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +31326235383662333266633463653332,PS4 Controller,a:b1,b:b16,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b17,x:b0,y:b2,platform:Android, +31373231336561636235613666323035,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +31663838336334393132303338353963,PS4 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +34613139376634626133336530386430,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +37626233336235343937333961353732,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +37626464343430636562316661643863,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38393161636261653636653532386639,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +63313733393535663339656564343962,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +63393662363836383439353064663939,PS4 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65366465656364636137653363376531,PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +66613532303965383534396638613230,PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +050000004c050000e60c0000fffe3f00,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000e60c0000fffe3f80,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,platform:Android, +050000004c050000e60c0000ffff3f00,PS5 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +32346465346533616263386539323932,PS5 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +32633532643734376632656664383733,PS5 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +37363764353731323963323639666565,PS5 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +61303162353165316365336436343139,PS5 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android, +64336263393933626535303339616332,Qanba 4RAF,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android, +36626666353861663864336130363137,Razer Junglecat,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000f8270000bf0b0000ffff3f00,Razer Kishi,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +62653861643333663663383332396665,Razer Kishi,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000003215000007070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +5a6869587520526574726f2042697420,Retro Bit Saturn Controller,a:b21,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b26,rightshoulder:b27,righttrigger:b28,start:b30,x:b23,y:b24,platform:Android, +32417865732031314b6579732047616d,Retro Bit SNES Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +36313938306539326233393732613361,Retro Bit SNES Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android, +526574726f466c616720576972656420,Retro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,rightshoulder:b18,start:b10,x:b2,y:b3,platform:Android, +61343739353764363165343237303336,Retro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,lefttrigger:b18,leftx:a0,lefty:a1,start:b10,x:b2,y:b3,platform:Android, +526574726f696420506f636b65742043,Retroid Pocket,a:b1,b:b0,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +582d426f7820436f6e74726f6c6c6572,Retroid Pocket,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64363363336633363736393038313463,Retrolink,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b6,platform:Android, +37393234373533633333323633646531,RetroUSB N64 RetroPort,+rightx:b17,+righty:b15,-rightx:b18,-righty:b6,a:b10,b:b9,dpdown:b19,dpleft:b1,dpright:b0,dpup:b2,leftshoulder:b7,lefttrigger:b20,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Android, +5365616c6965436f6d707574696e6720,RetroUSB N64 RetroPort,+rightx:b17,+righty:b15,-rightx:b18,-righty:b6,a:b10,b:b9,dpdown:b19,dpleft:b1,dpright:b0,dpup:b2,leftshoulder:b7,lefttrigger:b20,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Android, +526574726f5553422e636f6d20534e45,RetroUSB SNES RetroPort,a:b1,b:b20,back:b19,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b2,x:b0,y:b3,platform:Android, +64643037633038386238303966376137,RetroUSB SNES RetroPort,a:b1,b:b20,back:b19,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,rightshoulder:b10,start:b2,x:b0,y:b3,platform:Android, +37656564346533643138636436356230,Rock Candy Switch Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android, +33373336396634316434323337666361,RumblePad 2,a:b22,b:b23,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b24,platform:Android, +36363537303435333566386638366333,Samsung EIGP20,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +53616d73756e672047616d6520506164,Samsung EIGP20,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +66386565396238363534313863353065,Sanwa PlayOnline Mobile,a:b21,b:b22,back:b23,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b24,platform:Android, +32383165316333383766336338373261,Saturn,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android, +38613865396530353338373763623431,Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,lefttrigger:b10,rightshoulder:b20,righttrigger:b19,start:b17,x:b2,y:b3,platform:Android, +61316232336262373631343137633631,Saturn,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:a4,righttrigger:a5,x:b2,y:b3,platform:Android, +30353835333338613130373363646337,SG H510,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +66386262366536653765333235343634,SG H510,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android, +66633132393363353531373465633064,SG H510,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android, +62653761636366393366613135366338,SN30 PP,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android, +38376662666661636265313264613039,SNES,a:b0,b:b1,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, +5346432f555342205061640000000000,SNES Adapter,a:b0,b:b1,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b3,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android, +5553422047616d657061642000000000,SNES Controller,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android, +63303964303462366136616266653561,Sony PSP,a:b21,b:b22,back:b27,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b28,x:b23,y:b24,platform:Android, +63376637643462343766333462383235,Sony Vita,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a3,righty:a4,start:b18,x:b0,y:b2,platform:Android, +476f6f676c65204c4c43205374616469,Stadia Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +5374616469614e3848532d6532633400,Stadia Controller,a:b0,b:b1,back:b15,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android, +0500000011010000201400000f7e0f00,SteelSeries Nimbus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,x:b19,y:b2,platform:Android, +35306436396437373135383665646464,SteelSeries Nimbus Plus,a:b0,b:b1,leftshoulder:b3,leftstick:b17,lefttrigger:b9,leftx:a0,rightshoulder:b20,rightstick:b18,righttrigger:b10,rightx:a2,x:b19,y:b2,platform:Android, +33313930373536613937326534303931,Taito Egret II Mini Control Panel,a:b25,b:b23,back:b27,guide:b30,leftx:a0,lefty:a1,rightshoulder:b21,righttrigger:b22,start:b28,x:b29,y:b24,platform:Android, +54475a20436f6e74726f6c6c65720000,TGZ Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +62363434353532386238336663643836,TGZ Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +37323236633763666465316365313236,THEC64 Joystick,a:b21,b:b22,back:b27,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b27,x:b23,y:b24,platform:Android, +38346162326232346533316164363336,THEGamepad,a:b23,b:b22,back:b27,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b28,x:b24,y:b21,platform:Android, +050000004f0400000ed00000fffe3f00,ThrustMaster eSwap Pro Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +5477696e20555342204a6f7973746963,Twin Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android, +30623739343039643830333266346439,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +31643365666432386133346639383937,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30386438313564306161393537333663,Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, +33333034646336346339646538643633,Wii Classic Adapter,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android, +050000005e0400008e02000000783f00,Xbox 360 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +30396232393162346330326334636566,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +38313038323730383864666463383533,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +58626f782033363020576972656c6573,Xbox 360 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65353331386662343338643939643636,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65613532386633373963616462363038,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +47656e6572696320582d426f78207061,Xbox Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +4d6963726f736f667420582d426f7820,Xbox Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +64633436313965656664373634323364,Xbox Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e04000091020000ff073f00,Xbox One Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +050000005e04000091020000ff073f80,Xbox One Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000e00200000ffe3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android, +050000005e040000e00200000ffe3f80,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a2,righty:a3,start:b10,x:b17,y:b2,platform:Android, +050000005e040000e0020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b4,leftshoulder:b3,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android, +050000005e040000e0020000ffff3f80,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b4,leftshoulder:b3,leftstick:b8,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b10,x:b17,y:b2,platform:Android, +050000005e040000fd020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +33356661323266333733373865656366,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +34356136633366613530316338376136,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android, +35623965373264386238353433656138,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +58626f7820576972656c65737320436f,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000000b000000783f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +050000005e040000000b000000783f80,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000050b0000ffff3f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000e002000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000ea02000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000fd020000ff7f3f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000120b000000783f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android, +050000005e040000120b000000783f80,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000005e040000130b0000ffff3f00,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +65633038363832353634653836396239,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android, +050000001727000044310000ffff3f00,XiaoMi Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android, + +# iOS +05000000ac0500000100000000006d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, +05000000ac050000010000004f066d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, +05000000ac05000001000000cf076d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS, +05000000ac05000001000000df076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +05000000ac05000001000000ff076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +05000000ac0500000200000000006d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, +05000000ac050000020000004f066d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS, +050000008a35000003010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000008a35000004010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS, +4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS, +050000007e050000062000000f060000,Nintendo Switch Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS, +050000007e050000062000004f060000,Nintendo Switch Joy-Con (L),+leftx:h0.1,+lefty:h0.2,-leftx:h0.4,-lefty:h0.8,dpdown:b2,dpleft:b0,dpright:b3,dpup:b1,leftshoulder:b4,misc1:b6,rightshoulder:b5,platform:iOS, +050000007e05000008200000df070000,Nintendo Switch Joy-Con (L/R),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000007e0500000e200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, +050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+rightx:h0.4,+righty:h0.8,-rightx:h0.1,-righty:h0.2,a:b1,b:b0,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b3,y:b2,platform:iOS, +050000007e05000009200000df870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS, +050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000004c050000cc090000df070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000004c050000cc090000df870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000004c050000cc090000ff070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000004c050000cc090000ff870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,touchpad:b11,x:b2,y:b3,platform:iOS, +050000004c050000cc090000ff876d01,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000004c050000e60c0000df870000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,touchpad:b10,x:b2,y:b3,platform:iOS, +050000004c050000e60c0000ff870000,PS5 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,touchpad:b11,x:b2,y:b3,platform:iOS, +05000000ac0500000300000000006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, +05000000ac0500000300000043006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS, +05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, +05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS, +050000005e040000050b0000df070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000050b0000ff070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000005e040000e0020000df070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000e0020000ff070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, +050000005e040000130b0000df870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS, +050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS, \ No newline at end of file diff --git a/deps/SDL2/macOS/libSDL2.dylib b/deps/SDL2/macOS/libSDL2.dylib index 4f2407ce2e..4e3311c436 100644 --- a/deps/SDL2/macOS/libSDL2.dylib +++ b/deps/SDL2/macOS/libSDL2.dylib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c01d7de4de91278c6f895271a0aaa8fa6e20f3f121771ff43687331a528c9a7 -size 1307232 +oid sha256:21827eef9a41a9b3c283d832ad64a207b77169f8d13fb9cbeb11cf47d74868a1 +size 1283460 diff --git a/deps/SharpVulkan/Other/SharpVulkan.dll b/deps/SharpVulkan/Other/SharpVulkan.dll deleted file mode 100644 index faa1cdec0d..0000000000 --- a/deps/SharpVulkan/Other/SharpVulkan.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9244b489319006d979030f99a51fa7775f177c5242589faa399bc8118ecef4a0 -size 115712 diff --git a/deps/SharpVulkan/Other/SharpVulkan.pdb b/deps/SharpVulkan/Other/SharpVulkan.pdb deleted file mode 100644 index f30422c83e..0000000000 --- a/deps/SharpVulkan/Other/SharpVulkan.pdb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d5930544d1492211e21ff8648e65bd361cdbad3a6a55c9eed2d74a33e2151769 -size 23072 diff --git a/deps/SharpVulkan/Windows/SharpVulkan.dll b/deps/SharpVulkan/Windows/SharpVulkan.dll deleted file mode 100644 index e18604b65c..0000000000 --- a/deps/SharpVulkan/Windows/SharpVulkan.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e0a0ac69d935f89d0aaf3e169b9a8289c3e65d77d9e870eba8cb17a5b86ff357 -size 115712 diff --git a/deps/SharpVulkan/Windows/SharpVulkan.pdb b/deps/SharpVulkan/Windows/SharpVulkan.pdb deleted file mode 100644 index f30422c83e..0000000000 --- a/deps/SharpVulkan/Windows/SharpVulkan.pdb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d5930544d1492211e21ff8648e65bd361cdbad3a6a55c9eed2d74a33e2151769 -size 23072 diff --git a/deps/SharpVulkan/build.bat b/deps/SharpVulkan/build.bat deleted file mode 100644 index 5316a6d410..0000000000 --- a/deps/SharpVulkan/build.bat +++ /dev/null @@ -1,38 +0,0 @@ -@echo off - -if "%1" == "" ( - echo Missing Debug or Release argument - EXIT /B 1 -) - -pushd ..\..\externals\SharpVulkan\Source\SharpVulkan - -REM SDL2-CS -call "%PROGRAMFILES(X86)%\Microsoft Visual Studio\2017\Community\Common7\Tools\VsMSBuildCmd.bat" -msbuild /p:Configuration="%1" /p:SharpVulkanPlatformDefine=PLATFORM_WINDOWS /p:SharpVulkanPlatformName=Windows SharpVulkan.csproj /restore -if %ERRORLEVEL% neq 0 ( - echo Error during compilation - popd - EXIT /B %ERRORLEVEL% -) - -msbuild /p:Configuration="%1" /p:SharpVulkanPlatformDefine=PLATFORM_MACOS /p:SharpVulkanPlatformName=macOS SharpVulkan.csproj /restore -if %ERRORLEVEL% neq 0 ( - echo Error during compilation - popd - EXIT /B %ERRORLEVEL% -) - -msbuild /p:Configuration="%1" /p:SharpVulkanPlatformName=Other SharpVulkan.csproj /restore -if %ERRORLEVEL% neq 0 ( - echo Error during compilation - popd - EXIT /B %ERRORLEVEL% -) - -popd - -rem Copying assemblies -copy ..\..\externals\SharpVulkan\Source\SharpVulkan\bin\%1\Windows\*.* Windows -copy ..\..\externals\SharpVulkan\Source\SharpVulkan\bin\%1\macOS\*.* macOS -copy ..\..\externals\SharpVulkan\Source\SharpVulkan\bin\%1\Other\*.* Other diff --git a/deps/SharpVulkan/checkout.bat b/deps/SharpVulkan/checkout.bat deleted file mode 100644 index 17c83ca099..0000000000 --- a/deps/SharpVulkan/checkout.bat +++ /dev/null @@ -1,8 +0,0 @@ -CALL ..\find_git.cmd -IF NOT ERRORLEVEL 0 ( - ECHO "Could not find git.exe" - EXIT /B %ERRORLEVEL% -) -%GIT_CMD% clone https://github.com/xenko3d/SharpVulkan ../../externals/SharpVulkan -IF NOT ERRORLEVEL 0 PAUSE - diff --git a/deps/SharpVulkan/macOS/SharpVulkan.dll b/deps/SharpVulkan/macOS/SharpVulkan.dll deleted file mode 100644 index fe9ba9d7ea..0000000000 --- a/deps/SharpVulkan/macOS/SharpVulkan.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe59be2789fe618181360ad5536d1d3cdd22b9eb26bf9cfca4643f4b8c6068f1 -size 115712 diff --git a/deps/SharpVulkan/macOS/SharpVulkan.pdb b/deps/SharpVulkan/macOS/SharpVulkan.pdb deleted file mode 100644 index f30422c83e..0000000000 --- a/deps/SharpVulkan/macOS/SharpVulkan.pdb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d5930544d1492211e21ff8648e65bd361cdbad3a6a55c9eed2d74a33e2151769 -size 23072 diff --git a/deps/TextureWrappers/Debug/x64/AtitcWrapper.dll b/deps/TextureWrappers/Debug/x64/AtitcWrapper.dll index 8df8a58d0c..d3f1b2d53d 100644 --- a/deps/TextureWrappers/Debug/x64/AtitcWrapper.dll +++ b/deps/TextureWrappers/Debug/x64/AtitcWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43f6ddf666fc14ee91a995d18d8baa8e03d69945cdb79194113c266fadc501e5 -size 773632 +oid sha256:f2d8125ccf5a03e7c2acdcdbcf16752de84411b076478c44fe580a56edcefede +size 785408 diff --git a/deps/TextureWrappers/Debug/x64/AtitcWrapper.pdb b/deps/TextureWrappers/Debug/x64/AtitcWrapper.pdb index 506b51101a..6d6fec1317 100644 --- a/deps/TextureWrappers/Debug/x64/AtitcWrapper.pdb +++ b/deps/TextureWrappers/Debug/x64/AtitcWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa1677074a92a87ad5df330a07180daa736dafe6b35adba580ad021c00554670 -size 855040 +oid sha256:28919087672fa12c887acbe09b60eeff16a0afc85579816ba6e1cf6a9463867f +size 790528 diff --git a/deps/TextureWrappers/Debug/x64/DxtWrapper.dll b/deps/TextureWrappers/Debug/x64/DxtWrapper.dll index 3d34dd1281..3ebc43f605 100644 --- a/deps/TextureWrappers/Debug/x64/DxtWrapper.dll +++ b/deps/TextureWrappers/Debug/x64/DxtWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2323fe3f748acbb703ac04060fe34c0a6b19ef9f3006a322010871a74f7cff44 -size 926720 +oid sha256:cd7b1f91df1a76b68a3e2ef0762cdfd2f88457ab06643a34e6cd557c82c86504 +size 988160 diff --git a/deps/TextureWrappers/Debug/x64/DxtWrapper.pdb b/deps/TextureWrappers/Debug/x64/DxtWrapper.pdb index 2d3919ae09..9765077d45 100644 --- a/deps/TextureWrappers/Debug/x64/DxtWrapper.pdb +++ b/deps/TextureWrappers/Debug/x64/DxtWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2fb2bcf770452f1dd2172e4efd5b09fb2c7d53edb946886d36deef0c3b0156a -size 4721664 +oid sha256:a3ceebe1e3e13e590f2b79868ffc0e968224e4b287a70c8773969730bc4b87d4 +size 1806336 diff --git a/deps/TextureWrappers/Debug/x64/PvrttWrapper.dll b/deps/TextureWrappers/Debug/x64/PvrttWrapper.dll index 92ecb76da3..74f324b25e 100644 --- a/deps/TextureWrappers/Debug/x64/PvrttWrapper.dll +++ b/deps/TextureWrappers/Debug/x64/PvrttWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec5c3c4cb5e9bf9769501177acc4ca18be42fe4982ea6bf3c54c5ea3806d707b -size 101888 +oid sha256:c5f2b585d77e55848855082e20c48d476a05a0c045f9ade6fe3570935c271cf4 +size 3765248 diff --git a/deps/TextureWrappers/Debug/x64/PvrttWrapper.pdb b/deps/TextureWrappers/Debug/x64/PvrttWrapper.pdb index b52e991a3e..ab7c09c94f 100644 --- a/deps/TextureWrappers/Debug/x64/PvrttWrapper.pdb +++ b/deps/TextureWrappers/Debug/x64/PvrttWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07f0c87e38290dc555a3f09253836f2beb993101cca473484e296d51190156ca -size 879616 +oid sha256:352edf7bec9c4efeacbba934408115a59ab883c661df6668c92a8898790ca5a3 +size 1118208 diff --git a/deps/TextureWrappers/Debug/x86/AtitcWrapper.dll b/deps/TextureWrappers/Debug/x86/AtitcWrapper.dll index a727181c2d..a0fa70eb7d 100644 --- a/deps/TextureWrappers/Debug/x86/AtitcWrapper.dll +++ b/deps/TextureWrappers/Debug/x86/AtitcWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e4698d399bc77f46af41382744d1b4ba1ef1e6c6da20a5247fd3a4c06ec1272 -size 651264 +oid sha256:3df89f4701f794cd4717cb6d3b1261f4ced05b0564cd25203f9933a38217d5ad +size 653824 diff --git a/deps/TextureWrappers/Debug/x86/AtitcWrapper.pdb b/deps/TextureWrappers/Debug/x86/AtitcWrapper.pdb index 2448a69a3b..632a702425 100644 --- a/deps/TextureWrappers/Debug/x86/AtitcWrapper.pdb +++ b/deps/TextureWrappers/Debug/x86/AtitcWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:470a178b124f9468271f1223e70f2edec608e6c8d08f7941b20aa7a92d894453 -size 733184 +oid sha256:cf91977b8118a295c1bce88962c46074f6b00c4339d2768d747d9af3170aa64b +size 757760 diff --git a/deps/TextureWrappers/Debug/x86/DxtWrapper.dll b/deps/TextureWrappers/Debug/x86/DxtWrapper.dll index f614d8d6e9..008a5e835a 100644 --- a/deps/TextureWrappers/Debug/x86/DxtWrapper.dll +++ b/deps/TextureWrappers/Debug/x86/DxtWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f78dec360f13da27bd883d72777c56eadee7373f6567bb760f6231b88a4015f -size 764416 +oid sha256:b502a8edbeba1b9fe576b539b16106bef6df826ffd31f74bde753caff32eecd3 +size 754176 diff --git a/deps/TextureWrappers/Debug/x86/DxtWrapper.pdb b/deps/TextureWrappers/Debug/x86/DxtWrapper.pdb index 3fc641c212..44aaf27092 100644 --- a/deps/TextureWrappers/Debug/x86/DxtWrapper.pdb +++ b/deps/TextureWrappers/Debug/x86/DxtWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16276f1b2600a9be6395c3da140d7aab954dd4a5b2ef99359459c6f3a9c5e96f -size 1929216 +oid sha256:ba15ad836f8a700baebeae6eb32baf84bd5cbaf3cc594f2092d61c795efd3ef2 +size 1896448 diff --git a/deps/TextureWrappers/Debug/x86/PvrttWrapper.dll b/deps/TextureWrappers/Debug/x86/PvrttWrapper.dll index 6c2783fb7b..a450e29413 100644 --- a/deps/TextureWrappers/Debug/x86/PvrttWrapper.dll +++ b/deps/TextureWrappers/Debug/x86/PvrttWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f3c2822b17698bb29d3564b23025b3e8d71d5fc3c619bee7bb57416b2613810 -size 78336 +oid sha256:a9dda5b511882cd26b2bc8a095a635d1b27b00353509a3eb9ce0ee9941477d59 +size 3564544 diff --git a/deps/TextureWrappers/Debug/x86/PvrttWrapper.pdb b/deps/TextureWrappers/Debug/x86/PvrttWrapper.pdb index 30c0ef9d79..80e5ea70ce 100644 --- a/deps/TextureWrappers/Debug/x86/PvrttWrapper.pdb +++ b/deps/TextureWrappers/Debug/x86/PvrttWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1716b4e277a7ac0445bb39b1e43626e25d4e0fe88221161598333207bf4ad6a6 -size 512000 +oid sha256:b7ed578fecdc89ae8f8771c522932b544c01ee35d1cc5e6468929d305a184aad +size 1413120 diff --git a/deps/TextureWrappers/Release/x64/AtitcWrapper.dll b/deps/TextureWrappers/Release/x64/AtitcWrapper.dll index ee280159fc..f4cb141524 100644 --- a/deps/TextureWrappers/Release/x64/AtitcWrapper.dll +++ b/deps/TextureWrappers/Release/x64/AtitcWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce23e245b5cd5d6b83fba888c37acb3117b6bb51e60351aaebd37515a2b96b92 +oid sha256:cd9132012ed0591cff258d2ae019eb80598b5eae54b04cb7bf4fcda231845c8c size 588800 diff --git a/deps/TextureWrappers/Release/x64/AtitcWrapper.pdb b/deps/TextureWrappers/Release/x64/AtitcWrapper.pdb index 176d1b2bcd..27847a0b50 100644 --- a/deps/TextureWrappers/Release/x64/AtitcWrapper.pdb +++ b/deps/TextureWrappers/Release/x64/AtitcWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a3763585fa3a87cfa6eb562a47601297acd17dcdff0dc6f437cc1cdb7f939bb +oid sha256:8fd46c9249540b1af44ed2485e12885c601ff2c499c41acea3f46872da8ebf5c size 757760 diff --git a/deps/TextureWrappers/Release/x64/DxtWrapper.dll b/deps/TextureWrappers/Release/x64/DxtWrapper.dll index ed7e13087a..214b8634c0 100644 --- a/deps/TextureWrappers/Release/x64/DxtWrapper.dll +++ b/deps/TextureWrappers/Release/x64/DxtWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1ab2a16d37165bdadf4c5efc6590cb729deb023192b50f3a88d74d44d3674d3 -size 250368 +oid sha256:ec674dc66570198c6ac2aed2d365b6ea6d56c31407144313740a168627a2711c +size 260608 diff --git a/deps/TextureWrappers/Release/x64/DxtWrapper.pdb b/deps/TextureWrappers/Release/x64/DxtWrapper.pdb index 098cee8ade..976f3a2754 100644 --- a/deps/TextureWrappers/Release/x64/DxtWrapper.pdb +++ b/deps/TextureWrappers/Release/x64/DxtWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5de8e0fc317db0e97a16ca5e2f86f2f4e6eeff9fcf6dac3217cec02eb9d6578b -size 3682304 +oid sha256:63e5fc360e441e9380abf028b84cad06a71313d83b2c69c2abf1df89647fb89f +size 3133440 diff --git a/deps/TextureWrappers/Release/x64/PvrttWrapper.dll b/deps/TextureWrappers/Release/x64/PvrttWrapper.dll index 17e00aafe6..bfc9ef4333 100644 --- a/deps/TextureWrappers/Release/x64/PvrttWrapper.dll +++ b/deps/TextureWrappers/Release/x64/PvrttWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5f267fb90f265bf078f74724ae6ddc10f7a188f4b138ae6183802549ae8e080 -size 19456 +oid sha256:a5043f0fcf13c203e65660f5c72fb7635ab925d7535204c36935d3494a07a6ce +size 2849280 diff --git a/deps/TextureWrappers/Release/x64/PvrttWrapper.pdb b/deps/TextureWrappers/Release/x64/PvrttWrapper.pdb index c5561d4b0e..90ce8d8a82 100644 --- a/deps/TextureWrappers/Release/x64/PvrttWrapper.pdb +++ b/deps/TextureWrappers/Release/x64/PvrttWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93357533ee2227668f08e9afc7650c6f4d4bc2ecae76c39c5b4ab0ead85f0079 -size 503808 +oid sha256:501157c577dfd76201e2adc747bc164a5ea06559b27800cb444ff07a0a104dff +size 1191936 diff --git a/deps/TextureWrappers/Release/x86/AtitcWrapper.dll b/deps/TextureWrappers/Release/x86/AtitcWrapper.dll index 76adb90758..72cba93f89 100644 --- a/deps/TextureWrappers/Release/x86/AtitcWrapper.dll +++ b/deps/TextureWrappers/Release/x86/AtitcWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38cbd1928b357364b6c5d74b9f5e32089fa776a9e4d63cb02212837aae6c0c11 -size 489984 +oid sha256:e7b060d939d4d94efdd27e17c3c4f91fce91ab9361760be07ac6987d9eeca3d2 +size 490496 diff --git a/deps/TextureWrappers/Release/x86/AtitcWrapper.pdb b/deps/TextureWrappers/Release/x86/AtitcWrapper.pdb index 20062a1f48..2ac6610d69 100644 --- a/deps/TextureWrappers/Release/x86/AtitcWrapper.pdb +++ b/deps/TextureWrappers/Release/x86/AtitcWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6eefc48a9df1cbf698eba106965e69b69aaa65c11f4a04e64968cbaf065b1e5e -size 782336 +oid sha256:437dc9babb92f0a03ef8972edda1148c05d514a7e36d6fc246b45e8682b48214 +size 741376 diff --git a/deps/TextureWrappers/Release/x86/DxtWrapper.dll b/deps/TextureWrappers/Release/x86/DxtWrapper.dll index cb0efc86c6..3177ff9116 100644 --- a/deps/TextureWrappers/Release/x86/DxtWrapper.dll +++ b/deps/TextureWrappers/Release/x86/DxtWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a162680ec416d8f057436e3d31ae005a457a0be0d24dcad2b48410a537faa8b0 -size 217600 +oid sha256:00c280c6919da340604fe7b874bc260e73a3c9acdaeb9be41ffa3ceaabd431dd +size 223232 diff --git a/deps/TextureWrappers/Release/x86/DxtWrapper.pdb b/deps/TextureWrappers/Release/x86/DxtWrapper.pdb index 312bcee2f5..ed8846cdac 100644 --- a/deps/TextureWrappers/Release/x86/DxtWrapper.pdb +++ b/deps/TextureWrappers/Release/x86/DxtWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccb18aeb4aa3c1dfb84fab9eb3c8dfbfea5112089a9be157747c66b32b83dcf0 -size 4263936 +oid sha256:1985ef7078ee45d0dcff4eb7018db37c6f52ebc12d2cdfe83402c2751301f4a0 +size 3149824 diff --git a/deps/TextureWrappers/Release/x86/PvrttWrapper.dll b/deps/TextureWrappers/Release/x86/PvrttWrapper.dll index b3e590e4a6..15e264e1cd 100644 --- a/deps/TextureWrappers/Release/x86/PvrttWrapper.dll +++ b/deps/TextureWrappers/Release/x86/PvrttWrapper.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2aadad513e04ac3371c58bea12f6e0551e514cffd039c32aa1e105a1e014a246 -size 15872 +oid sha256:b1e09b968aacde5d3ac7239bd9473fc364881d6a330274e386d1d9021ca6dd06 +size 2723328 diff --git a/deps/TextureWrappers/Release/x86/PvrttWrapper.pdb b/deps/TextureWrappers/Release/x86/PvrttWrapper.pdb index 1ec17a7d0d..f0c7504959 100644 --- a/deps/TextureWrappers/Release/x86/PvrttWrapper.pdb +++ b/deps/TextureWrappers/Release/x86/PvrttWrapper.pdb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62da6b85eb8e14d23e47e457740885dd7591f2a65b12ad83fc1ebd747fb95508 -size 569344 +oid sha256:5e0470e9dc4060fd209cf68988d55ce2591a98cc7de84ca395e95cba83787627 +size 1191936 diff --git a/deps/VHACD/build.bat b/deps/VHACD/build.bat index 2c0115c69b..94722cd580 100644 --- a/deps/VHACD/build.bat +++ b/deps/VHACD/build.bat @@ -1,7 +1,8 @@ -pushd ..\..\externals\bullet2-sharp-mobile\src\Windows +pushd ..\..\externals\BulletSharpPInvoke\src\VHACD_Lib\VHACD REM Compile vhacd -call build-vhacd-windows.bat +msbuild VHACD.vcxproj /p:Configuration=Release;Platform=x64 +msbuild VHACD.vcxproj /p:Configuration=Release;Platform=Win32 if %ERRORLEVEL% neq 0 GOTO :error_popd popd @@ -9,8 +10,8 @@ REM Create folders mkdir x86 mkdir x64 -copy ..\..\externals\bullet2-sharp-mobile\src\VHACD_Lib\VHACD\Release\*.dll x86 -copy ..\..\externals\bullet2-sharp-mobile\src\VHACD_Lib\VHACD\x64\Release\*.dll x64 +copy ..\..\externals\BulletSharpPInvoke\src\VHACD_Lib\VHACD\Release\*.dll x86 +copy ..\..\externals\BulletSharpPInvoke\src\VHACD_Lib\VHACD\x64\Release\*.dll x64 GOTO :end :error_popd diff --git a/deps/VHACD/x64/VHACD.dll b/deps/VHACD/x64/VHACD.dll index 13c430caa4..62939c7f69 100644 --- a/deps/VHACD/x64/VHACD.dll +++ b/deps/VHACD/x64/VHACD.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7e23ac79a0d1dd448aa163404b0cb7b8b556866cc7c4d770ec677ddc37e8f44 -size 175616 +oid sha256:1f96e453cf819ce151d1eaa0c70438310cd0118acbfb37dd90d502cbc05e55fa +size 159232 diff --git a/deps/VHACD/x86/VHACD.dll b/deps/VHACD/x86/VHACD.dll index 2b8828c3c2..b905214bc5 100644 --- a/deps/VHACD/x86/VHACD.dll +++ b/deps/VHACD/x86/VHACD.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19ca0604b31e005354d3eb8d34c031cf23d3edfb01d6775904d94bac3af582ee -size 152576 +oid sha256:e869ead8faff3ca66b24742eed03a887086111e9eb6ea08b085d12503f5c5020 +size 141824 diff --git a/deps/WindowsRegistry/Microsoft.Win32.Registry.dll b/deps/WindowsRegistry/Microsoft.Win32.Registry.dll new file mode 100644 index 0000000000..58bd56cc2c --- /dev/null +++ b/deps/WindowsRegistry/Microsoft.Win32.Registry.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5738f1e014d65979898848781075db25eede1f14d7e38d68cea6a4c49bc2b2c4 +size 53640 diff --git a/deps/assimp/bin/x64/Assimp64.dll b/deps/assimp/bin/x64/Assimp64.dll new file mode 100644 index 0000000000..07e8b4b854 --- /dev/null +++ b/deps/assimp/bin/x64/Assimp64.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c490d6c6e29e1cf788d84273a30e19ccab96530cf5702a8613be33193076518 +size 6660096 diff --git a/deps/assimp/bin/x64/D3DCompiler_42.dll b/deps/assimp/bin/x64/D3DCompiler_42.dll new file mode 100644 index 0000000000..6e72d87f8f --- /dev/null +++ b/deps/assimp/bin/x64/D3DCompiler_42.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c976311406c23aa71018d274da0ecdef43b6e3a3b0b01e941a5e8e4e974386c +size 1974616 diff --git a/deps/assimp/bin/x64/D3DX9_42.dll b/deps/assimp/bin/x64/D3DX9_42.dll new file mode 100644 index 0000000000..4a61fe5506 --- /dev/null +++ b/deps/assimp/bin/x64/D3DX9_42.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8b9cfab7fffbc8f98e41aa439d72921dc180634a1febca2a9d41a0df35d3472 +size 1892184 diff --git a/deps/assimp/bin/x64/assimp.exe b/deps/assimp/bin/x64/assimp.exe new file mode 100644 index 0000000000..557b82636f --- /dev/null +++ b/deps/assimp/bin/x64/assimp.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d8d72e23d440497ad00ff95f229bedf8c0911c3bdc25d91a58fbcfdabc23c6a +size 209408 diff --git a/deps/assimp/bin/x64/assimp_viewer.exe b/deps/assimp/bin/x64/assimp_viewer.exe new file mode 100644 index 0000000000..e2efec9be9 --- /dev/null +++ b/deps/assimp/bin/x64/assimp_viewer.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bffdca3e1e43368fc8df936473703d42609fcc9874fca6d0e3e95c2a513b44df +size 552960 diff --git a/deps/bepuphysics2/BepuPhysics.dll b/deps/bepuphysics2/BepuPhysics.dll new file mode 100644 index 0000000000..c120406912 --- /dev/null +++ b/deps/bepuphysics2/BepuPhysics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79cdb9042aeed4e137415d4a5b6a43de5d4f3a4c68c495e421f1ddf57dd7864c +size 879616 diff --git a/deps/bepuphysics2/BepuUtilities.dll b/deps/bepuphysics2/BepuUtilities.dll new file mode 100644 index 0000000000..cf452a9749 --- /dev/null +++ b/deps/bepuphysics2/BepuUtilities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e246cb07d549c5fe1827990c2baf40c4336903001b307c51ea9486c244ca5c +size 157184 diff --git a/deps/bepuphysics2/Debug/BepuPhysics.dll b/deps/bepuphysics2/Debug/BepuPhysics.dll new file mode 100644 index 0000000000..3e1f05a80f --- /dev/null +++ b/deps/bepuphysics2/Debug/BepuPhysics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f8fdb5f3f607d0bd553e60928992d5924269ca18fdf39d2fc5a3f47fe040835 +size 830976 diff --git a/deps/bepuphysics2/Debug/BepuPhysics.pdb b/deps/bepuphysics2/Debug/BepuPhysics.pdb new file mode 100644 index 0000000000..da9b1020f5 --- /dev/null +++ b/deps/bepuphysics2/Debug/BepuPhysics.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68d4631923ea23306e8bb9d5ec9dc269689c71e3853e40b8298667be41828acf +size 419332 diff --git a/deps/bepuphysics2/Debug/BepuUtilities.dll b/deps/bepuphysics2/Debug/BepuUtilities.dll new file mode 100644 index 0000000000..0d14fa727c --- /dev/null +++ b/deps/bepuphysics2/Debug/BepuUtilities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c3338ac85ad7705e875561945a82b229d2b93f6d10987b3b48bc0e0e496170b +size 152064 diff --git a/deps/bepuphysics2/Debug/BepuUtilities.pdb b/deps/bepuphysics2/Debug/BepuUtilities.pdb new file mode 100644 index 0000000000..d6cef5e1e3 --- /dev/null +++ b/deps/bepuphysics2/Debug/BepuUtilities.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:006f060064a5c2310e2f4e28b82c14ae00398eea5ce1470991e81c6710b789b1 +size 75372 diff --git a/deps/bepuphysics2/Release/BepuPhysics.dll b/deps/bepuphysics2/Release/BepuPhysics.dll new file mode 100644 index 0000000000..c120406912 --- /dev/null +++ b/deps/bepuphysics2/Release/BepuPhysics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79cdb9042aeed4e137415d4a5b6a43de5d4f3a4c68c495e421f1ddf57dd7864c +size 879616 diff --git a/deps/bepuphysics2/Release/BepuUtilities.dll b/deps/bepuphysics2/Release/BepuUtilities.dll new file mode 100644 index 0000000000..cf452a9749 --- /dev/null +++ b/deps/bepuphysics2/Release/BepuUtilities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e246cb07d549c5fe1827990c2baf40c4336903001b307c51ea9486c244ca5c +size 157184 diff --git a/deps/freetype/Android/armeabi/libfreetype.so b/deps/freetype/Android/armeabi/libfreetype.so deleted file mode 100644 index 5eb441fdfe..0000000000 --- a/deps/freetype/Android/armeabi/libfreetype.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36f4c9df3a11830ae3d97cb141d19327a30a5e908a874fc223add2975c400b32 -size 716876 diff --git a/deps/glslang/Linux/glslangValidator b/deps/glslang/Linux/glslangValidator index 772a7db836..53893ab44b 100644 --- a/deps/glslang/Linux/glslangValidator +++ b/deps/glslang/Linux/glslangValidator @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5597a562721da4c8153d61ec189d5bd2751dd31f63c3e4db810530b906b71df6 -size 1641090 +oid sha256:82aff71e096ebee938455fa2e3dbccbc5504709bd7ef73aa3f1bf2642fb02fb8 +size 5757268 diff --git a/deps/glslang/README.md b/deps/glslang/README.md new file mode 100644 index 0000000000..bc644b96d0 --- /dev/null +++ b/deps/glslang/README.md @@ -0,0 +1,5 @@ +glslang +======= + +Downloaded from https://github.com/KhronosGroup/glslang/releases/tag/7.11.3214 +Release versions diff --git a/deps/glslang/Windows/glslangValidator.exe b/deps/glslang/Windows/glslangValidator.exe index b7d942b9be..cc9b635bf5 100644 --- a/deps/glslang/Windows/glslangValidator.exe +++ b/deps/glslang/Windows/glslangValidator.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5f568052b11b54ad17de24008bfb7c6e5367a0251786dc05cf6143eb887de16 -size 858912 +oid sha256:1995da26768ef6aa55aea28e3ad6e3c20f47e4072b52e3406850058dcb955e10 +size 4182528 diff --git a/deps/glslang/macOS/glslangValidator b/deps/glslang/macOS/glslangValidator index 65dab5950a..810ed2ead0 100644 --- a/deps/glslang/macOS/glslangValidator +++ b/deps/glslang/macOS/glslangValidator @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3130b88aeb933c37bd3d3031e87d4dced2c290406a318e0f7a7f6b5b2955c27 -size 5823048 +oid sha256:ac7394700b3cd860ac7503485f43281693c20e0ad0563230087de47898d09b70 +size 6104252 diff --git a/deps/Mono.Cecil/.gitignore b/deps/monolinker/.gitignore similarity index 100% rename from deps/Mono.Cecil/.gitignore rename to deps/monolinker/.gitignore diff --git a/deps/Mono.Cecil/License.txt b/deps/monolinker/License.txt similarity index 100% rename from deps/Mono.Cecil/License.txt rename to deps/monolinker/License.txt diff --git a/deps/Mono.Cecil/Mono.Cecil.Mdb.dll b/deps/monolinker/Mono.Cecil.Mdb.dll similarity index 100% rename from deps/Mono.Cecil/Mono.Cecil.Mdb.dll rename to deps/monolinker/Mono.Cecil.Mdb.dll diff --git a/deps/Mono.Cecil/Mono.Cecil.Pdb.dll b/deps/monolinker/Mono.Cecil.Pdb.dll similarity index 100% rename from deps/Mono.Cecil/Mono.Cecil.Pdb.dll rename to deps/monolinker/Mono.Cecil.Pdb.dll diff --git a/deps/Mono.Cecil/Mono.Cecil.dll b/deps/monolinker/Mono.Cecil.dll similarity index 100% rename from deps/Mono.Cecil/Mono.Cecil.dll rename to deps/monolinker/Mono.Cecil.dll diff --git a/deps/Mono.Cecil/monolinker.exe b/deps/monolinker/monolinker.exe similarity index 100% rename from deps/Mono.Cecil/monolinker.exe rename to deps/monolinker/monolinker.exe diff --git a/samples/Audio/SimpleAudio/Assets/Shared/GameSettings.xkgamesettings b/samples/Audio/SimpleAudio/Assets/Shared/GameSettings.xkgamesettings index 72112b57e0..17d61ea19a 100644 --- a/samples/Audio/SimpleAudio/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Audio/SimpleAudio/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: e5747128-7063-4215-b67d-7f798285d381 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 5f4a3789-b182-4b32-9088-acbf9e13edb5:Scene GraphicsCompositor: c73fddfe-01b7-4fe0-ab60-51f001463388:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Audio/SimpleAudio/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Audio/SimpleAudio/Assets/Shared/GraphicsCompositor.xkgfxcomp index d2ec4387f9..45a7148f5f 100644 --- a/samples/Audio/SimpleAudio/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Audio/SimpleAudio/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: c73fddfe-01b7-4fe0-ab60-51f001463388 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,19 +91,21 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: b461da84-8226-4ca7-b475-02c695905706 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! 57e08c0b-503c-44d7-9d9b-8ba93e72fea6 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! b461da84-8226-4ca7-b475-02c695905706 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! b461da84-8226-4ca7-b475-02c695905706 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/Audio/SimpleAudio/SimpleAudio.Game/SimpleAudio.Game.csproj b/samples/Audio/SimpleAudio/SimpleAudio.Game/SimpleAudio.Game.csproj index 0dc3dda92e..e262dad866 100644 --- a/samples/Audio/SimpleAudio/SimpleAudio.Game/SimpleAudio.Game.csproj +++ b/samples/Audio/SimpleAudio/SimpleAudio.Game/SimpleAudio.Game.csproj @@ -4,10 +4,10 @@ SimpleAudio - - - - - + + + + + \ No newline at end of file diff --git a/samples/Audio/SimpleAudio/SimpleAudio.Windows/Resources/Icon.ico b/samples/Audio/SimpleAudio/SimpleAudio.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Audio/SimpleAudio/SimpleAudio.Windows/Resources/Icon.ico and b/samples/Audio/SimpleAudio/SimpleAudio.Windows/Resources/Icon.ico differ diff --git a/samples/Games/JumpyJet/Assets/Shared/GameSettings.xkgamesettings b/samples/Games/JumpyJet/Assets/Shared/GameSettings.xkgamesettings index 3fdea08293..d45e769338 100644 --- a/samples/Games/JumpyJet/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Games/JumpyJet/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 01d3d03e-3826-4da4-982f-449133dec729 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 286382bf-b1c4-41b4-b566-949b1ad1e443:Scene GraphicsCompositor: 5f2073ff-fa35-4484-a925-0b899d8e759d:GraphicsCompositor @@ -22,7 +22,7 @@ Defaults: FixedTimeStep: 0.016667 - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Games/JumpyJet/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Games/JumpyJet/Assets/Shared/GraphicsCompositor.xkgfxcomp index 548d65e453..f01c803c6d 100644 --- a/samples/Games/JumpyJet/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Games/JumpyJet/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 5f2073ff-fa35-4484-a925-0b899d8e759d -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,9 +91,10 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 4bb7b2dc-8c31-4097-bb5c-950933dde3f5 DebugRenderStages: {} Game*: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine @@ -104,6 +105,7 @@ Game*: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine ParallaxBackgrounds: c3781c30-af81-4faf-a8ab-64aded2f4403:ParallaxBackgrounds OpaqueRenderStage*: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage*: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/Games/JumpyJet/Assets/Shared/Scene.xkscene b/samples/Games/JumpyJet/Assets/Shared/Scene.xkscene index bc0191ae48..d95201a596 100644 --- a/samples/Games/JumpyJet/Assets/Shared/Scene.xkscene +++ b/samples/Games/JumpyJet/Assets/Shared/Scene.xkscene @@ -85,8 +85,9 @@ Hierarchy: Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} Scale: {X: 1.0, Y: 1.0, Z: 1.0} Children: {} - a941cd713c0995458f02918f1c0258bd: !JumpyJet.PipesScript,JumpyJet.Game - Id: 71cd41a9-093c-4595-8f02-918f1c0258bd + a124a98b8ada02d77a29033b4c58dcc8: !JumpyJet.PipesScript,JumpyJet.Game + Id: a3abb282-de05-4800-b279-e562372a4185 + PipePrefabUrl: ce7c2b81-110c-4150-bf9a-d902b03b3d41:Pipe Set - Entity: Id: fb0a2c4b-0ae0-47c0-a222-089448e7890c Name: Character diff --git a/samples/Games/JumpyJet/JumpyJet.Game/JumpyJet.Game.csproj b/samples/Games/JumpyJet/JumpyJet.Game/JumpyJet.Game.csproj index 4aeb4da3ec..4223abe768 100644 --- a/samples/Games/JumpyJet/JumpyJet.Game/JumpyJet.Game.csproj +++ b/samples/Games/JumpyJet/JumpyJet.Game/JumpyJet.Game.csproj @@ -4,11 +4,11 @@ JumpyJet - - - - - - + + + + + + \ No newline at end of file diff --git a/samples/Games/JumpyJet/JumpyJet.Game/PipesScript.cs b/samples/Games/JumpyJet/JumpyJet.Game/PipesScript.cs index 820e903573..c0116509f9 100644 --- a/samples/Games/JumpyJet/JumpyJet.Game/PipesScript.cs +++ b/samples/Games/JumpyJet/JumpyJet.Game/PipesScript.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using Xenko.Core.Mathematics; +using Xenko.Core.Serialization; using Xenko.Engine; using Xenko.Engine.Events; @@ -29,9 +30,11 @@ public class PipesScript : SyncScript private float sceneWidth; private float pipeOvervaluedWidth = 1f; + public UrlReference PipePrefabUrl { get; set; } + public override void Start() { - var pipeSetPrefab = Content.Load("Pipe Set"); + var pipeSetPrefab = Content.Load(PipePrefabUrl); // Create PipeSets sceneWidth = GameGlobals.GamePixelToUnitScale*GraphicsDevice.Presenter.BackBuffer.Width; diff --git a/samples/Games/JumpyJet/JumpyJet.Windows/Resources/Icon.ico b/samples/Games/JumpyJet/JumpyJet.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Games/JumpyJet/JumpyJet.Windows/Resources/Icon.ico and b/samples/Games/JumpyJet/JumpyJet.Windows/Resources/Icon.ico differ diff --git a/samples/Games/SpaceEscape/Assets/Shared/EffectCompileLog.xkeffectlog b/samples/Games/SpaceEscape/Assets/Shared/EffectCompileLog.xkeffectlog index 56bdcd5452..01796fb105 100644 --- a/samples/Games/SpaceEscape/Assets/Shared/EffectCompileLog.xkeffectlog +++ b/samples/Games/SpaceEscape/Assets/Shared/EffectCompileLog.xkeffectlog @@ -4,20 +4,23 @@ EffectName: SpaceEscapeEffectMain UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -26,12 +29,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -45,20 +51,23 @@ EffectName: SpaceEscapeEffectMain UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaDiscard, r] Compositions: computeColorSource: !ShaderClassSource @@ -66,7 +75,8 @@ UsedParameters: GenericArguments: [Material.AlphaDiscardValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -77,12 +87,15 @@ UsedParameters: ClassName: MaterialSurfaceTransparentAlphaDiscard Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -96,20 +109,23 @@ EffectName: SpaceEscapeEffectMain UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -118,12 +134,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -137,20 +156,23 @@ EffectName: SpaceEscapeEffectMain UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -159,12 +181,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -184,20 +209,23 @@ EffectName: SpaceEscapeEffectMain UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaDiscard, r] Compositions: computeColorSource: !ShaderClassSource @@ -205,7 +233,8 @@ UsedParameters: GenericArguments: [Material.AlphaDiscardValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -216,12 +245,15 @@ UsedParameters: ClassName: MaterialSurfaceTransparentAlphaDiscard Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -241,20 +273,23 @@ EffectName: SpaceEscapeEffectMain UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -263,12 +298,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource diff --git a/samples/Games/SpaceEscape/Assets/Shared/GameSettings.xkgamesettings b/samples/Games/SpaceEscape/Assets/Shared/GameSettings.xkgamesettings index 50204214a5..10bdc8caf1 100644 --- a/samples/Games/SpaceEscape/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Games/SpaceEscape/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 30ea4b14-3937-4a9c-8b02-2e4bb0f52f26 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 7207a5b4-cbf4-4edc-a7fb-0dfa83e2414e:Scene GraphicsCompositor: de5e5f4f-73e4-4411-8fa8-11a0b9aa80c2:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Games/SpaceEscape/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Games/SpaceEscape/Assets/Shared/GraphicsCompositor.xkgfxcomp index d0ca7fcde8..da99e51a90 100644 --- a/samples/Games/SpaceEscape/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Games/SpaceEscape/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: de5e5f4f-73e4-4411-8fa8-11a0b9aa80c2 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,47 +24,47 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 2dd24df6-33f1-4fc5-8d49-79db348db785 TransparentRenderStage: ref!! ab05402a-6b3f-4a95-a079-bedf1617419d EffectName*: SpaceEscapeEffectMain - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! ddc0d74e-006f-439b-8c70-235818496d9d EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! ab05402a-6b3f-4a95-a079-bedf1617419d - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! ddc0d74e-006f-439b-8c70-235818496d9d RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} 2eda85523d76b3f9e1e7d3e55aab5280: ~(Deleted) 5890e37af0e4bbc2cfdc1de648ff07d4: ~(Deleted) 411fdcfb9fc388449a0443173dfa3f27: ~(Deleted) ShadowMapRenderer: null 4e6e32bcbd8f38a663c636bab78dba4a*: !SpaceEscape.Rendering.BendFogRenderFeature,SpaceEscape.Game {} - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 2dd24df6-33f1-4fc5-8d49-79db348db785 TransparentRenderStage: ref!! ab05402a-6b3f-4a95-a079-bedf1617419d EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 2dd24df6-33f1-4fc5-8d49-79db348db785 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! ab05402a-6b3f-4a95-a079-bedf1617419d EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -92,19 +92,20 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: fae67d72-4491-4117-99ea-bd8250047c10 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! 2a6bcd90-e26a-4017-87b2-5c322e57f92d - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 3f5395d3-5cfe-4e1b-8be7-0988bec3b0c0 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! fae67d72-4491-4117-99ea-bd8250047c10 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! fae67d72-4491-4117-99ea-bd8250047c10 RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 3f5395d3-5cfe-4e1b-8be7-0988bec3b0c0 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 3f5395d3-5cfe-4e1b-8be7-0988bec3b0c0 diff --git a/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/FogEffect.cs b/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/FogEffect.xksl.cs similarity index 100% rename from samples/Games/SpaceEscape/SpaceEscape.Game/Effects/FogEffect.cs rename to samples/Games/SpaceEscape/SpaceEscape.Game/Effects/FogEffect.xksl.cs diff --git a/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/SpaceEscapeEffectMain.cs b/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/SpaceEscapeEffectMain.xkfx.cs similarity index 100% rename from samples/Games/SpaceEscape/SpaceEscape.Game/Effects/SpaceEscapeEffectMain.cs rename to samples/Games/SpaceEscape/SpaceEscape.Game/Effects/SpaceEscapeEffectMain.xkfx.cs diff --git a/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationBendWorld.cs b/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationBendWorld.xksl.cs similarity index 100% rename from samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationBendWorld.cs rename to samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationBendWorld.xksl.cs diff --git a/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationTextureUV.cs b/samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationTextureUV.xksl.cs similarity index 100% rename from samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationTextureUV.cs rename to samples/Games/SpaceEscape/SpaceEscape.Game/Effects/TransformationTextureUV.xksl.cs diff --git a/samples/Games/SpaceEscape/SpaceEscape.Game/SpaceEscape.Game.csproj b/samples/Games/SpaceEscape/SpaceEscape.Game/SpaceEscape.Game.csproj index 8845a6e88c..c6fa89730a 100644 --- a/samples/Games/SpaceEscape/SpaceEscape.Game/SpaceEscape.Game.csproj +++ b/samples/Games/SpaceEscape/SpaceEscape.Game/SpaceEscape.Game.csproj @@ -5,52 +5,10 @@ true - - - - - - - - - XenkoShaderKeyGenerator - FogEffect.cs - - - True - True - True - FogEffect.xksl - - - XenkoShaderKeyGenerator - SpaceEscapeEffectMain.cs - - - True - True - True - SpaceEscapeEffectMain.xkfx - - - XenkoShaderKeyGenerator - TransformationBendWorld.cs - - - True - True - True - TransformationBendWorld.xksl - - - XenkoShaderKeyGenerator - TransformationTextureUV.cs - - - True - True - True - TransformationTextureUV.xksl - + + + + + \ No newline at end of file diff --git a/samples/Games/SpaceEscape/SpaceEscape.Windows/Resources/Icon.ico b/samples/Games/SpaceEscape/SpaceEscape.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Games/SpaceEscape/SpaceEscape.Windows/Resources/Icon.ico and b/samples/Games/SpaceEscape/SpaceEscape.Windows/Resources/Icon.ico differ diff --git a/samples/Graphics/AnimatedModel/AnimatedModel.Game/AnimatedModel.Game.csproj b/samples/Graphics/AnimatedModel/AnimatedModel.Game/AnimatedModel.Game.csproj index 9c284294fe..1f64e741e8 100644 --- a/samples/Graphics/AnimatedModel/AnimatedModel.Game/AnimatedModel.Game.csproj +++ b/samples/Graphics/AnimatedModel/AnimatedModel.Game/AnimatedModel.Game.csproj @@ -4,10 +4,10 @@ AnimatedModel - - - - - + + + + + \ No newline at end of file diff --git a/samples/Graphics/AnimatedModel/AnimatedModel.Windows/Resources/Icon.ico b/samples/Graphics/AnimatedModel/AnimatedModel.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Graphics/AnimatedModel/AnimatedModel.Windows/Resources/Icon.ico and b/samples/Graphics/AnimatedModel/AnimatedModel.Windows/Resources/Icon.ico differ diff --git a/samples/Graphics/AnimatedModel/Assets/Shared/EffectCompileLog.xkeffectlog b/samples/Graphics/AnimatedModel/Assets/Shared/EffectCompileLog.xkeffectlog index abde1900df..6c06843799 100644 --- a/samples/Graphics/AnimatedModel/Assets/Shared/EffectCompileLog.xkeffectlog +++ b/samples/Graphics/AnimatedModel/Assets/Shared/EffectCompileLog.xkeffectlog @@ -8,20 +8,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -29,7 +32,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -37,14 +41,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -53,7 +59,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -65,13 +72,16 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -92,20 +102,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -113,14 +126,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -129,7 +144,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -141,12 +157,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -167,20 +186,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -188,14 +210,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -203,7 +227,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -211,7 +236,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -219,7 +245,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -227,7 +254,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -235,7 +263,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -244,7 +273,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -256,12 +286,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -282,20 +315,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -303,14 +339,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -318,7 +356,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -326,7 +365,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -335,7 +375,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -350,12 +391,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -376,20 +420,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -398,12 +445,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource diff --git a/samples/Graphics/AnimatedModel/Assets/Shared/GameSettings.xkgamesettings b/samples/Graphics/AnimatedModel/Assets/Shared/GameSettings.xkgamesettings index 16e8a3ea63..097345e0a6 100644 --- a/samples/Graphics/AnimatedModel/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Graphics/AnimatedModel/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 139fbe2e-f80a-4334-a64b-5a9d10e643c7 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 84efeed8-fdd2-4e9b-9cfb-d4ea3e5aa6aa:Scene GraphicsCompositor: 832f0013-9afb-42ad-a8c5-601efec9d95d:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Graphics/AnimatedModel/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Graphics/AnimatedModel/Assets/Shared/GraphicsCompositor.xkgfxcomp index b7550c673d..cee38c6262 100644 --- a/samples/Graphics/AnimatedModel/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Graphics/AnimatedModel/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 832f0013-9afb-42ad-a8c5-601efec9d95d -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -31,49 +31,49 @@ RenderStages: Name: UI EffectSlotName: Main RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85*: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85*: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderGroup*: All RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 8d5b3699e5b44c008d415e378d5aaf64*: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 8d5b3699e5b44c008d415e378d5aaf64*: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderGroup: Group1 RenderStage: ref!! e40ae29a-9b90-4288-8169-9e21506ee3d9 EffectName: Test @@ -102,9 +102,10 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 2d551380-5cf6-4c45-b9c2-4983e6320ab0 DebugRenderStages: {} 5e26a9708283c4a37389cf296b83206d*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine @@ -124,32 +125,36 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} -Game*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine +Game*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Children: 0998c63a8edf6ac29bd1b282de30d373: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: fb31026c-3588-46ac-be9c-39be5729adbe Camera: ref!! b52cb3ea-3070-4405-af33-6d9d57a7e4e2 - Child: !Xenko.Rendering.Compositing.RenderTextureSceneRenderer,Xenko.Engine + Child: !Xenko.Rendering.Compositing.RenderTextureSceneRenderer,Xenko.Rendering Id: cc5c9b5d-a888-455f-a4ca-a1bd7c909415 RenderTexture: 2355d4e2-1680-48ca-8ad6-34d291c1489d:RenderTexture Child: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! d9252557-23fc-4917-8973-0bd4354053a6 + RenderMask: All cee6682ea104d5d6e73271576ca22678: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 0f3e82cf-8863-4902-901b-e310a904d1ef Camera: ref!! e68181f0-ebaf-457b-a0e2-b143569d8105 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: 849eb95a-c3da-4373-b573-dad84e43181a Children: 8b3451f3d0b53f918c1872c82f6121eb: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 03645ddeafe2406cbeb097d7d2e77fed: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Engine + 03645ddeafe2406cbeb097d7d2e77fed: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Rendering Id: f90dbaaa-d050-4c2f-a63d-65a6a7d408ce RenderStage: ref!! e40ae29a-9b90-4288-8169-9e21506ee3d9 + RenderMask: All 2f9d9b0dfc8c5629466a76a2943ead39: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 6bb892e7-7a6d-4d9d-aa51-41a5d8ffb082 Camera: ref!! e68181f0-ebaf-457b-a0e2-b143569d8105 - Child: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 2d551380-5cf6-4c45-b9c2-4983e6320ab0 + Child: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 2d551380-5cf6-4c45-b9c2-4983e6320ab0 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/Graphics/AnimatedModel/Assets/Shared/Scene.xkscene b/samples/Graphics/AnimatedModel/Assets/Shared/Scene.xkscene index 19872eef3a..caf294b76c 100644 --- a/samples/Graphics/AnimatedModel/Assets/Shared/Scene.xkscene +++ b/samples/Graphics/AnimatedModel/Assets/Shared/Scene.xkscene @@ -103,8 +103,8 @@ Hierarchy: Size: Large DepthRange: {} PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {} - ComputeTransmittance: false BiasParameters: {} + ComputeTransmittance: false Intensity: 0.6 - Entity: Id: bb7065d2-498a-45d7-b4b1-0bb1a573cc69 @@ -158,8 +158,8 @@ Hierarchy: Size: Large DepthRange: {} PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {} - ComputeTransmittance: false BiasParameters: {} + ComputeTransmittance: false Intensity: 0.6 - Entity: Id: df07ee24-de65-4561-8f4a-da086654e07b diff --git a/samples/Graphics/CustomEffect/Assets/Shared/GameSettings.xkgamesettings b/samples/Graphics/CustomEffect/Assets/Shared/GameSettings.xkgamesettings index 0cd949191b..40fee6f735 100644 --- a/samples/Graphics/CustomEffect/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Graphics/CustomEffect/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 22ae89be-900a-4a73-a5b5-94907b01732b -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: null GraphicsCompositor: c3b08bc2-7b1c-4c48-8982-d32cb86a08de:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Graphics/CustomEffect/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Graphics/CustomEffect/Assets/Shared/GraphicsCompositor.xkgfxcomp index 9b30aa4f1a..6b228d9c97 100644 --- a/samples/Graphics/CustomEffect/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Graphics/CustomEffect/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: c3b08bc2-7b1c-4c48-8982-d32cb86a08de -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,9 +91,10 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: b9c2164f-3be2-446e-9073-6a88040b8b17 DebugRenderStages: {} Game*: !CustomEffect.CustomEffectRenderer,CustomEffect.Game diff --git a/samples/Graphics/CustomEffect/CustomEffect.Game/CustomEffect.Game.csproj b/samples/Graphics/CustomEffect/CustomEffect.Game/CustomEffect.Game.csproj index ba690b1fe9..9a2dd1a514 100644 --- a/samples/Graphics/CustomEffect/CustomEffect.Game/CustomEffect.Game.csproj +++ b/samples/Graphics/CustomEffect/CustomEffect.Game/CustomEffect.Game.csproj @@ -4,22 +4,10 @@ CustomEffect - - - - - - - - - XenkoShaderKeyGenerator - Effect.cs - - - True - True - True - Effect.xksl - + + + + + \ No newline at end of file diff --git a/samples/Graphics/CustomEffect/CustomEffect.Game/Effects/Effect.cs b/samples/Graphics/CustomEffect/CustomEffect.Game/Effects/Effect.xksl.cs similarity index 100% rename from samples/Graphics/CustomEffect/CustomEffect.Game/Effects/Effect.cs rename to samples/Graphics/CustomEffect/CustomEffect.Game/Effects/Effect.xksl.cs diff --git a/samples/Graphics/CustomEffect/CustomEffect.Windows/Resources/Icon.ico b/samples/Graphics/CustomEffect/CustomEffect.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Graphics/CustomEffect/CustomEffect.Windows/Resources/Icon.ico and b/samples/Graphics/CustomEffect/CustomEffect.Windows/Resources/Icon.ico differ diff --git a/samples/Graphics/CustomEffect/Resources/LogoXenko.png b/samples/Graphics/CustomEffect/Resources/LogoXenko.png index 765967a7ff..94cc23f633 100644 --- a/samples/Graphics/CustomEffect/Resources/LogoXenko.png +++ b/samples/Graphics/CustomEffect/Resources/LogoXenko.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c398902f89e80b7393b425004d29685d595738c38d6f31070c1549cf22e339b -size 14752 +oid sha256:fe5074d3dd03e0e6fbc200e5e5d4d52d9b2b44f20e16f147dc3b62b97a58b9e1 +size 74851 diff --git a/samples/Graphics/MaterialShader/Assets/Shared/EffectCompileLog.xkeffectlog b/samples/Graphics/MaterialShader/Assets/Shared/EffectCompileLog.xkeffectlog index 3d9e06352b..efb4294c67 100644 --- a/samples/Graphics/MaterialShader/Assets/Shared/EffectCompileLog.xkeffectlog +++ b/samples/Graphics/MaterialShader/Assets/Shared/EffectCompileLog.xkeffectlog @@ -4,18 +4,21 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.VertexStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDisplacement, r] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorWave @@ -28,24 +31,29 @@ UsedParameters: GenericArguments: [Position, meshNormal, false] Material.VertexStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialDisplacementStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialDisplacementStream Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -53,7 +61,8 @@ UsedParameters: GenericArguments: [5, 0.1, -0.03] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -61,7 +70,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -69,7 +79,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -77,7 +88,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -86,7 +98,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -98,13 +111,16 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] Lighting.EnvironmentLights: - !ShaderClassSource @@ -119,18 +135,21 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.VertexStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDisplacement, r] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorWave @@ -143,24 +162,29 @@ UsedParameters: GenericArguments: [Position, meshNormal, false] Material.VertexStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialDisplacementStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialDisplacementStream Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -168,7 +192,8 @@ UsedParameters: GenericArguments: [5, 0.1, -0.03] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -176,7 +201,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -184,7 +210,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -192,7 +219,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -201,7 +229,8 @@ UsedParameters: GenericArguments: [true] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -213,13 +242,16 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] Lighting.EnvironmentLights: - !ShaderClassSource diff --git a/samples/Graphics/MaterialShader/Assets/Shared/GameSettings.xkgamesettings b/samples/Graphics/MaterialShader/Assets/Shared/GameSettings.xkgamesettings index 813f7d50f1..0f1cfdccbc 100644 --- a/samples/Graphics/MaterialShader/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Graphics/MaterialShader/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 87d42653-0603-4da6-be26-7ea6544f959f -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 877bd450-9cd3-48ce-b612-97e7545a5e1f:Scene GraphicsCompositor: 00b33396-8cf3-431f-9283-df2c852a340d:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Graphics/MaterialShader/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Graphics/MaterialShader/Assets/Shared/GraphicsCompositor.xkgfxcomp index b72f727398..80794d6f0f 100644 --- a/samples/Graphics/MaterialShader/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Graphics/MaterialShader/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 00b33396-8cf3-431f-9283-df2c852a340d -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,19 +91,21 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: c07a60ed-44bb-4d26-93e1-637ddf7001b1 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! d7498257-2125-4118-afef-0aaf351c0471 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 160c53b4-b0ab-4f6d-a1dc-d54076cedd30 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! c07a60ed-44bb-4d26-93e1-637ddf7001b1 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! c07a60ed-44bb-4d26-93e1-637ddf7001b1 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 160c53b4-b0ab-4f6d-a1dc-d54076cedd30 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 160c53b4-b0ab-4f6d-a1dc-d54076cedd30 BlockPositions: {} diff --git a/samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWave.cs b/samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWave.xksl.cs similarity index 100% rename from samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWave.cs rename to samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWave.xksl.cs diff --git a/samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWaveNormal.cs b/samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWaveNormal.xksl.cs similarity index 100% rename from samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWaveNormal.cs rename to samples/Graphics/MaterialShader/MaterialShader.Game/Effects/ComputeColorWaveNormal.xksl.cs diff --git a/samples/Graphics/MaterialShader/MaterialShader.Game/MaterialShader.Game.csproj b/samples/Graphics/MaterialShader/MaterialShader.Game/MaterialShader.Game.csproj index eaf9577cb6..6502f60ec7 100644 --- a/samples/Graphics/MaterialShader/MaterialShader.Game/MaterialShader.Game.csproj +++ b/samples/Graphics/MaterialShader/MaterialShader.Game/MaterialShader.Game.csproj @@ -4,32 +4,10 @@ MaterialShader - - - - - - - - - XenkoShaderKeyGenerator - ComputeColorWave.cs - - - True - True - True - ComputeColorWave.xksl - - - XenkoShaderKeyGenerator - ComputeColorWaveNormal.cs - - - True - True - True - ComputeColorWaveNormal.xksl - + + + + + \ No newline at end of file diff --git a/samples/Graphics/MaterialShader/MaterialShader.Windows/Resources/Icon.ico b/samples/Graphics/MaterialShader/MaterialShader.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Graphics/MaterialShader/MaterialShader.Windows/Resources/Icon.ico and b/samples/Graphics/MaterialShader/MaterialShader.Windows/Resources/Icon.ico differ diff --git a/samples/Graphics/SpriteFonts/Assets/Shared/GameSettings.xkgamesettings b/samples/Graphics/SpriteFonts/Assets/Shared/GameSettings.xkgamesettings index 4e80a5452a..c9af8c40d2 100644 --- a/samples/Graphics/SpriteFonts/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Graphics/SpriteFonts/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 0ce7df5d-66c0-4f28-a28d-579a49e5a7a3 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: null GraphicsCompositor: 37c9d129-9559-439d-9181-6e804ff718cf:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Graphics/SpriteFonts/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Graphics/SpriteFonts/Assets/Shared/GraphicsCompositor.xkgfxcomp index 7d24360778..a6f1c5aab7 100644 --- a/samples/Graphics/SpriteFonts/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Graphics/SpriteFonts/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 37c9d129-9559-439d-9181-6e804ff718cf -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,9 +91,10 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: dfb2772d-7173-4513-909d-43adb42e915f DebugRenderStages: {} Game*: !SpriteFonts.FontRenderer,SpriteFonts.Game diff --git a/samples/Graphics/SpriteFonts/SpriteFonts.Game/SpriteFonts.Game.csproj b/samples/Graphics/SpriteFonts/SpriteFonts.Game/SpriteFonts.Game.csproj index 66005ae1cc..e310aedb45 100644 --- a/samples/Graphics/SpriteFonts/SpriteFonts.Game/SpriteFonts.Game.csproj +++ b/samples/Graphics/SpriteFonts/SpriteFonts.Game/SpriteFonts.Game.csproj @@ -4,10 +4,10 @@ SpriteFonts - - - - - + + + + + \ No newline at end of file diff --git a/samples/Graphics/SpriteFonts/SpriteFonts.Windows/Resources/Icon.ico b/samples/Graphics/SpriteFonts/SpriteFonts.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Graphics/SpriteFonts/SpriteFonts.Windows/Resources/Icon.ico and b/samples/Graphics/SpriteFonts/SpriteFonts.Windows/Resources/Icon.ico differ diff --git a/samples/Graphics/SpriteStudioDemo/Assets/Shared/Bullet_CS.xkphy b/samples/Graphics/SpriteStudioDemo/Assets/Shared/Bullet_CS.xkphy index 21fee1a06f..5228a48bbd 100644 --- a/samples/Graphics/SpriteStudioDemo/Assets/Shared/Bullet_CS.xkphy +++ b/samples/Graphics/SpriteStudioDemo/Assets/Shared/Bullet_CS.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 7946c040-eeda-424d-a2f5-3ede14470c1a -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: f3cf2db302c02d42908f15dcaeaf6ba0: !SphereColliderShapeDesc diff --git a/samples/Graphics/SpriteStudioDemo/Assets/Shared/GameSettings.xkgamesettings b/samples/Graphics/SpriteStudioDemo/Assets/Shared/GameSettings.xkgamesettings index 8a33aadfd5..620c170954 100644 --- a/samples/Graphics/SpriteStudioDemo/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Graphics/SpriteStudioDemo/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 0c348282-d28d-4932-9472-0416d131c04d -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: d23da80d-8ef3-4400-9f16-190a9c6bd3b3:SpriteEntityScene GraphicsCompositor: 399ae22b-f756-4f77-844d-3d5bfe4b599c:GraphicsCompositor @@ -22,7 +22,7 @@ Defaults: FixedTimeStep: 0.0166666675 - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Graphics/SpriteStudioDemo/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Graphics/SpriteStudioDemo/Assets/Shared/GraphicsCompositor.xkgfxcomp index 108a72c5bc..783b2900a0 100644 --- a/samples/Graphics/SpriteStudioDemo/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Graphics/SpriteStudioDemo/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 399ae22b-f756-4f77-844d-3d5bfe4b599c -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -75,7 +75,7 @@ RenderFeatures: PipelineProcessors: {} c5a6b94b452d57606111d9c7482fe906*: !Xenko.SpriteStudio.Runtime.SpriteStudioRenderFeature,Xenko.SpriteStudio.Runtime RenderStageSelectors: - c01afde0da346a6e9f22ac3ea860226b: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + c01afde0da346a6e9f22ac3ea860226b: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: SpriteStudio SharedRenderers: @@ -96,19 +96,21 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 228b489b-63c5-4642-9c4a-4421f372df71 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! 20be0aae-ab04-4f48-a08a-7e8ae0718d7d - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 228b489b-63c5-4642-9c4a-4421f372df71 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 228b489b-63c5-4642-9c4a-4421f372df71 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/Graphics/SpriteStudioDemo/Assets/Shared/enemy_collider.xkphy b/samples/Graphics/SpriteStudioDemo/Assets/Shared/enemy_collider.xkphy index 6d654e13a1..7a749b4b2b 100644 --- a/samples/Graphics/SpriteStudioDemo/Assets/Shared/enemy_collider.xkphy +++ b/samples/Graphics/SpriteStudioDemo/Assets/Shared/enemy_collider.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 77a32831-fdf3-41b4-9443-751500fcbc10 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: e803604e1edf064bb9d035b760568ca5: !BoxColliderShapeDesc diff --git a/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Game/SpriteStudioDemo.Game.csproj b/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Game/SpriteStudioDemo.Game.csproj index eeaee06b5c..6037e257ff 100644 --- a/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Game/SpriteStudioDemo.Game.csproj +++ b/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Game/SpriteStudioDemo.Game.csproj @@ -4,12 +4,12 @@ SpriteStudioDemo - - - - - - - + + + + + + + \ No newline at end of file diff --git a/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Windows/Resources/Icon.ico b/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Windows/Resources/Icon.ico and b/samples/Graphics/SpriteStudioDemo/SpriteStudioDemo.Windows/Resources/Icon.ico differ diff --git a/samples/Input/GravitySensor/Assets/Shared/GameSettings.xkgamesettings b/samples/Input/GravitySensor/Assets/Shared/GameSettings.xkgamesettings index b79391319e..d8b5913263 100644 --- a/samples/Input/GravitySensor/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Input/GravitySensor/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: c96947ca-873e-4711-b47c-3241920266b5 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 3b831f6c-eb4c-4276-9f4c-fd6c9fe13f77:Scene GraphicsCompositor: 8962575a-b65c-47ff-b8fb-2812b72601dd:GraphicsCompositor @@ -22,7 +22,7 @@ Defaults: FixedTimeStep: 0.0166666675 - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Input/GravitySensor/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Input/GravitySensor/Assets/Shared/GraphicsCompositor.xkgfxcomp index f0ba419838..ccc6bd769d 100644 --- a/samples/Input/GravitySensor/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Input/GravitySensor/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 8962575a-b65c-47ff-b8fb-2812b72601dd -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,19 +91,21 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: c4d0ddb1-61b2-4cd3-af9d-d11aecccab58 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! ed330d34-6073-4e57-97f8-6a6a29610451 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! c4d0ddb1-61b2-4cd3-af9d-d11aecccab58 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! c4d0ddb1-61b2-4cd3-af9d-d11aecccab58 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/Input/GravitySensor/Assets/Shared/Limit.xkphy b/samples/Input/GravitySensor/Assets/Shared/Limit.xkphy index a772e8c39e..8fa41e1a2a 100644 --- a/samples/Input/GravitySensor/Assets/Shared/Limit.xkphy +++ b/samples/Input/GravitySensor/Assets/Shared/Limit.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 46edbb45-f107-4e33-a959-8d5de5aef08b -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dae8609773cd5246806776ec0693a2f3: !StaticPlaneColliderShapeDesc diff --git a/samples/Input/GravitySensor/Assets/Shared/ball_cs.xkphy b/samples/Input/GravitySensor/Assets/Shared/ball_cs.xkphy index 85504dd00a..455b746409 100644 --- a/samples/Input/GravitySensor/Assets/Shared/ball_cs.xkphy +++ b/samples/Input/GravitySensor/Assets/Shared/ball_cs.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: cc052d82-9498-4400-9dbf-dd9a9ee6bf38 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: 0aeeb5aa663a6c46b607a063d67912a4: !SphereColliderShapeDesc diff --git a/samples/Input/GravitySensor/GravitySensor.Game/GravitySensor.Game.csproj b/samples/Input/GravitySensor/GravitySensor.Game/GravitySensor.Game.csproj index 365ec720aa..d19f1e2837 100644 --- a/samples/Input/GravitySensor/GravitySensor.Game/GravitySensor.Game.csproj +++ b/samples/Input/GravitySensor/GravitySensor.Game/GravitySensor.Game.csproj @@ -4,11 +4,11 @@ GravitySensor - - - - - - + + + + + + \ No newline at end of file diff --git a/samples/Input/GravitySensor/GravitySensor.Windows/Resources/Icon.ico b/samples/Input/GravitySensor/GravitySensor.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Input/GravitySensor/GravitySensor.Windows/Resources/Icon.ico and b/samples/Input/GravitySensor/GravitySensor.Windows/Resources/Icon.ico differ diff --git a/samples/Input/TouchInputs/Assets/Shared/GameSettings.xkgamesettings b/samples/Input/TouchInputs/Assets/Shared/GameSettings.xkgamesettings index 089a8ad54c..c0ce52a1cf 100644 --- a/samples/Input/TouchInputs/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Input/TouchInputs/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: a008e8ac-ccf1-4cf9-9891-6a14af73da17 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 8da52091-f3ce-45a3-8f1b-01fbf1a19f42:TouchInputsScene GraphicsCompositor: a1b28f96-7a2b-44d4-b37d-08932e34a43d:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Input/TouchInputs/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Input/TouchInputs/Assets/Shared/GraphicsCompositor.xkgfxcomp index ab6c2f522f..d25f56eeb5 100644 --- a/samples/Input/TouchInputs/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Input/TouchInputs/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: a1b28f96-7a2b-44d4-b37d-08932e34a43d -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,9 +91,10 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: af9da8de-7620-4208-b47d-4cd44d77c001 DebugRenderStages: {} Game*: !TouchInputs.TouchInputsRenderer,TouchInputs.Game diff --git a/samples/Input/TouchInputs/TouchInputs.Game/TouchInputs.Game.csproj b/samples/Input/TouchInputs/TouchInputs.Game/TouchInputs.Game.csproj index 367a8d6781..202fd97bb0 100644 --- a/samples/Input/TouchInputs/TouchInputs.Game/TouchInputs.Game.csproj +++ b/samples/Input/TouchInputs/TouchInputs.Game/TouchInputs.Game.csproj @@ -4,10 +4,10 @@ TouchInputs - - - - - + + + + + \ No newline at end of file diff --git a/samples/Input/TouchInputs/TouchInputs.Windows/Resources/Icon.ico b/samples/Input/TouchInputs/TouchInputs.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Input/TouchInputs/TouchInputs.Windows/Resources/Icon.ico and b/samples/Input/TouchInputs/TouchInputs.Windows/Resources/Icon.ico differ diff --git a/samples/Particles/ParticlesSample/Assets/Shared/EffectCompileLog.xkeffectlog b/samples/Particles/ParticlesSample/Assets/Shared/EffectCompileLog.xkeffectlog index 04ac75416a..d6b3b36113 100644 --- a/samples/Particles/ParticlesSample/Assets/Shared/EffectCompileLog.xkeffectlog +++ b/samples/Particles/ParticlesSample/Assets/Shared/EffectCompileLog.xkeffectlog @@ -4,20 +4,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -25,7 +28,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -33,7 +37,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -41,7 +46,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -50,7 +56,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -62,12 +69,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -87,7 +97,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -102,7 +113,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantColorLink @@ -117,7 +129,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorFromStream @@ -135,20 +148,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -156,14 +172,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -172,7 +190,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -184,12 +203,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -200,20 +222,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -221,14 +246,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -237,7 +264,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -249,12 +277,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -265,20 +296,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -286,14 +320,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -301,7 +337,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -309,7 +346,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -317,7 +355,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -325,7 +364,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -333,7 +373,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -342,7 +383,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -354,12 +396,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -371,7 +416,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -386,14 +432,16 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [ParticleBase.EmissiveMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorFromStream @@ -408,11 +456,13 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorFromStream @@ -437,7 +487,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorFromStream @@ -461,25 +512,29 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScroll GenericArguments: [3, 1] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -489,7 +544,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -497,19 +553,22 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, rg] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMaterialAlphaBlend + - !ShaderClassSource + ClassName: ComputeColorMaterialAlphaBlend Compositions: color: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -522,33 +581,39 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScroll GenericArguments: [-0.5, 1] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -558,7 +623,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -566,19 +632,22 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, rg] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMaterialAlphaBlend + - !ShaderClassSource + ClassName: ComputeColorMaterialAlphaBlend Compositions: color: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -591,33 +660,39 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScroll GenericArguments: [1, 1] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -627,7 +702,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -635,19 +711,22 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, rg] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMaterialAlphaBlend + - !ShaderClassSource + ClassName: ComputeColorMaterialAlphaBlend Compositions: color: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -660,28 +739,33 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -690,16 +774,20 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -710,20 +798,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -731,14 +822,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -747,7 +840,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -759,16 +853,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -779,27 +877,31 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -808,7 +910,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -820,16 +923,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -840,20 +947,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -861,14 +971,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -876,7 +988,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -884,7 +997,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -892,7 +1006,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -900,7 +1015,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -908,7 +1024,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -917,7 +1034,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -929,16 +1047,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -957,20 +1079,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -978,14 +1103,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -994,7 +1121,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1006,12 +1134,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1022,20 +1153,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1043,7 +1177,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1051,7 +1186,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1059,7 +1195,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1068,7 +1205,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1080,12 +1218,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1096,20 +1237,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1117,14 +1261,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -1132,7 +1278,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1140,7 +1287,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1149,7 +1297,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1164,12 +1313,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1180,20 +1332,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1201,14 +1356,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1216,7 +1373,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1224,7 +1382,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1232,7 +1391,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1240,7 +1400,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1248,7 +1409,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1257,7 +1419,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1269,12 +1432,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1289,20 +1455,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1310,14 +1479,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1326,7 +1497,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1338,12 +1510,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1358,20 +1533,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -1379,7 +1557,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1387,14 +1566,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1403,7 +1584,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1415,13 +1597,16 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1436,20 +1621,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1457,14 +1645,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -1472,7 +1662,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1480,7 +1671,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1489,7 +1681,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1504,12 +1697,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1524,20 +1720,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1545,14 +1744,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1560,7 +1761,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1568,7 +1770,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1576,7 +1779,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1584,7 +1788,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1592,7 +1797,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1601,7 +1807,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1613,12 +1820,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1630,7 +1840,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorOverlay3ds + - !ShaderClassSource + ClassName: ComputeColorOverlay3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorFromStream @@ -1644,20 +1855,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1665,7 +1879,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1673,7 +1888,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1681,7 +1897,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1690,7 +1907,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1702,12 +1920,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1724,20 +1945,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1745,14 +1969,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1761,7 +1987,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1773,12 +2000,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1795,20 +2025,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1816,14 +2049,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1832,7 +2067,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1844,12 +2080,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1866,20 +2105,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1887,14 +2129,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1902,7 +2146,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1910,7 +2155,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1918,7 +2164,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1926,7 +2173,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1934,7 +2182,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1943,7 +2192,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1955,12 +2205,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1977,25 +2230,29 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScroll GenericArguments: [3, 1] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2005,7 +2262,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2013,19 +2271,22 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, rg] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMaterialAlphaBlend + - !ShaderClassSource + ClassName: ComputeColorMaterialAlphaBlend Compositions: color: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2038,8 +2299,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream XenkoEffectBase.RenderTargetExtensions: !ShaderMixinSource Macros: - Name: XENKO_MULTISAMPLE_COUNT @@ -2050,25 +2313,29 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScroll GenericArguments: [-0.5, 1] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2078,7 +2345,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2086,19 +2354,22 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, rg] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMaterialAlphaBlend + - !ShaderClassSource + ClassName: ComputeColorMaterialAlphaBlend Compositions: color: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2111,8 +2382,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream XenkoEffectBase.RenderTargetExtensions: !ShaderMixinSource Macros: - Name: XENKO_MULTISAMPLE_COUNT @@ -2123,25 +2396,29 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScroll GenericArguments: [1, 1] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2151,7 +2428,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2159,19 +2437,22 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, rg] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMaterialAlphaBlend + - !ShaderClassSource + ClassName: ComputeColorMaterialAlphaBlend Compositions: color: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2184,8 +2465,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream XenkoEffectBase.RenderTargetExtensions: !ShaderMixinSource Macros: - Name: XENKO_MULTISAMPLE_COUNT @@ -2196,20 +2479,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2218,16 +2504,20 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2244,27 +2534,31 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2273,7 +2567,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2285,16 +2580,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2311,20 +2610,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2332,14 +2634,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2348,7 +2652,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2360,16 +2665,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2386,20 +2695,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2407,14 +2719,16 @@ UsedParameters: GenericArguments: [Material.GlossinessMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2422,7 +2736,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2430,7 +2745,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2438,7 +2754,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2446,7 +2763,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2454,7 +2772,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2463,7 +2782,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2475,16 +2795,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - !ShaderMixinSource Mixins: - - ClassName: LightPointGroup + - !ShaderClassSource + ClassName: LightPointGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2501,20 +2825,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2522,14 +2849,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2538,7 +2867,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2550,12 +2880,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2572,20 +2905,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2593,14 +2929,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -2608,7 +2946,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2616,7 +2955,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2625,7 +2965,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2640,12 +2981,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2662,20 +3006,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2683,7 +3030,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2691,7 +3039,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2699,7 +3048,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2708,7 +3058,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2720,12 +3071,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2742,20 +3096,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2763,14 +3120,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2778,7 +3137,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2786,7 +3146,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2794,7 +3155,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2802,7 +3164,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2810,7 +3173,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2819,7 +3183,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2831,12 +3196,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2857,20 +3225,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2878,14 +3249,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2894,7 +3267,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2906,12 +3280,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -2932,20 +3309,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -2953,7 +3333,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2961,14 +3342,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2977,7 +3360,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2989,13 +3373,16 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -3016,20 +3403,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3037,14 +3427,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -3052,7 +3444,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3060,7 +3453,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3069,7 +3463,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3084,12 +3479,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource @@ -3110,20 +3508,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3131,14 +3532,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3146,7 +3549,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3154,7 +3558,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3162,7 +3567,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -3170,7 +3576,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -3178,7 +3585,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3187,7 +3595,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3199,12 +3608,15 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [2] Lighting.EnvironmentLights: - !ShaderClassSource diff --git a/samples/Particles/ParticlesSample/Assets/Shared/GameSettings.xkgamesettings b/samples/Particles/ParticlesSample/Assets/Shared/GameSettings.xkgamesettings index ca46873cf8..dcd4f3ed52 100644 --- a/samples/Particles/ParticlesSample/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Particles/ParticlesSample/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: e6395b48-106b-4111-bc8b-8cf309b8edb6 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: b4210f42-14a3-4917-80b6-006d7f81b1c6:MainScene GraphicsCompositor: 07078f4f-a078-4ad4-bc35-bb0656a0f4f8:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Particles/ParticlesSample/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Particles/ParticlesSample/Assets/Shared/GraphicsCompositor.xkgfxcomp index bd88891573..d89aa81657 100644 --- a/samples/Particles/ParticlesSample/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Particles/ParticlesSample/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 07078f4f-a078-4ad4-bc35-bb0656a0f4f8 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,19 +91,21 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: ca0af89a-f417-4580-8fbd-442bbce9e5e1 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! 3217b71f-b48d-4321-bab1-7cb4da999c19 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! ca0af89a-f417-4580-8fbd-442bbce9e5e1 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! ca0af89a-f417-4580-8fbd-442bbce9e5e1 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRadial.cs b/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRadial.xksl.cs similarity index 100% rename from samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRadial.cs rename to samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRadial.xksl.cs diff --git a/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRed.cs b/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRed.xksl.cs similarity index 100% rename from samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRed.cs rename to samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorRed.xksl.cs diff --git a/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorTextureScroll.cs b/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorTextureScroll.xksl.cs similarity index 100% rename from samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorTextureScroll.cs rename to samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ComputeColorTextureScroll.xksl.cs diff --git a/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomEffect.cs b/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomEffect.xkfx.cs similarity index 100% rename from samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomEffect.cs rename to samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomEffect.xkfx.cs diff --git a/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomShader.cs b/samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomShader.xksl.cs similarity index 100% rename from samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomShader.cs rename to samples/Particles/ParticlesSample/ParticlesSample.Game/Effects/ParticleCustomShader.xksl.cs diff --git a/samples/Particles/ParticlesSample/ParticlesSample.Game/ParticlesSample.Game.csproj b/samples/Particles/ParticlesSample/ParticlesSample.Game/ParticlesSample.Game.csproj index c0b23fed77..41ab43cc8b 100644 --- a/samples/Particles/ParticlesSample/ParticlesSample.Game/ParticlesSample.Game.csproj +++ b/samples/Particles/ParticlesSample/ParticlesSample.Game/ParticlesSample.Game.csproj @@ -5,62 +5,10 @@ true - - - - - - - - - XenkoShaderKeyGenerator - ComputeColorRadial.cs - - - True - True - True - ComputeColorRadial.xksl - - - XenkoShaderKeyGenerator - ComputeColorRed.cs - - - True - True - True - ComputeColorRed.xksl - - - XenkoShaderKeyGenerator - ComputeColorTextureScroll.cs - - - True - True - True - ComputeColorTextureScroll.xksl - - - XenkoShaderKeyGenerator - ParticleCustomEffect.cs - - - True - True - True - ParticleCustomEffect.xkfx - - - XenkoShaderKeyGenerator - ParticleCustomShader.cs - - - True - True - True - ParticleCustomShader.xksl - + + + + + \ No newline at end of file diff --git a/samples/Particles/ParticlesSample/ParticlesSample.Windows/Resources/Icon.ico b/samples/Particles/ParticlesSample/ParticlesSample.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Particles/ParticlesSample/ParticlesSample.Windows/Resources/Icon.ico and b/samples/Particles/ParticlesSample/ParticlesSample.Windows/Resources/Icon.ico differ diff --git a/samples/Particles/ParticlesSample/Resources/XenkoLogoGray.png b/samples/Particles/ParticlesSample/Resources/XenkoLogoGray.png index fdd3adf224..94cc23f633 100644 --- a/samples/Particles/ParticlesSample/Resources/XenkoLogoGray.png +++ b/samples/Particles/ParticlesSample/Resources/XenkoLogoGray.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc94ee66c9b6587ee597cf8beb00f4a2ffda72c931da31b58273e613579f06f3 -size 2438 +oid sha256:fe5074d3dd03e0e6fbc200e5e5d4d52d9b2b44f20e16f147dc3b62b97a58b9e1 +size 74851 diff --git a/samples/Particles/ParticlesSample/Resources/XenkoLogoRed.png b/samples/Particles/ParticlesSample/Resources/XenkoLogoRed.png index ecaaed944c..94cc23f633 100644 --- a/samples/Particles/ParticlesSample/Resources/XenkoLogoRed.png +++ b/samples/Particles/ParticlesSample/Resources/XenkoLogoRed.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20ac89d82088bb5c72c3f4cf2e21bb4042aaf838fdbac72b37c50bcd4c9b2769 -size 4188 +oid sha256:fe5074d3dd03e0e6fbc200e5e5d4d52d9b2b44f20e16f147dc3b62b97a58b9e1 +size 74851 diff --git a/samples/Particles/ParticlesSample/Resources/XenkoLogoWhite.png b/samples/Particles/ParticlesSample/Resources/XenkoLogoWhite.png index f920290824..94cc23f633 100644 --- a/samples/Particles/ParticlesSample/Resources/XenkoLogoWhite.png +++ b/samples/Particles/ParticlesSample/Resources/XenkoLogoWhite.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c15f4eda5a8e9cafbfbdb46c512b8708b040141cf614d83d30be62e05ff167f3 -size 1744 +oid sha256:fe5074d3dd03e0e6fbc200e5e5d4d52d9b2b44f20e16f147dc3b62b97a58b9e1 +size 74851 diff --git a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/crate_cs.xkphy b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/crate_cs.xkphy index adf231bc24..9d9f200ef6 100644 --- a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/crate_cs.xkphy +++ b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/crate_cs.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: cfd030c9-44df-401e-a192-32278a642f8b -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: 74528ec25c6e7247be2bb1132ba4fd1e: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: e51b50db-d4e0-45c1-bf2e-47440aab2217:Models/BoxE LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/cube_cs.xkphy b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/cube_cs.xkphy index 34cbe5a288..b455df2b17 100644 --- a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/cube_cs.xkphy +++ b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/cube_cs.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: f9e50676-761f-47c9-87e3-1e949c24ff9e -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: cb86efc2ed59034c8ebc99a900f3e7ef: !BoxColliderShapeDesc diff --git a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/ground_csR.xkphy b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/ground_csR.xkphy index c7a5c18dcc..6a0638cc50 100644 --- a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/ground_csR.xkphy +++ b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/ground_csR.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 1a7f15af-ac01-4464-adfe-7689bd50966e -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: 7107ddc00d8be146887f6c682efdee3e: !StaticPlaneColliderShapeDesc diff --git a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/sphere_cs.xkphy b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/sphere_cs.xkphy index 3c2693e305..12386895c0 100644 --- a/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/sphere_cs.xkphy +++ b/samples/Physics/PhysicsSample/Assets/Shared/ColliderShapes/sphere_cs.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 7e1985f8-0b02-4b1e-b636-1614deb4f36b -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: 7da230e6be91aa4badbe0ab85ca705f6: !SphereColliderShapeDesc diff --git a/samples/Physics/PhysicsSample/Assets/Shared/EffectCompileLog.xkeffectlog b/samples/Physics/PhysicsSample/Assets/Shared/EffectCompileLog.xkeffectlog index 6f9e2247d6..2c6469182c 100644 --- a/samples/Physics/PhysicsSample/Assets/Shared/EffectCompileLog.xkeffectlog +++ b/samples/Physics/PhysicsSample/Assets/Shared/EffectCompileLog.xkeffectlog @@ -4,20 +4,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -25,7 +28,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -33,7 +37,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -41,7 +46,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -49,7 +55,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -57,7 +64,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -65,7 +73,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -73,7 +82,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -81,7 +91,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -89,12 +100,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -104,7 +117,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -112,7 +126,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -121,7 +136,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -136,8 +152,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: @@ -149,20 +167,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -170,7 +191,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -178,7 +200,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -186,7 +209,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -194,7 +218,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -202,7 +227,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -210,7 +236,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -218,7 +245,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -226,7 +254,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -234,7 +263,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -243,7 +273,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -255,7 +286,8 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -263,20 +295,23 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i5, Material.TextureOffset.i5] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingBlend + - !ShaderClassSource + ClassName: MaterialSurfaceShadingBlend Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -284,7 +319,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -292,7 +328,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -300,7 +337,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -308,7 +346,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -316,7 +355,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -324,7 +364,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -332,7 +373,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -340,7 +382,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -348,12 +391,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -363,7 +408,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -371,7 +417,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -380,7 +427,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -395,8 +443,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: @@ -412,20 +462,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -434,12 +487,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -450,20 +506,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -472,8 +531,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: - !ShaderClassSource @@ -484,20 +545,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -505,7 +569,8 @@ UsedParameters: GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -513,7 +578,8 @@ UsedParameters: GenericArguments: [Material.AlphaBlendColorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -524,8 +590,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: - !ShaderClassSource @@ -536,20 +604,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -557,7 +628,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -565,7 +637,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -573,7 +646,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -581,7 +655,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -589,7 +664,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -597,7 +673,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -605,7 +682,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -613,7 +691,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -621,12 +700,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -636,7 +717,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -644,7 +726,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -653,7 +736,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -668,8 +752,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: @@ -687,20 +773,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -708,7 +797,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -716,7 +806,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -724,7 +815,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -732,7 +824,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -740,7 +833,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -748,7 +842,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -756,7 +851,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -764,7 +860,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -772,7 +869,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -781,7 +879,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -793,7 +892,8 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -801,20 +901,23 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i5, Material.TextureOffset.i5] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingBlend + - !ShaderClassSource + ClassName: MaterialSurfaceShadingBlend Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -822,7 +925,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -830,7 +934,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -838,7 +943,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -846,7 +952,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -854,7 +961,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -862,7 +970,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -870,7 +979,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -878,7 +988,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -886,12 +997,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -901,7 +1014,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -909,7 +1023,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -918,7 +1033,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -933,8 +1049,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: @@ -952,20 +1070,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -974,12 +1095,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] Lighting.EnvironmentLights: - !ShaderClassSource @@ -996,20 +1120,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1018,8 +1145,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: - !ShaderClassSource @@ -1036,20 +1165,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -1057,7 +1189,8 @@ UsedParameters: GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1065,7 +1198,8 @@ UsedParameters: GenericArguments: [Material.AlphaBlendColorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1076,8 +1210,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: - !ShaderClassSource diff --git a/samples/Physics/PhysicsSample/Assets/Shared/GameSettings.xkgamesettings b/samples/Physics/PhysicsSample/Assets/Shared/GameSettings.xkgamesettings index 0483b74199..22a92969f8 100644 --- a/samples/Physics/PhysicsSample/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/Physics/PhysicsSample/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 8b386f9f-7a68-4d71-afd8-5f10c3cbdaf5 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 86fed268-baa8-4929-9eba-4d14cf3a0e68:Raycasting GraphicsCompositor: d0f9813f-8924-4b77-a91e-51be4084acf7:GraphicsCompositor @@ -22,7 +22,7 @@ Defaults: FixedTimeStep: 0.0166666675 - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Physics/PhysicsSample/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/Physics/PhysicsSample/Assets/Shared/GraphicsCompositor.xkgfxcomp index 75ff08d92f..b562d5825e 100644 --- a/samples/Physics/PhysicsSample/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/Physics/PhysicsSample/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: d0f9813f-8924-4b77-a91e-51be4084acf7 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,19 +91,21 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 7d35571d-edba-4925-be03-1af8de1df514 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! 95fe37f1-35a8-41ff-9358-192ff159e956 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 7d35571d-edba-4925-be03-1af8de1df514 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 7d35571d-edba-4925-be03-1af8de1df514 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/Physics/PhysicsSample/PhysicsSample.Game/PhysicsSample.Game.csproj b/samples/Physics/PhysicsSample/PhysicsSample.Game/PhysicsSample.Game.csproj index 9e1ea8aa6d..98a418bd95 100644 --- a/samples/Physics/PhysicsSample/PhysicsSample.Game/PhysicsSample.Game.csproj +++ b/samples/Physics/PhysicsSample/PhysicsSample.Game/PhysicsSample.Game.csproj @@ -4,11 +4,11 @@ PhysicsSample - - - - - - + + + + + + \ No newline at end of file diff --git a/samples/Physics/PhysicsSample/PhysicsSample.Windows/Resources/Icon.ico b/samples/Physics/PhysicsSample/PhysicsSample.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Physics/PhysicsSample/PhysicsSample.Windows/Resources/Icon.ico and b/samples/Physics/PhysicsSample/PhysicsSample.Windows/Resources/Icon.ico differ diff --git a/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/EffectCompileLog.xkeffectlog b/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/EffectCompileLog.xkeffectlog index df827da46b..611b3bb154 100644 --- a/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/EffectCompileLog.xkeffectlog +++ b/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/EffectCompileLog.xkeffectlog @@ -4,17 +4,20 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -24,7 +27,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -32,14 +36,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -48,7 +54,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -60,28 +67,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -89,7 +101,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -97,7 +110,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -105,7 +119,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -113,7 +128,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -121,7 +137,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -129,7 +146,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -137,7 +155,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -145,7 +164,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -153,7 +173,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceStreamsBlend + - !ShaderClassSource + ClassName: MaterialSurfaceStreamsBlend Compositions: blends: !ShaderArraySource Values: @@ -191,20 +212,23 @@ UsedParameters: GenericArguments: [matCavitySpecular] layer: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -212,7 +236,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -220,7 +245,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -228,7 +254,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -236,7 +263,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -244,7 +272,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -252,7 +281,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -260,7 +290,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -268,7 +299,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -276,7 +308,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -284,7 +317,8 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i4, Material.TextureOffset.i4] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -293,7 +327,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -305,8 +340,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -314,17 +351,20 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -334,7 +374,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -342,14 +383,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -358,7 +401,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -370,16 +414,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -409,20 +458,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -430,14 +482,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -446,7 +500,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -458,16 +513,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -497,20 +557,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -518,7 +581,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -526,14 +590,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -541,7 +607,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -549,7 +616,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -557,7 +625,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -565,7 +634,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -573,7 +643,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -582,7 +653,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -594,8 +666,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -603,20 +677,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -624,14 +701,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -640,7 +719,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -652,25 +732,30 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -680,7 +765,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -688,14 +774,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -704,7 +792,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -716,16 +805,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -749,20 +843,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -770,14 +867,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -786,7 +885,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -798,16 +898,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -831,20 +936,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -852,7 +960,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -860,7 +969,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -868,7 +978,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -876,7 +987,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -884,7 +996,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -892,7 +1005,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -900,7 +1014,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -908,7 +1023,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -916,7 +1032,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -925,7 +1042,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -937,7 +1055,8 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -945,20 +1064,23 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i5, Material.TextureOffset.i5] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingBlend + - !ShaderClassSource + ClassName: MaterialSurfaceShadingBlend Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -966,7 +1088,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -974,7 +1097,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -982,7 +1106,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -990,7 +1115,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -998,7 +1124,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1006,7 +1133,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1014,7 +1142,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1022,7 +1151,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1030,12 +1160,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1045,7 +1177,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1053,7 +1186,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1062,7 +1196,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1077,17 +1212,22 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1117,20 +1257,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1138,7 +1281,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1146,7 +1290,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1154,7 +1299,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1162,7 +1308,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1170,7 +1317,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1178,7 +1326,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1186,7 +1335,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1194,7 +1344,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1202,7 +1353,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1211,7 +1363,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1223,7 +1376,8 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -1231,20 +1385,23 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i5, Material.TextureOffset.i5] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingBlend + - !ShaderClassSource + ClassName: MaterialSurfaceShadingBlend Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1252,7 +1409,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1260,7 +1418,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1268,7 +1427,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1276,7 +1436,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1284,7 +1445,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1292,7 +1454,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1300,7 +1463,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1308,7 +1472,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1316,12 +1481,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1331,7 +1498,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1339,7 +1507,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1348,7 +1517,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1363,8 +1533,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -1372,20 +1544,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1393,7 +1568,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1401,7 +1577,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1409,7 +1586,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1417,7 +1595,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1425,7 +1604,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1433,7 +1613,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1441,7 +1622,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1449,7 +1631,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1457,12 +1640,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1472,7 +1657,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1480,7 +1666,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1489,7 +1676,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1504,17 +1692,22 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1544,20 +1737,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1565,7 +1761,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1573,7 +1770,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1581,7 +1779,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1589,7 +1788,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1597,7 +1797,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1605,7 +1806,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1613,7 +1815,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1621,7 +1824,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1629,12 +1833,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1644,7 +1850,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1652,7 +1859,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1661,7 +1869,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1676,8 +1885,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -1685,20 +1896,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1706,7 +1920,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1714,7 +1929,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1722,7 +1938,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1730,7 +1947,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1738,7 +1956,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1746,7 +1965,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1754,7 +1974,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1762,7 +1983,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1770,12 +1992,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1785,7 +2009,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1793,7 +2018,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1802,7 +2028,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1817,17 +2044,22 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1851,20 +2083,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1872,7 +2107,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1880,14 +2116,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1895,7 +2133,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1903,7 +2142,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1911,7 +2151,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1919,7 +2160,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1927,7 +2169,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1936,7 +2179,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1948,17 +2192,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1988,20 +2237,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2009,7 +2261,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2017,14 +2270,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2032,7 +2287,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2040,7 +2296,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2048,7 +2305,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2056,7 +2314,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2064,7 +2323,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2073,7 +2333,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2085,17 +2346,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -2119,20 +2385,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2140,7 +2409,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2148,7 +2418,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2156,7 +2427,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2164,7 +2436,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2172,7 +2445,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2180,7 +2454,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2188,7 +2463,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2196,7 +2472,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2204,7 +2481,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceStreamsBlend + - !ShaderClassSource + ClassName: MaterialSurfaceStreamsBlend Compositions: blends: !ShaderArraySource Values: @@ -2242,20 +2520,23 @@ UsedParameters: GenericArguments: [matCavitySpecular] layer: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2263,7 +2544,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2271,7 +2553,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2279,7 +2562,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2287,7 +2571,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2295,7 +2580,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2303,7 +2589,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2311,7 +2598,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2319,7 +2607,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2327,7 +2616,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -2335,7 +2625,8 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i4, Material.TextureOffset.i4] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2344,7 +2635,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2356,17 +2648,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -2396,20 +2693,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2417,14 +2717,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2433,7 +2735,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2445,28 +2748,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2474,7 +2782,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2482,7 +2791,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2490,7 +2800,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2498,7 +2809,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2506,7 +2818,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2514,7 +2827,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2522,7 +2836,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2530,7 +2845,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2538,7 +2854,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceStreamsBlend + - !ShaderClassSource + ClassName: MaterialSurfaceStreamsBlend Compositions: blends: !ShaderArraySource Values: @@ -2576,20 +2893,23 @@ UsedParameters: GenericArguments: [matCavitySpecular] layer: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2597,7 +2917,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2605,7 +2926,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2613,7 +2935,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2621,7 +2944,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2629,7 +2953,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2637,7 +2962,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2645,7 +2971,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2653,7 +2980,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2661,7 +2989,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -2669,7 +2998,8 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i4, Material.TextureOffset.i4] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2678,7 +3008,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2690,17 +3021,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -2724,20 +3060,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2745,14 +3084,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2760,7 +3101,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2768,7 +3110,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2776,7 +3119,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2784,7 +3128,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2792,7 +3137,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2801,7 +3147,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2813,16 +3160,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -2852,20 +3204,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2873,14 +3228,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2888,7 +3245,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2896,7 +3254,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2904,7 +3263,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2912,7 +3272,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2920,7 +3281,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2929,7 +3291,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2941,28 +3304,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2970,14 +3338,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2985,7 +3355,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2993,7 +3364,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3001,7 +3373,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -3009,7 +3382,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -3017,7 +3391,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3026,7 +3401,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3038,16 +3414,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -3071,20 +3452,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3092,14 +3476,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3108,7 +3494,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3120,16 +3507,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -3163,20 +3555,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3184,14 +3579,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -3199,7 +3596,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3207,7 +3605,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3216,7 +3615,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3231,16 +3631,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -3274,20 +3679,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3295,14 +3703,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -3310,7 +3720,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3318,7 +3729,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3327,7 +3739,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3342,8 +3755,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -3354,20 +3769,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3375,14 +3793,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -3390,7 +3810,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3398,7 +3819,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3407,7 +3829,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3422,16 +3845,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -3459,20 +3887,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3480,14 +3911,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3496,7 +3929,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3508,16 +3942,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -3551,20 +3990,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3572,14 +4014,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3588,7 +4032,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3600,28 +4045,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3629,14 +4079,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3645,7 +4097,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3657,16 +4110,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -3694,20 +4152,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -3715,7 +4176,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3723,14 +4185,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3739,7 +4203,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3751,8 +4216,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -3764,20 +4231,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3785,14 +4255,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3800,7 +4272,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3808,7 +4281,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3816,7 +4290,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -3824,7 +4299,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -3832,7 +4308,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3841,7 +4318,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3853,28 +4331,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3882,14 +4365,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -3897,7 +4382,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3905,7 +4391,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3914,7 +4401,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3929,28 +4417,33 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -3958,7 +4451,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3966,7 +4460,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -3974,7 +4469,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3982,7 +4478,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3990,7 +4487,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3998,7 +4496,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4006,7 +4505,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4014,7 +4514,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4022,7 +4523,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4031,7 +4533,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4043,7 +4546,8 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -4051,20 +4555,23 @@ UsedParameters: GenericArguments: [Material.BlendMap, TEXCOORD0, Material.Sampler.i0, a, Material.TextureScale.i5, Material.TextureOffset.i5] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingBlend + - !ShaderClassSource + ClassName: MaterialSurfaceShadingBlend Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -4072,7 +4579,8 @@ UsedParameters: GenericArguments: [Material.NormalMap.i1, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i2, Material.TextureOffset.i2] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4080,7 +4588,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -4088,7 +4597,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4096,7 +4606,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4104,7 +4615,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap.i1, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4112,7 +4624,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4120,7 +4633,8 @@ UsedParameters: GenericArguments: [Material.CavityValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4128,7 +4642,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4136,12 +4651,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -4151,7 +4668,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4159,7 +4677,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4168,7 +4687,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4183,17 +4703,22 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -4221,20 +4746,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4242,14 +4770,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4257,7 +4787,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4265,7 +4796,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4273,7 +4805,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4281,7 +4814,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4289,7 +4823,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4298,7 +4833,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4310,16 +4846,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -4353,20 +4894,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4374,14 +4918,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4389,7 +4935,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4397,7 +4944,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4405,7 +4953,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4413,7 +4962,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4421,7 +4971,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4430,7 +4981,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4442,16 +4994,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -4479,20 +5036,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4500,14 +5060,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4516,7 +5078,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4528,16 +5091,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -4565,20 +5133,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -4586,7 +5157,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4594,14 +5166,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4610,7 +5184,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4622,17 +5197,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -4660,20 +5240,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -4681,7 +5264,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4689,14 +5273,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4705,7 +5291,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4717,17 +5304,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -4843,20 +5435,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4864,14 +5459,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -4879,7 +5476,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4887,7 +5485,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4896,7 +5495,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4911,16 +5511,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -4944,20 +5549,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4965,14 +5573,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -4980,7 +5590,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4988,7 +5599,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4997,7 +5609,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -5012,16 +5625,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -5052,14 +5670,16 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [ParticleBase.EmissiveValue] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -5078,14 +5698,16 @@ UsedParameters: ParticleBase.UsesSoftEdge: 1 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [ParticleBase.EmissiveValue] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -5104,21 +5726,24 @@ UsedParameters: ParticleBase.UsesSoftEdge: 1 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [ParticleBase.EmissiveValue] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [ParticleBase.EmissiveMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler diff --git a/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GameSettings.xkgamesettings b/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GameSettings.xkgamesettings index c70e4f87d1..7a0613f84f 100644 --- a/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GameSettings.xkgamesettings +++ b/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 1e817413-2f49-48e3-b245-ee9acc49ce2e -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: bc8d83e5-a707-4213-b92c-d2e699e02d5f:MainScene GraphicsCompositor: f96b754e-e14f-43b1-94a9-4e676dd26fe4:GraphicsCompositor @@ -22,7 +22,7 @@ Defaults: FixedTimeStep: 0.0166666675 - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GraphicsCompositor.xkgfxcomp b/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GraphicsCompositor.xkgfxcomp index 50919d3c1e..9c200cb232 100644 --- a/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GraphicsCompositor.xkgfxcomp +++ b/samples/Templates/FirstPersonShooter/FirstPersonShooter/Assets/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: f96b754e-e14f-43b1-94a9-4e676dd26fe4 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 823a81bf-bac0-4552-9267-aeed499c40df:DefaultGraphicsCompositorLevel10 Cameras: @@ -39,73 +39,73 @@ RenderStages: EffectSlotName: GBuffer SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster - b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 9c51229d-d259-46dd-bf48-77578cd01f97 EffectName: XenkoForwardShadingEffect.ShadowMapCasterParaboloid - f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 738e433b-332b-437c-8d19-d4e99be09069 EffectName: XenkoForwardShadingEffect.ShadowMapCasterCubeMap - 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 0fd29cfa-e18c-4936-a1ff-706523f5ea8e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 9c51229d-d259-46dd-bf48-77578cd01f97 DepthClipping: true - ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 738e433b-332b-437c-8d19-d4e99be09069 DepthClipping: true RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Engine {} - 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} - 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Engine {} - ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Engine + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Rendering {} + 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} + 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Rendering {} + ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Rendering Renderers: - 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Engine + 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Engine + 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Engine + 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Rendering ShadowCasterRenderStage: ref!! 9c51229d-d259-46dd-bf48-77578cd01f97 - d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Engine + d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Rendering ShadowCasterRenderStage: ref!! 738e433b-332b-437c-8d19-d4e99be09069 - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -133,6 +133,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} d5b2e71c088247e21556decdce138d96: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine @@ -152,6 +153,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} 34ecb9b2633eacfc439ba8744fe05102: !PostProcessingEffects @@ -161,7 +163,6 @@ SharedRenderers: LocalReflections: Enabled: false ResolvePassResolution: Full - DebugMode: None DepthResolution: Half DepthOfField: Enabled: false @@ -185,17 +186,17 @@ SharedRenderers: Enabled: false Color: {R: 0.0, G: 0.0, B: 0.0} Antialiasing: !FXAAEffect {} - ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 7f627be4-065f-4541-bfd2-f7e6cef58a96 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! f1ef5817-0725-4b1a-abc9-845d101ec0e6 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: 82568e46-92e7-421a-8dca-114a74e0cd69 Children: d39c5ddbf8b7d5ca02bafb6496b1cc3c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 7f627be4-065f-4541-bfd2-f7e6cef58a96 + 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 7f627be4-065f-4541-bfd2-f7e6cef58a96 RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! f73edb54-66b5-4d61-ba47-af960f05d385 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 diff --git a/samples/Templates/FirstPersonShooter/FirstPersonShooter/FirstPersonShooter.Game/FirstPersonShooter.Game.csproj b/samples/Templates/FirstPersonShooter/FirstPersonShooter/FirstPersonShooter.Game/FirstPersonShooter.Game.csproj index 957727f556..58f23161fd 100644 --- a/samples/Templates/FirstPersonShooter/FirstPersonShooter/FirstPersonShooter.Game/FirstPersonShooter.Game.csproj +++ b/samples/Templates/FirstPersonShooter/FirstPersonShooter/FirstPersonShooter.Game/FirstPersonShooter.Game.csproj @@ -4,12 +4,12 @@ FirstPersonShooter - - - - - - + + + + + + diff --git a/samples/Templates/Packs/MaterialPackage/MaterialPackage.csproj b/samples/Templates/Packs/MaterialPackage/MaterialPackage.csproj index 5e2515dbbc..1e0f213097 100644 --- a/samples/Templates/Packs/MaterialPackage/MaterialPackage.csproj +++ b/samples/Templates/Packs/MaterialPackage/MaterialPackage.csproj @@ -3,7 +3,7 @@ netstandard2.0 - - + + \ No newline at end of file diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x1.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x1.xkphy index c3f958882c..8262b4f4db 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x1.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x1.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 974ee62e-4d36-4005-a27f-da07b6ae36a7 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: c262e230-382e-451b-8392-6c1441e58792:Models/Ramp1x1_2x1 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x2.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x2.xkphy index 480f163006..99545bb178 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x2.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1_2x2.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: ae62d5af-0efc-40e2-af1d-02af859774a1 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: 898b8f2c-6cd6-4320-9dad-418fdb30e20d:Models/Ramp1x1_2x2 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1x1.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1x1.xkphy index f029e85a23..992ac18749 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1x1.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp1x1x1.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 26f14582-93fd-4080-9f17-1f4444fe2205 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: e55d79be-700a-44db-a70f-8512c67dd07d:Models/Ramp1x1x1 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp2x1_2x1.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp2x1_2x1.xkphy index a01f829501..db67c7e35d 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp2x1_2x1.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Ramp2x1_2x1.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 815bd728-6629-4b0e-aa73-0dcf3435c715 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: fe9e63cd-9e41-4e66-b66b-67d0e1f67a85:Models/Ramp2x2_1x1 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1.xkphy index 261b61dd28..78ee58745f 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: f1034796-324c-4a40-a626-3d57b1d87fbf -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: ef7ac5ee-fbc4-4990-aa48-a7e60f283326:Models/Stairs1x1x1 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_25.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_25.xkphy index d174a26837..e92c829e7f 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_25.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_25.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 99e92203-3bfa-4947-a970-cf3c3b94fb84 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: 4c293323-c1b7-4b6f-8cdd-a240f179e5f5:Models/Stairs1x1x1_25 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_50.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_50.xkphy index 22d5e1dc6d..5e5605f41a 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_50.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x1_50.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 0bbcc6fe-9120-44e5-b6e8-6976bfa64b2c -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: 026c2dd9-6f56-47d4-a4cc-c80a1a69d8a8:Models/Stairs1x1x1_50 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x2.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x2.xkphy index 825d9fff05..07ca170af1 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x2.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs1x1x2.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 934024bf-9a3a-4e33-8fb0-fa4e14832f2b -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: da028d29-e641-4020-8977-dafaaf656ad4:Models/Stairs1x1x2 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs2x2x4.xkphy b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs2x2x4.xkphy index 09a4ab7846..f9ecac9108 100644 --- a/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs2x2x4.xkphy +++ b/samples/Templates/Packs/PrototypingBlocks/Assets/CollisionMeshes/Stairs2x2x4.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 60258ea8-0806-483e-a80d-4ad76595042d -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: dd1b93604c80c24fa67766d259000d5f: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: 19b45002-2276-4da1-b346-f0bd841b008e:Models/Stairs2x2x4 LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/Packs/PrototypingBlocks/PrototypingBlocks.csproj b/samples/Templates/Packs/PrototypingBlocks/PrototypingBlocks.csproj index 7065a3e3cd..bb15ce2041 100644 --- a/samples/Templates/Packs/PrototypingBlocks/PrototypingBlocks.csproj +++ b/samples/Templates/Packs/PrototypingBlocks/PrototypingBlocks.csproj @@ -3,8 +3,8 @@ netstandard2.0 - - - + + + \ No newline at end of file diff --git a/samples/Templates/Packs/SamplesAssetPackage/SamplesAssetPackage.csproj b/samples/Templates/Packs/SamplesAssetPackage/SamplesAssetPackage.csproj index 5e2515dbbc..1e0f213097 100644 --- a/samples/Templates/Packs/SamplesAssetPackage/SamplesAssetPackage.csproj +++ b/samples/Templates/Packs/SamplesAssetPackage/SamplesAssetPackage.csproj @@ -3,7 +3,7 @@ netstandard2.0 - - + + \ No newline at end of file diff --git a/samples/Templates/Packs/VFXPackage/VFXPackage.csproj b/samples/Templates/Packs/VFXPackage/VFXPackage.csproj index c6af001043..5eed6cdeb3 100644 --- a/samples/Templates/Packs/VFXPackage/VFXPackage.csproj +++ b/samples/Templates/Packs/VFXPackage/VFXPackage.csproj @@ -3,8 +3,8 @@ netstandard2.0 - - - + + + \ No newline at end of file diff --git a/samples/Templates/Packs/mannequinModel/mannequinModel.csproj b/samples/Templates/Packs/mannequinModel/mannequinModel.csproj index 6745b8ea39..b29f22b548 100644 --- a/samples/Templates/Packs/mannequinModel/mannequinModel.csproj +++ b/samples/Templates/Packs/mannequinModel/mannequinModel.csproj @@ -3,7 +3,7 @@ netstandard2.0 - - + + \ No newline at end of file diff --git a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/EffectCompileLog.xkeffectlog b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/EffectCompileLog.xkeffectlog index feb491437c..64c81cff9b 100644 --- a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/EffectCompileLog.xkeffectlog +++ b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/EffectCompileLog.xkeffectlog @@ -8,20 +8,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -29,14 +32,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -45,7 +50,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -57,16 +63,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -96,20 +107,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -117,14 +131,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -133,7 +149,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -145,16 +162,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -184,17 +206,20 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -204,7 +229,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -212,14 +238,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -228,7 +256,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -240,16 +269,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -279,17 +313,20 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -299,7 +336,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -307,14 +345,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -323,7 +363,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -335,8 +376,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -347,20 +390,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -369,8 +415,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -381,20 +429,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -402,14 +453,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -418,7 +471,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -430,8 +484,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -442,20 +498,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -463,14 +522,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -479,7 +540,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -491,16 +553,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -528,20 +595,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -549,14 +619,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -564,7 +636,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -572,7 +645,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -581,7 +655,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -596,16 +671,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -639,20 +719,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -660,14 +743,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -675,7 +760,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -683,7 +769,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -692,7 +779,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -707,8 +795,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -719,20 +809,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -740,14 +833,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -755,7 +850,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -763,7 +859,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -771,7 +868,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -779,7 +877,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -787,7 +886,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -796,7 +896,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -808,25 +909,30 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -836,7 +942,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -844,14 +951,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -860,7 +969,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -872,16 +982,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -909,20 +1024,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -930,14 +1048,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -945,7 +1065,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -953,7 +1074,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -962,7 +1084,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -977,16 +1100,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1010,20 +1138,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1031,14 +1162,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1047,7 +1180,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1059,8 +1193,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -1071,20 +1207,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1092,7 +1231,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1100,14 +1240,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1116,7 +1258,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1128,8 +1271,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -1141,20 +1286,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1162,14 +1310,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1177,7 +1327,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1185,7 +1336,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1193,7 +1345,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1201,7 +1354,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1209,7 +1363,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1218,7 +1373,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1230,16 +1386,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1273,20 +1434,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1294,14 +1458,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1309,7 +1475,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1317,7 +1484,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1325,7 +1493,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1333,7 +1502,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1341,7 +1511,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1350,7 +1521,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1362,16 +1534,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1395,20 +1572,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1416,14 +1596,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1432,7 +1614,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1444,16 +1627,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1481,20 +1669,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1502,7 +1693,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1510,14 +1702,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1526,7 +1720,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1538,17 +1733,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1582,20 +1782,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1603,7 +1806,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1611,14 +1815,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1627,7 +1833,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1639,17 +1846,22 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1763,20 +1975,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1785,16 +2000,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -1822,20 +2042,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1844,16 +2067,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderClassSource ClassName: LightClusteredPointGroup diff --git a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GameSettings.xkgamesettings b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GameSettings.xkgamesettings index 9d494b6334..dc1a4dcc0b 100644 --- a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GameSettings.xkgamesettings +++ b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 4117e0c4-74e7-486c-aed4-984217303139 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 98760599-6f0e-4c6b-9ba2-613e9d68d2e3:MainScene GraphicsCompositor: ddd023e5-3d0c-4fd9-a18b-0136736ce437:GraphicsCompositor @@ -22,7 +22,7 @@ Defaults: FixedTimeStep: 0.0166666675 - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GraphicsCompositor.xkgfxcomp b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GraphicsCompositor.xkgfxcomp index 744333a086..2242c43f0d 100644 --- a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GraphicsCompositor.xkgfxcomp +++ b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/Assets/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: ddd023e5-3d0c-4fd9-a18b-0136736ce437 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 823a81bf-bac0-4552-9267-aeed499c40df:DefaultGraphicsCompositorLevel10 Cameras: @@ -39,73 +39,73 @@ RenderStages: EffectSlotName: GBuffer SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster - b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 03fb5179-1ec3-46c6-9f21-e99bd570d6c6 EffectName: XenkoForwardShadingEffect.ShadowMapCasterParaboloid - f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 4316c937-6f9a-4961-a899-6394ffcc1cfe EffectName: XenkoForwardShadingEffect.ShadowMapCasterCubeMap - 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 2230593d-d4a3-4a72-be17-359d0aead755 EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 03fb5179-1ec3-46c6-9f21-e99bd570d6c6 DepthClipping: true - ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 4316c937-6f9a-4961-a899-6394ffcc1cfe DepthClipping: true RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Engine {} - 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} - 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Engine {} - ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Engine + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Rendering {} + 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} + 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Rendering {} + ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Rendering Renderers: - 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Engine + 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Engine + 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Engine + 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Rendering ShadowCasterRenderStage: ref!! 03fb5179-1ec3-46c6-9f21-e99bd570d6c6 - d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Engine + d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Rendering ShadowCasterRenderStage: ref!! 4316c937-6f9a-4961-a899-6394ffcc1cfe - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -133,6 +133,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} d5b2e71c088247e21556decdce138d96: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine @@ -152,6 +153,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} 34ecb9b2633eacfc439ba8744fe05102: !PostProcessingEffects @@ -161,7 +163,6 @@ SharedRenderers: LocalReflections: Enabled: false ResolvePassResolution: Full - DebugMode: None DepthResolution: Half DepthOfField: Enabled: false @@ -185,17 +186,17 @@ SharedRenderers: Enabled: false Color: {R: 0.0, G: 0.0, B: 0.0} Antialiasing: !FXAAEffect {} - ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 2f51782e-e23a-46fc-b1a4-6385a207d263 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! 9aeac611-d1f6-46da-a235-e20cc154e170 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: 82568e46-92e7-421a-8dca-114a74e0cd69 Children: d39c5ddbf8b7d5ca02bafb6496b1cc3c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 2f51782e-e23a-46fc-b1a4-6385a207d263 + 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 2f51782e-e23a-46fc-b1a4-6385a207d263 RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 04d863bd-4bbd-4dca-9a49-29e21171975a Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 diff --git a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Game/ThirdPersonPlatformer.Game.csproj b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Game/ThirdPersonPlatformer.Game.csproj index 23cd2858e0..3c2df7fe7d 100644 --- a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Game/ThirdPersonPlatformer.Game.csproj +++ b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Game/ThirdPersonPlatformer.Game.csproj @@ -4,12 +4,12 @@ ThirdPersonPlatformer - - - - - - + + + + + + diff --git a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Windows/Resources/Icon.ico b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Windows/Resources/Icon.ico and b/samples/Templates/ThirdPersonPlatformer/ThirdPersonPlatformer/ThirdPersonPlatformer.Windows/Resources/Icon.ico differ diff --git a/samples/Templates/TopDownRPG/TopDownRPG/Assets/DynamicScene.xkscene b/samples/Templates/TopDownRPG/TopDownRPG/Assets/DynamicScene.xkscene index 614d24bcb5..6ca596a086 100644 --- a/samples/Templates/TopDownRPG/TopDownRPG/Assets/DynamicScene.xkscene +++ b/samples/Templates/TopDownRPG/TopDownRPG/Assets/DynamicScene.xkscene @@ -45,8 +45,8 @@ Hierarchy: Size: XLarge DepthRange: {} PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {} - ComputeTransmittance: false BiasParameters: {} + ComputeTransmittance: false Intensity: 5.0 - Entity: Id: 2b57370f-e61c-41c5-b8c4-df6619837e29 @@ -84,7 +84,7 @@ Hierarchy: LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} 2eac96e8c90a836d8754e3f24fa1a99e: !Gameplay.SceneStreaming,TopDownRPG.Game Id: 5b6e2307-e465-4da0-8d84-b9624682ef9f - Url: EasternChunk + Url: feaab56f-3f56-48e0-83be-dfe2f38f65a6:EasternChunk Trigger: !RigidbodyComponent ref!! 00eee251-501b-4d85-b1b2-cdf1d7608ee4 - Entity: Id: 3113203c-2276-420b-bf0d-fce00d95dc58 @@ -122,7 +122,7 @@ Hierarchy: LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} 2eac96e8c90a836d8754e3f24fa1a99e: !Gameplay.SceneStreaming,TopDownRPG.Game Id: 276ff6f0-dcc0-4945-b13e-f2dd2664b4e0 - Url: SouthernChunk + Url: 7cdb3d4a-151d-4851-a736-fec1bba593d3:SouthernChunk Trigger: !RigidbodyComponent ref!! 52032222-a039-47be-9d21-4a6c3adca582 - Entity: Id: 36396dfa-6aa4-4489-a7f5-e45f569bb082 @@ -291,7 +291,7 @@ Hierarchy: LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} 2eac96e8c90a836d8754e3f24fa1a99e: !Gameplay.SceneStreaming,TopDownRPG.Game Id: 0d6efc2a-7d05-4295-aa27-1438d51972c0 - Url: WesternChunk + Url: 465718fa-96e7-4d3b-897d-8e7075b1a9ae:WesternChunk Trigger: !RigidbodyComponent ref!! 06ed6375-b5de-40e6-88e8-16ba15e8f474 - Folder: GlobalLights Entity: @@ -376,7 +376,7 @@ Hierarchy: LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} 2eac96e8c90a836d8754e3f24fa1a99e: !Gameplay.SceneStreaming,TopDownRPG.Game Id: 1f7da7c0-2b66-4b6b-b5c2-924baea7652c - Url: NorthernChunk + Url: cd7db7bc-2d8e-45be-a6d9-4b7e9008e949:NorthernChunk Trigger: !RigidbodyComponent ref!! 34034a61-5c72-4401-8c28-f112ab89f36b - Entity: Id: c3648c46-3fef-42fd-a935-6c2663254381 @@ -414,7 +414,7 @@ Hierarchy: LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} 2eac96e8c90a836d8754e3f24fa1a99e: !Gameplay.SceneStreaming,TopDownRPG.Game Id: 399f44ea-00ce-44fc-80ff-474e65ec1c9b - Url: CentralChunk + Url: 805ec36b-feab-40fb-93cd-8f5083937659:CentralChunk Trigger: !RigidbodyComponent ref!! 78b1ff69-cfed-4a09-8c1b-eb12cbf817b1 - Entity: Id: f7e977f3-a569-4ae2-a4e8-89afaf7e0817 diff --git a/samples/Templates/TopDownRPG/TopDownRPG/Assets/EffectCompileLog.xkeffectlog b/samples/Templates/TopDownRPG/TopDownRPG/Assets/EffectCompileLog.xkeffectlog index adee5958c0..fa38ee3c74 100644 --- a/samples/Templates/TopDownRPG/TopDownRPG/Assets/EffectCompileLog.xkeffectlog +++ b/samples/Templates/TopDownRPG/TopDownRPG/Assets/EffectCompileLog.xkeffectlog @@ -4,20 +4,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -25,7 +28,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -33,14 +37,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -48,7 +54,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -56,7 +63,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -65,7 +73,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -77,8 +86,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -86,17 +97,20 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -106,7 +120,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -114,14 +129,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -130,7 +147,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -142,25 +160,30 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -170,7 +193,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -178,14 +202,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -194,7 +220,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -206,20 +233,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -250,20 +283,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -271,14 +307,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -287,7 +325,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -299,20 +338,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -339,17 +384,20 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -359,7 +407,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -367,14 +416,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -383,7 +434,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -395,20 +447,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -429,20 +487,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -450,14 +511,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -466,7 +529,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -478,28 +542,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -507,14 +576,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -523,7 +594,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -535,20 +607,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -573,20 +651,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -594,14 +675,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -610,7 +693,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -622,8 +706,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -634,20 +720,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -655,14 +744,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -671,7 +762,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -683,20 +775,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -721,20 +819,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -742,14 +843,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -757,7 +860,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -765,7 +869,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -774,7 +879,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -789,8 +895,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -801,20 +909,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -822,14 +933,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -837,7 +950,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -845,7 +959,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -854,7 +969,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -869,20 +985,26 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -907,20 +1029,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -928,14 +1053,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -943,7 +1070,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -951,7 +1079,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -959,7 +1088,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -967,7 +1097,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -975,7 +1106,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -984,7 +1116,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -996,20 +1129,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1040,20 +1179,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1061,14 +1203,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1076,7 +1220,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1084,7 +1229,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1092,7 +1238,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1100,7 +1247,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1108,7 +1256,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1117,7 +1266,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1129,28 +1279,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1158,7 +1313,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1166,7 +1322,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1174,7 +1331,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1182,7 +1340,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1190,7 +1349,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1198,7 +1358,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1206,7 +1367,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1214,7 +1376,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1222,12 +1385,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1237,7 +1402,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1245,7 +1411,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1254,7 +1421,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1269,8 +1437,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -1278,20 +1448,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1299,7 +1472,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1307,14 +1481,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1322,7 +1498,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1330,7 +1507,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1338,7 +1516,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1346,7 +1525,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1354,7 +1534,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1363,7 +1544,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1375,8 +1557,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -1384,20 +1568,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1405,14 +1592,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1421,7 +1610,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1433,20 +1623,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1477,20 +1673,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1498,7 +1697,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1506,14 +1706,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1522,7 +1724,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1534,8 +1737,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -1547,20 +1752,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1568,14 +1776,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -1583,7 +1793,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1591,7 +1802,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1600,7 +1812,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1615,20 +1828,26 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1659,20 +1878,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1681,8 +1903,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -1693,20 +1917,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1715,20 +1942,26 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1753,20 +1986,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1774,14 +2010,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1789,7 +2027,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1797,7 +2036,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1805,7 +2045,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1813,7 +2054,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1821,7 +2063,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1830,7 +2073,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1842,20 +2086,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1880,20 +2130,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1902,20 +2155,26 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1946,20 +2205,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1967,7 +2229,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1975,14 +2238,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1991,7 +2256,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2003,21 +2269,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2042,20 +2314,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2063,7 +2338,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2071,14 +2347,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2087,7 +2365,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2099,21 +2378,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2227,7 +2512,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2246,14 +2532,16 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [ParticleBase.EmissiveValue] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2271,20 +2559,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2292,7 +2583,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2300,14 +2592,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2315,7 +2609,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2323,7 +2618,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2331,7 +2627,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2339,7 +2636,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2347,7 +2645,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2356,7 +2655,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2368,21 +2668,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2403,20 +2709,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2424,7 +2733,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2432,14 +2742,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2447,7 +2759,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2455,7 +2768,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2463,7 +2777,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2471,7 +2786,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2479,7 +2795,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2488,7 +2805,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2500,21 +2818,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2541,20 +2865,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2562,7 +2889,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2570,7 +2898,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2578,7 +2907,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2586,7 +2916,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2594,7 +2925,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2602,7 +2934,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2610,7 +2943,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2618,7 +2952,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2626,12 +2961,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2641,7 +2978,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2649,7 +2987,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2658,7 +2997,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2673,21 +3013,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2708,20 +3054,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2729,7 +3078,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2737,7 +3087,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2745,7 +3096,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2753,7 +3105,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2761,7 +3114,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2769,7 +3123,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2777,7 +3132,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2785,7 +3141,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2793,12 +3150,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2808,7 +3167,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2816,7 +3176,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2825,7 +3186,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2840,21 +3202,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2881,26 +3249,31 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.VertexStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDisplacement, r] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderMixinSource Mixins: - - ClassName: ComputeColorSubtract + - !ShaderClassSource + ClassName: ComputeColorSubtract Compositions: color1: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantFloatLink @@ -2919,17 +3292,21 @@ UsedParameters: GenericArguments: [Position, meshNormal, false] Material.VertexStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialDisplacementStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialDisplacementStream Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -2937,7 +3314,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2945,7 +3323,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -2953,7 +3332,8 @@ UsedParameters: GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2966,8 +3346,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream XenkoEffectBase.RenderTargetExtensions: !ShaderMixinSource Macros: - Name: XENKO_MULTISAMPLE_COUNT @@ -2978,20 +3360,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2999,7 +3384,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3007,14 +3393,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3022,7 +3410,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3030,7 +3419,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3039,7 +3429,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3051,21 +3442,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3086,20 +3483,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -3107,7 +3507,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3115,14 +3516,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3130,7 +3533,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3138,7 +3542,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3147,7 +3552,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3159,21 +3565,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, true, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: diff --git a/samples/Templates/TopDownRPG/TopDownRPG/Assets/GameSettings.xkgamesettings b/samples/Templates/TopDownRPG/TopDownRPG/Assets/GameSettings.xkgamesettings index c55c7ffd2a..d050651123 100644 --- a/samples/Templates/TopDownRPG/TopDownRPG/Assets/GameSettings.xkgamesettings +++ b/samples/Templates/TopDownRPG/TopDownRPG/Assets/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: 2eabc4de-eca3-4407-83d7-8640d12f8b1c -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 961e35a8-ba9a-47b4-82c6-2a2450282c00:MainScene GraphicsCompositor: ce13d5ed-a9d2-46c0-97d0-e52f7482d0c6:GraphicsCompositor @@ -43,7 +43,7 @@ Defaults: MaxClimb: 0.3 MaxSlope: {Radians: 0.7853982} Radius: 0.5 - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Templates/TopDownRPG/TopDownRPG/Assets/GraphicsCompositor.xkgfxcomp b/samples/Templates/TopDownRPG/TopDownRPG/Assets/GraphicsCompositor.xkgfxcomp index db4fdfc03e..303d2ff1d8 100644 --- a/samples/Templates/TopDownRPG/TopDownRPG/Assets/GraphicsCompositor.xkgfxcomp +++ b/samples/Templates/TopDownRPG/TopDownRPG/Assets/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: ce13d5ed-a9d2-46c0-97d0-e52f7482d0c6 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 823a81bf-bac0-4552-9267-aeed499c40df:DefaultGraphicsCompositorLevel10 Cameras: @@ -39,73 +39,73 @@ RenderStages: EffectSlotName: GBuffer SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster - b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 3bb83710-3c46-4189-bc60-6a4e24765272 EffectName: XenkoForwardShadingEffect.ShadowMapCasterParaboloid - f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 8aff140a-5c35-4404-a34d-9e4ae1f4820d EffectName: XenkoForwardShadingEffect.ShadowMapCasterCubeMap - 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! fdb004f3-e692-4a74-ac3a-e95b40e2a4dd EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 3bb83710-3c46-4189-bc60-6a4e24765272 DepthClipping: true - ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 8aff140a-5c35-4404-a34d-9e4ae1f4820d DepthClipping: true RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Engine {} - 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} - 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Engine {} - ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Engine + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Rendering {} + 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} + 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Rendering {} + ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Rendering Renderers: - 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Engine + 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Engine + 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Engine + 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Rendering ShadowCasterRenderStage: ref!! 3bb83710-3c46-4189-bc60-6a4e24765272 - d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Engine + d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Rendering ShadowCasterRenderStage: ref!! 8aff140a-5c35-4404-a34d-9e4ae1f4820d - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -133,6 +133,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} d5b2e71c088247e21556decdce138d96: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine @@ -152,6 +153,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} 34ecb9b2633eacfc439ba8744fe05102: !PostProcessingEffects @@ -161,7 +163,6 @@ SharedRenderers: LocalReflections: Enabled: false ResolvePassResolution: Full - DebugMode: None DepthResolution: Half DepthOfField: Enabled: false @@ -185,17 +186,17 @@ SharedRenderers: Enabled: false Color: {R: 0.0, G: 0.0, B: 0.0} Antialiasing: !FXAAEffect {} - ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 7f8953c1-a839-4b27-92c9-687292331dac DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! c15adccd-88f4-4cd9-a45a-55ce9f8e89e5 - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: 82568e46-92e7-421a-8dca-114a74e0cd69 Children: d39c5ddbf8b7d5ca02bafb6496b1cc3c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 7f8953c1-a839-4b27-92c9-687292331dac + 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 7f8953c1-a839-4b27-92c9-687292331dac RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 722b7819-f252-47c9-be1d-ae5acbc94bb8 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 diff --git a/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Core/Utils.cs b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Core/Utils.cs index 3a5bd4c7e8..87d7c96f0e 100644 --- a/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Core/Utils.cs +++ b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Core/Utils.cs @@ -161,7 +161,8 @@ public static bool ScreenPositionToWorldPositionRaycast(Vector2 screenPos, Camer var minDistance = float.PositiveInfinity; - var result = simulation.RaycastPenetrating(vectorNear.XYZ(), vectorFar.XYZ()); + var result = new FastList(); + simulation.RaycastPenetrating(vectorNear.XYZ(), vectorFar.XYZ(), result); foreach (var hitResult in result) { ClickType type = ClickType.Empty; diff --git a/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Gameplay/SceneStreaming.cs b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Gameplay/SceneStreaming.cs index ef25fbc8c8..60f5313e2e 100644 --- a/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Gameplay/SceneStreaming.cs +++ b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/Gameplay/SceneStreaming.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using Xenko.Core; using Xenko.Core.Mathematics; +using Xenko.Core.Serialization; using Xenko.Engine; using Xenko.Physics; @@ -29,7 +30,7 @@ public class SceneStreaming : SyncScript /// /// The url of the scene to load /// - public string Url { get; set; } + public UrlReference Url { get; set; } /// /// The trigger volume. This should be a static collider, set to be a trigger @@ -99,14 +100,14 @@ public override void Update() if (shouldLoad) { // If we should load syncrhonously, just create a completed task and load - Instance = Content.Load(Url); + Instance = Content.Load(Url); loadingTask = Task.FromResult(Instance); } else if (shouldPreLoad) { loadCancellation = new CancellationTokenSource(); - var localLoadingTask = loadingTask = Content.LoadAsync(Url); + var localLoadingTask = loadingTask = Content.LoadAsync(Url); Script.AddTask(async () => { await loadingTask; diff --git a/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/TopDownRPG.Game.csproj b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/TopDownRPG.Game.csproj index e209538cb5..d915e41e6a 100644 --- a/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/TopDownRPG.Game.csproj +++ b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Game/TopDownRPG.Game.csproj @@ -4,13 +4,13 @@ TopDownRPG - - - - - - - + + + + + + + diff --git a/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Windows/Resources/Icon.ico b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Windows/Resources/Icon.ico new file mode 100644 index 0000000000..29256adf26 Binary files /dev/null and b/samples/Templates/TopDownRPG/TopDownRPG/TopDownRPG.Windows/Resources/Icon.ico differ diff --git a/samples/Templates/VRSandbox/VRSandbox/Assets/ColliderHull.xkphy b/samples/Templates/VRSandbox/VRSandbox/Assets/ColliderHull.xkphy index 51a9427388..ce2da4de0c 100644 --- a/samples/Templates/VRSandbox/VRSandbox/Assets/ColliderHull.xkphy +++ b/samples/Templates/VRSandbox/VRSandbox/Assets/ColliderHull.xkphy @@ -1,6 +1,6 @@ !ColliderShapeAsset Id: 7d081988-3699-4ccc-8bc2-c31b37b172d4 -SerializedVersion: {Xenko: 2.0.0.0} +SerializedVersion: {Xenko: 3.0.0.0} Tags: [] ColliderShapes: e37a9ac2f8b620ffd45945407271cd76: !ConvexHullColliderShapeDesc @@ -9,12 +9,13 @@ ColliderShapes: Model: 5c759e03-f13d-4962-b8f2-4ff82e154629:Models/standCurved LocalOffset: {X: 0.0, Y: 0.0, Z: 0.0} LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} - SimpleWrap: true Scaling: {X: 1.0, Y: 1.0, Z: 1.0} - Depth: 10 - PosSampling: 10 - AngleSampling: 10 - PosRefine: 5 - AngleRefine: 5 - Alpha: 0.01 - Threshold: 0.01 + Decomposition: + Depth: 10 + PosSampling: 10 + AngleSampling: 10 + PosRefine: 5 + AngleRefine: 5 + Alpha: 0.01 + Threshold: 0.01 + Enabled: false diff --git a/samples/Templates/VRSandbox/VRSandbox/Assets/EffectCompileLog.xkeffectlog b/samples/Templates/VRSandbox/VRSandbox/Assets/EffectCompileLog.xkeffectlog index 0628c598c7..62dae757fc 100644 --- a/samples/Templates/VRSandbox/VRSandbox/Assets/EffectCompileLog.xkeffectlog +++ b/samples/Templates/VRSandbox/VRSandbox/Assets/EffectCompileLog.xkeffectlog @@ -4,20 +4,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -25,7 +28,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -33,7 +37,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -41,7 +46,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -50,7 +56,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -62,16 +69,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -93,20 +104,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -114,7 +128,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -122,7 +137,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -130,7 +146,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -138,7 +155,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -146,7 +164,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -154,7 +173,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -162,7 +182,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -170,7 +191,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -179,7 +201,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -191,16 +214,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -226,20 +253,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -247,14 +277,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -262,7 +294,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -270,7 +303,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -278,7 +312,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -286,7 +321,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -294,7 +330,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -303,7 +340,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -315,16 +353,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -346,20 +388,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -367,7 +412,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -375,7 +421,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -383,7 +430,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -392,7 +440,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -404,16 +453,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -433,20 +486,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -454,7 +510,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -462,14 +519,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -478,7 +537,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -490,17 +550,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -522,20 +586,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -543,7 +610,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -551,14 +619,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -566,7 +636,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -574,7 +645,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -582,7 +654,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -590,7 +663,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -598,7 +672,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -607,7 +682,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -619,17 +695,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -655,20 +735,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -676,7 +759,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -684,14 +768,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -700,7 +786,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -712,17 +799,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -738,20 +829,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -759,7 +853,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -767,7 +862,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -775,7 +871,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -783,7 +880,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -791,7 +889,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -799,7 +898,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -807,7 +907,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -815,7 +916,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -823,12 +925,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -838,7 +942,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -846,7 +951,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -855,7 +961,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -870,17 +977,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -902,20 +1013,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -923,7 +1037,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -931,14 +1046,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -946,7 +1063,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -954,7 +1072,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -963,7 +1082,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -975,17 +1095,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1007,13 +1131,15 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -1021,7 +1147,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1032,8 +1159,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream XenkoEffectBase.RenderTargetExtensions: !ShaderMixinSource Macros: - Name: XENKO_RENDER_TARGET_COUNT @@ -1046,13 +1175,15 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -1060,7 +1191,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1071,28 +1203,33 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1100,7 +1237,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1108,7 +1246,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1116,7 +1255,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1124,7 +1264,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1132,7 +1273,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1140,7 +1282,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1148,7 +1291,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1156,7 +1300,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1164,12 +1309,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1179,7 +1326,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1187,7 +1335,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1196,7 +1345,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1211,17 +1361,21 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1237,20 +1391,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1258,7 +1415,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1266,14 +1424,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1281,7 +1441,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1289,7 +1450,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1297,7 +1459,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1305,7 +1468,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1313,7 +1477,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1322,7 +1487,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1334,17 +1500,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1360,20 +1530,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -1381,7 +1554,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1389,14 +1563,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1404,7 +1580,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1412,7 +1589,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1421,7 +1599,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1433,17 +1612,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1459,25 +1642,29 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, false] Compositions: normalMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1487,12 +1674,14 @@ UsedParameters: GenericArguments: [Material.NormalValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [true] Compositions: glossinessMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1502,7 +1691,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1510,7 +1700,8 @@ UsedParameters: GenericArguments: [Material.SpecularMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1518,7 +1709,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1527,7 +1719,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1539,17 +1732,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1571,20 +1768,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1592,7 +1792,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1600,7 +1801,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1608,7 +1810,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1616,7 +1819,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1624,7 +1828,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1632,7 +1837,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1640,7 +1846,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1648,7 +1855,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1657,7 +1865,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1669,16 +1878,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1698,20 +1911,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1719,14 +1935,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -1734,7 +1952,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -1742,7 +1961,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1750,7 +1970,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -1758,7 +1979,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -1766,7 +1988,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1775,7 +1998,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1787,16 +2011,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1812,25 +2040,29 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, false] Compositions: normalMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1840,12 +2072,14 @@ UsedParameters: GenericArguments: [Material.NormalValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [true] Compositions: glossinessMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1855,7 +2089,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1863,7 +2098,8 @@ UsedParameters: GenericArguments: [Material.SpecularMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1871,7 +2107,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1880,7 +2117,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1892,17 +2130,21 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -1922,20 +2164,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -1943,14 +2188,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -1959,7 +2206,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -1971,16 +2219,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2006,20 +2258,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2027,14 +2282,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2043,7 +2300,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2055,16 +2313,20 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2096,25 +2358,29 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, false] Compositions: normalMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2124,12 +2390,14 @@ UsedParameters: GenericArguments: [Material.NormalValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [true] Compositions: glossinessMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2139,7 +2407,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2147,7 +2416,8 @@ UsedParameters: GenericArguments: [Material.SpecularMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2155,7 +2425,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2164,7 +2435,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2176,8 +2448,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -2185,20 +2459,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2206,7 +2483,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2214,14 +2492,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2229,7 +2509,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2237,7 +2518,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2245,7 +2527,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2253,7 +2536,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2261,7 +2545,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2270,7 +2555,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2282,8 +2568,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -2291,20 +2579,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2312,7 +2603,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2320,7 +2612,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2328,7 +2621,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2337,7 +2631,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2349,28 +2644,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2378,7 +2678,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2386,7 +2687,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2394,7 +2696,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2402,7 +2705,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2410,7 +2714,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2418,7 +2723,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2426,7 +2732,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2434,7 +2741,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2443,7 +2751,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2455,28 +2764,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2484,7 +2798,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2492,7 +2807,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2500,7 +2816,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2508,7 +2825,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2516,7 +2834,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2524,7 +2843,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2532,7 +2852,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2540,7 +2861,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2548,12 +2870,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2563,7 +2887,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2571,7 +2896,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2580,7 +2906,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2595,8 +2922,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -2608,20 +2937,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2629,7 +2961,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2637,14 +2970,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2653,7 +2988,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2665,8 +3001,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -2674,20 +3012,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -2695,7 +3036,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2703,14 +3045,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2718,7 +3062,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2726,7 +3071,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2735,7 +3081,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2747,8 +3094,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true --- !EffectCompileRequest @@ -2756,25 +3105,29 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, false] Compositions: normalMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2784,12 +3137,14 @@ UsedParameters: GenericArguments: [Material.NormalValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [true] Compositions: glossinessMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -2799,7 +3154,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2807,7 +3163,8 @@ UsedParameters: GenericArguments: [Material.SpecularMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2815,7 +3172,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2824,7 +3182,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2836,21 +3195,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2872,20 +3237,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -2893,7 +3261,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -2901,7 +3270,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2909,7 +3279,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -2917,7 +3288,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -2925,7 +3297,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -2933,7 +3306,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -2941,7 +3315,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -2949,7 +3324,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -2958,7 +3334,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -2970,20 +3347,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -2999,20 +3382,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3020,7 +3406,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -3028,7 +3415,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3036,7 +3424,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3045,7 +3434,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3057,20 +3447,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3086,25 +3482,29 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, false] Compositions: normalMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -3114,12 +3514,14 @@ UsedParameters: GenericArguments: [Material.NormalValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [true] Compositions: glossinessMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -3129,7 +3531,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -3137,7 +3540,8 @@ UsedParameters: GenericArguments: [Material.SpecularMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i3, Material.TextureOffset.i3] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3145,7 +3549,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3154,7 +3559,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3166,21 +3572,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3196,20 +3608,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3217,7 +3632,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -3225,7 +3641,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3233,7 +3650,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3241,7 +3659,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3249,7 +3668,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3257,7 +3677,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -3265,7 +3686,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -3273,7 +3695,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3282,7 +3705,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3294,20 +3718,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3329,20 +3759,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3350,7 +3783,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -3358,7 +3792,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3366,7 +3801,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3375,7 +3811,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3387,20 +3824,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3426,20 +3869,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -3447,7 +3893,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3455,14 +3902,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3471,7 +3920,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3483,21 +3933,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3519,20 +3975,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -3540,7 +3999,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3548,14 +4008,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3563,7 +4025,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3571,7 +4034,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3580,7 +4044,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3592,21 +4057,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3632,20 +4103,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -3653,7 +4127,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3661,14 +4136,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3677,7 +4154,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3689,21 +4167,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3723,20 +4207,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3744,14 +4231,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3759,7 +4248,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3767,7 +4257,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -3775,7 +4266,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -3783,7 +4275,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -3791,7 +4284,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3800,7 +4294,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3812,8 +4307,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -3824,20 +4321,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3845,14 +4345,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3861,7 +4363,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3873,28 +4376,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -3902,7 +4410,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -3910,14 +4419,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -3925,7 +4436,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -3933,7 +4445,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -3942,7 +4455,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -3954,21 +4468,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -3984,20 +4504,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -4005,7 +4528,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4013,14 +4537,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4028,7 +4554,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4036,7 +4563,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4044,7 +4572,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4052,7 +4581,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4060,7 +4590,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4069,7 +4600,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4081,21 +4613,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -4117,20 +4655,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -4138,7 +4679,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4146,14 +4688,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4161,7 +4705,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4169,7 +4714,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4177,7 +4723,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4185,7 +4732,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4193,7 +4741,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4202,7 +4751,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4214,21 +4764,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -4248,20 +4804,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4269,14 +4828,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4284,7 +4845,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4292,7 +4854,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4300,7 +4863,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4308,7 +4872,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4316,7 +4881,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4325,7 +4891,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4337,20 +4904,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -4366,20 +4939,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -4387,7 +4963,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4395,7 +4972,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -4403,7 +4981,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4411,7 +4990,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4419,7 +4999,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4427,7 +5008,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4435,7 +5017,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4443,7 +5026,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4451,12 +5035,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -4466,7 +5052,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4474,7 +5061,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4483,7 +5071,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4498,21 +5087,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -4528,20 +5123,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [true, true] Compositions: normalMap: !ShaderClassSource @@ -4549,7 +5147,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4557,7 +5156,8 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -4565,7 +5165,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4573,7 +5174,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4581,7 +5183,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionMap, TEXCOORD0, Material.Sampler.i0, r, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4589,7 +5192,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4597,7 +5201,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4605,7 +5210,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4613,12 +5219,14 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -4628,7 +5236,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4636,7 +5245,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4645,7 +5255,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4660,21 +5271,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -4700,20 +5317,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4721,14 +5341,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4737,7 +5359,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4749,20 +5372,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -4782,20 +5411,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4803,14 +5435,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4819,7 +5453,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4831,20 +5466,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: @@ -4870,20 +5511,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -4891,14 +5535,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -4906,7 +5552,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -4914,7 +5561,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -4922,7 +5570,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -4930,7 +5579,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -4938,7 +5588,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -4947,7 +5598,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -4959,20 +5611,26 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, true, false, false, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup Lighting.EnvironmentLights: diff --git a/samples/Templates/VRSandbox/VRSandbox/Assets/GameSettings.xkgamesettings b/samples/Templates/VRSandbox/VRSandbox/Assets/GameSettings.xkgamesettings index e5bc67426d..e145c3153f 100644 --- a/samples/Templates/VRSandbox/VRSandbox/Assets/GameSettings.xkgamesettings +++ b/samples/Templates/VRSandbox/VRSandbox/Assets/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: f0373465-779e-49a5-8ae8-92a737831a9f -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 11913d23-3ce0-4773-88a4-227aa4d933e7:MainScene GraphicsCompositor: 8d329486-e5dc-4222-be4d-93c697dcdae8:GraphicsCompositor @@ -22,7 +22,7 @@ Defaults: FixedTimeStep: 0.011111 - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/Templates/VRSandbox/VRSandbox/Assets/GraphicsCompositor.xkgfxcomp b/samples/Templates/VRSandbox/VRSandbox/Assets/GraphicsCompositor.xkgfxcomp index a7a150c8de..5b29019e25 100644 --- a/samples/Templates/VRSandbox/VRSandbox/Assets/GraphicsCompositor.xkgfxcomp +++ b/samples/Templates/VRSandbox/VRSandbox/Assets/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 8d329486-e5dc-4222-be4d-93c697dcdae8 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 823a81bf-bac0-4552-9267-aeed499c40df:DefaultGraphicsCompositorLevel10 Cameras: @@ -48,77 +48,77 @@ RenderStages: Name: UIRenderStage EffectSlotName: Main RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster - b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 3a2a384d-1cca-4f9a-99be-24aec9790f26 EffectName: XenkoForwardShadingEffect.ShadowMapCasterParaboloid - f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 4b938af9-e4cd-4b26-8f2c-33ad2ba2f6d9 EffectName: XenkoForwardShadingEffect.ShadowMapCasterCubeMap - 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 1e10562d-806e-456b-a329-8bb5f97979b9 EffectName: XenkoForwardShadingEffect.ShadowMapCaster - 39ef65b9ba494c8486f253267a9ed113*: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 39ef65b9ba494c8486f253267a9ed113*: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 07a126dc-39ad-4bf7-88e9-6b051a66b1eb EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 3a2a384d-1cca-4f9a-99be-24aec9790f26 DepthClipping: true - ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 4b938af9-e4cd-4b26-8f2c-33ad2ba2f6d9 DepthClipping: true RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Engine {} - 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} - 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Engine {} - 8fb9bbed7a570fdc9d16ee6ae5602519*: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Engine {} - ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Engine + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Rendering {} + 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} + 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Rendering {} + 8fb9bbed7a570fdc9d16ee6ae5602519*: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Rendering {} + ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Rendering Renderers: - 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Engine + 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Engine + 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Engine + 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Rendering ShadowCasterRenderStage: ref!! 3a2a384d-1cca-4f9a-99be-24aec9790f26 - d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Engine + d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Rendering ShadowCasterRenderStage: ref!! 4b938af9-e4cd-4b26-8f2c-33ad2ba2f6d9 - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage*: ref!! e139baa9-6bb0-42db-8bcb-4732c127c8e1 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -162,9 +162,10 @@ SharedRenderers: LocalRotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} SurfaceSize: {X: 0.1, Y: 0.1} FollowsHeadRotation: true + SubsurfaceScatteringBlurEffect: null MSAALevel*: X4 MSAAResolver: {} - ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 237c52f0-dd85-4a36-a6b9-45f94545fdb4 DebugRenderStages: {} e4fdc03ab99242b3b516df183f259aad*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine @@ -187,6 +188,7 @@ SharedRenderers: IgnoreCameraRotation: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} 1bb079da57cd9ac93c46e238091dcef5*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine @@ -206,6 +208,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: X4 MSAAResolver: {} d5b2e71c088247e21556decdce138d96: ~(Deleted) @@ -213,17 +216,18 @@ SharedRenderers: Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! f70c25f8-3ab5-4afd-a6da-3f48277293b7 - Child*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: 00705c6a-f385-4c7a-934a-3f4319865af8 Children: - d39c5ddbf8b7d5ca02bafb6496b1cc3c*: !Xenko.Rendering.Compositing.RenderTextureSceneRenderer,Xenko.Engine + d39c5ddbf8b7d5ca02bafb6496b1cc3c*: !Xenko.Rendering.Compositing.RenderTextureSceneRenderer,Xenko.Rendering Id: 4070a990-c647-4ab9-8853-8d4a558c4202 RenderTexture: f9768e6e-2d83-470e-925e-8a1db9342c5d:UIRenderTexture - Child: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Rendering Id: fadaa3ec-6887-4bf2-a813-68d281523ec6 RenderStage: ref!! e139baa9-6bb0-42db-8bcb-4732c127c8e1 01d338078e9b21121ead0868932613dd*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - e182ad0830302a7658f54ae655aba716*: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 237c52f0-dd85-4a36-a6b9-45f94545fdb4 + e182ad0830302a7658f54ae655aba716*: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 237c52f0-dd85-4a36-a6b9-45f94545fdb4 + RenderMask: All SingleView*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 7e02cd29-ca10-41f1-88d1-0ec22e083549 Editor*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 70e4e095-41b2-4ebc-95f9-2d81f39632c9 BlockPositions: {} diff --git a/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Game/VRSandbox.Game.csproj b/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Game/VRSandbox.Game.csproj index 30f666cf53..9c9f0e134f 100644 --- a/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Game/VRSandbox.Game.csproj +++ b/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Game/VRSandbox.Game.csproj @@ -4,12 +4,12 @@ VRSandbox - - - - - - + + + + + + diff --git a/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Windows/Resources/Icon.ico b/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Windows/Resources/Icon.ico and b/samples/Templates/VRSandbox/VRSandbox/VRSandbox.Windows/Resources/Icon.ico differ diff --git a/samples/Tests/LocalConnectionRouterInitializer.cs b/samples/Tests/LocalConnectionRouterInitializer.cs deleted file mode 100644 index f738a9269b..0000000000 --- a/samples/Tests/LocalConnectionRouterInitializer.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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.Diagnostics; -using System.IO; -using System.Net.Sockets; -using System.Threading; -using Xenko.Core; -using Xenko.Engine.Network; - -namespace Xenko.Samples.Tests -{ - //This is how we inject the assembly to run automatically at game start, paired with Xenko.targets and the msbuild property XenkoAutoTesting - internal class LocalConnectionRouterInitializer - { - [ModuleInitializer] - public static void Initialize() - { - // Locate connection router - var connectionRouterPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Xenko.ConnectionRouter.exe"); - if (!File.Exists(connectionRouterPath)) - throw new InvalidOperationException("Connection router not found"); - - // Kill any existing connection router - foreach (var process in Process.GetProcessesByName("Xenko.ConnectionRouter")) - { - try - { - process.Kill(); - process.WaitForExit(); - break; - } - catch (Exception) - { - } - } - - // Start connection router - var connectionRouterProcess = Process.Start(connectionRouterPath); - // attach job so that it gets killed when tests are finished - new AttachedChildProcessJob(connectionRouterProcess); - - // Wait for port to open - using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) - { - // Try during 5 seconds (10 * 500 msec) - for (int i = 0; i < 10; ++i) - { - try - { - socket.Connect("localhost", RouterClient.DefaultPort); - } - catch (SocketException) - { - // Try again in 500 msec - Thread.Sleep(500); - continue; - } - break; - } - } - } - } -} diff --git a/samples/Tests/Xenko.Samples.Tests.csproj b/samples/Tests/Xenko.Samples.Tests.csproj index 5bf4b72e37..a8c398926f 100644 --- a/samples/Tests/Xenko.Samples.Tests.csproj +++ b/samples/Tests/Xenko.Samples.Tests.csproj @@ -1,9 +1,9 @@ - + - + - net472 + $(TargetFrameworkTool) x64 false false @@ -29,10 +29,7 @@ - - - - + \ No newline at end of file diff --git a/samples/Tutorials/CSharpBeginner/CSharpBeginner/CSharpBeginner.Game/CSharpBeginner.Game.csproj b/samples/Tutorials/CSharpBeginner/CSharpBeginner/CSharpBeginner.Game/CSharpBeginner.Game.csproj new file mode 100644 index 0000000000..9ac020033e --- /dev/null +++ b/samples/Tutorials/CSharpBeginner/CSharpBeginner/CSharpBeginner.Game/CSharpBeginner.Game.csproj @@ -0,0 +1,18 @@ + + + netstandard2.0 + CSharpBeginner + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Tutorials/CSharpBeginner/CSharpBeginner/CSharpBeginner.Game/CSharpBeginner.Game.xkpkg b/samples/Tutorials/CSharpBeginner/CSharpBeginner/CSharpBeginner.Game/CSharpBeginner.Game.xkpkg new file mode 100644 index 0000000000..4455d1e391 --- /dev/null +++ b/samples/Tutorials/CSharpBeginner/CSharpBeginner/CSharpBeginner.Game/CSharpBeginner.Game.xkpkg @@ -0,0 +1,32 @@ +!Package +SerializedVersion: {Assets: 3.1.0.0} +Meta: + Name: CSharpBeginner.Game + Version: 1.0.0 + Authors: [] + Owners: [] + RootNamespace: CSharpBasics + Dependencies: null +AssetFolders: + - Path: !dir ../Assets + - Path: !dir Effects +ResourceFolders: + - !dir ../Resources +OutputGroupDirectories: {} +ExplicitFolders: [] +Bundles: [] +TemplateFolders: [] +RootAssets: + - 0a019d87-d943-4543-9b51-a4016200dff9:Scenes/Basics/Properties + - 137dcdfa-bfc8-4805-92a3-dd48f2b79061:Scenes/Basics/DeltaTime + - 328aea72-1405-48be-bf32-2363a61870f7:Scenes/Basics/Virtual buttons + - 52a557d6-1f2c-4983-a0bb-2c12d562d3bf:Scenes/Basics/Cloning entities + - 678cb64e-9dcd-44ea-8cdd-947667bbcc5a:Scenes/Basics/Adding a component + - 79af0b55-a70f-4c7a-8f5b-967d55661736:XenkoUILibrary + - 90c8a632-2df9-4335-8f09-24cb13e131b6:Scenes/Basics/Getting the entity + - 9e1b53ff-dc0c-410a-8972-14f949f83a01:Scenes/Basics/Child entities + - ba8ed57d-74b9-4121-baf0-6a92463b600a:Scenes/Basics/Getting a component + - c00aec52-d6b8-4eab-80c2-460ac8109da6:Scenes/Basics/Mouse input + - d8597439-175b-42b3-81ca-d6553655e38f:Scenes/Basics/Removing entities + - dbb3b809-4ff0-41da-b125-78a5ea1ec89c:Scenes/Basics/TransformPosition + - ee2eb459-7847-42b5-bd69-fc43a6625fd5:Scenes/Basics/Keyboard input diff --git a/samples/UI/GameMenu/Assets/Shared/GameSettings.xkgamesettings b/samples/UI/GameMenu/Assets/Shared/GameSettings.xkgamesettings index 9369bb979d..31ed6cab04 100644 --- a/samples/UI/GameMenu/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/UI/GameMenu/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: e6a60237-e287-40d1-acb1-4bce2273fd45 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 49fe9241-18f3-478f-8f71-e87f87346da2:SplashScene GraphicsCompositor: 733c24da-ac75-4fce-b148-d6d2d3753157:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/UI/GameMenu/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/UI/GameMenu/Assets/Shared/GraphicsCompositor.xkgfxcomp index e649ed7e7d..fa95f3e29f 100644 --- a/samples/UI/GameMenu/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/UI/GameMenu/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 733c24da-ac75-4fce-b148-d6d2d3753157 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -24,46 +24,46 @@ RenderStages: EffectSlotName: ShadowMapCaster SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -91,19 +91,21 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 2e15aa15-7a9f-44e6-8ad7-1bc44847d8e5 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera*: ref!! 33a02921-a3f4-4baa-91b2-b557748dca5e - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: e1b3f028-e125-4ffb-9b63-0942d78251d1 Children: ce29e81d8821fbf2a3d2264868e9921c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 2e15aa15-7a9f-44e6-8ad7-1bc44847d8e5 + 6efe857054d875d04a6788c9b40428bc: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 2e15aa15-7a9f-44e6-8ad7-1bc44847d8e5 + RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 BlockPositions: {} diff --git a/samples/UI/GameMenu/Assets/Shared/SplashScene.xkscene b/samples/UI/GameMenu/Assets/Shared/SplashScene.xkscene index 942e216af8..d28e564027 100644 --- a/samples/UI/GameMenu/Assets/Shared/SplashScene.xkscene +++ b/samples/UI/GameMenu/Assets/Shared/SplashScene.xkscene @@ -19,14 +19,15 @@ Hierarchy: Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} Scale: {X: 1.0, Y: 1.0, Z: 1.0} Children: {} - ac2b7de7553bbc4ba5bbd9c3ba319cc1: !GameMenu.SplashScript,GameMenu.Game - Id: e77d2bac-3b55-4bbc-a5bb-d9c3ba319cc1 f6b6b1a8d48a8045bd940370455f3450: !UIComponent Id: a8b1b6f6-8ad4-4580-bd94-0370455f3450 Page: 62c493c2-13ea-4fac-bbaf-578afafac104:SplashUI Resolution: {X: 640.0, Y: 1136.0, Z: 1000.0} Size: {X: 1.0, Y: 1.0, Z: 1.0} ResolutionStretch: FixedWidthFixedHeight + fd54344b6ac8b2ed232d62dc08820239: !GameMenu.SplashScript,GameMenu.Game + Id: c7c92d4b-2c04-446f-b8c5-59e9d2b989cd + NextSceneUrl: 9294c606-6173-4215-a8dc-0d5043d68333:MainScene - Entity: Id: a604bc4e-f7f3-42c1-b98f-eeea9e10b54c Name: Camera diff --git a/samples/UI/GameMenu/GameMenu.Game/GameMenu.Game.csproj b/samples/UI/GameMenu/GameMenu.Game/GameMenu.Game.csproj index fc49ca967b..b179442729 100644 --- a/samples/UI/GameMenu/GameMenu.Game/GameMenu.Game.csproj +++ b/samples/UI/GameMenu/GameMenu.Game/GameMenu.Game.csproj @@ -4,10 +4,10 @@ GameMenu - - - - - + + + + + \ No newline at end of file diff --git a/samples/UI/GameMenu/GameMenu.Game/SplashScript.cs b/samples/UI/GameMenu/GameMenu.Game/SplashScript.cs index 7bfdd9e0c3..779e6df9cf 100644 --- a/samples/UI/GameMenu/GameMenu.Game/SplashScript.cs +++ b/samples/UI/GameMenu/GameMenu.Game/SplashScript.cs @@ -1,6 +1,7 @@ // Copyright (c) Xenko contributors (https://xenko.com) 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.Linq; +using Xenko.Core.Serialization; using Xenko.Engine; using Xenko.Input; @@ -8,6 +9,8 @@ namespace GameMenu { public class SplashScript : UISceneBase { + public UrlReference NextSceneUrl { get; set; } + protected override void LoadScene() { // Allow user to resize the window with the mouse. @@ -19,7 +22,7 @@ protected override void UpdateScene() if (Input.PointerEvents.Any(e => e.EventType == PointerEventType.Pressed)) { // Next scene - SceneSystem.SceneInstance.RootScene = Content.Load("MainScene"); + SceneSystem.SceneInstance.RootScene = Content.Load(NextSceneUrl); Cancel(); } } diff --git a/samples/UI/GameMenu/GameMenu.Windows/Resources/Icon.ico b/samples/UI/GameMenu/GameMenu.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/UI/GameMenu/GameMenu.Windows/Resources/Icon.ico and b/samples/UI/GameMenu/GameMenu.Windows/Resources/Icon.ico differ diff --git a/samples/UI/UIElementLink/Assets/Shared/BillboardedScreen.xkscene b/samples/UI/UIElementLink/Assets/Shared/BillboardedScreen.xkscene index 1eeafff442..60a95ed5e7 100644 --- a/samples/UI/UIElementLink/Assets/Shared/BillboardedScreen.xkscene +++ b/samples/UI/UIElementLink/Assets/Shared/BillboardedScreen.xkscene @@ -63,8 +63,8 @@ Hierarchy: Size: Large DepthRange: {} PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {} - ComputeTransmittance: false BiasParameters: {} + ComputeTransmittance: false - Entity: Id: 820d34a8-2971-4381-abfa-2965d94ec672 Name: Splash @@ -78,7 +78,7 @@ Hierarchy: a7872780eefdc542b4880d3c4b46f129: !UIElementLink.SplashScript,UIElementLink.Game Id: 802787a7-fdee-42c5-b488-0d3c4b46f129 SplashScreenImages: e8e2f386-e79e-4875-993f-8bdaf0ef72c5:SplashScreenImages - NextScene: FullScreen + NextScene: 67a9eb30-7686-4b8c-89c3-19f12755774e:FullScreen f6b6b1a8d48a8045bd940370455f3450: !UIComponent Id: a8b1b6f6-8ad4-4580-bd94-0370455f3450 Page: null @@ -153,8 +153,8 @@ Hierarchy: InheritRotation: true Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} InheritScale: true - ScaleUniform: 1.0 Scale: {X: 1.0, Y: 1.0, Z: 1.0} + ScaleUniform: 1.0 SeedOffset: 0 DisplayParticlePosition: false DisplayParticleRotation: true diff --git a/samples/UI/UIElementLink/Assets/Shared/EffectCompileLog.xkeffectlog b/samples/UI/UIElementLink/Assets/Shared/EffectCompileLog.xkeffectlog index 3a7894350f..bc672dab47 100644 --- a/samples/UI/UIElementLink/Assets/Shared/EffectCompileLog.xkeffectlog +++ b/samples/UI/UIElementLink/Assets/Shared/EffectCompileLog.xkeffectlog @@ -4,20 +4,23 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -26,12 +29,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -48,20 +54,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -70,12 +79,15 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -102,20 +114,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -123,7 +138,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -131,7 +147,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -139,7 +156,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -148,7 +166,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -160,13 +179,16 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionBlinnPhong Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderClassSource ClassName: LightClusteredPointGroup @@ -187,20 +209,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceNormalMap + - !ShaderClassSource + ClassName: MaterialSurfaceNormalMap GenericArguments: [false, true] Compositions: normalMap: !ShaderClassSource @@ -208,7 +233,8 @@ UsedParameters: GenericArguments: [Material.NormalMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale.i1, Material.TextureOffset.i1] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecular, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -216,7 +242,8 @@ UsedParameters: GenericArguments: [Material.SpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matSpecularIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -224,7 +251,8 @@ UsedParameters: GenericArguments: [Material.SpecularIntensityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -233,7 +261,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: environmentFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetEnvironmentGGXLUT @@ -245,13 +274,16 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionBlinnPhong Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Material.HasNormalMap: true Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [8] - !ShaderClassSource ClassName: LightClusteredPointGroup diff --git a/samples/UI/UIElementLink/Assets/Shared/FullScreen.xkscene b/samples/UI/UIElementLink/Assets/Shared/FullScreen.xkscene index d88bad5327..4ff3cb52a0 100644 --- a/samples/UI/UIElementLink/Assets/Shared/FullScreen.xkscene +++ b/samples/UI/UIElementLink/Assets/Shared/FullScreen.xkscene @@ -63,8 +63,8 @@ Hierarchy: Size: Large DepthRange: {} PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {} - ComputeTransmittance: false BiasParameters: {} + ComputeTransmittance: false - Entity: Id: 820d34a8-2971-4381-abfa-2965d94ec672 Name: Splash @@ -78,7 +78,7 @@ Hierarchy: a7872780eefdc542b4880d3c4b46f129: !UIElementLink.SplashScript,UIElementLink.Game Id: 802787a7-fdee-42c5-b488-0d3c4b46f129 SplashScreenImages: e8e2f386-e79e-4875-993f-8bdaf0ef72c5:SplashScreenImages - NextScene: TiltedScreen + NextScene: 0bbdf1ab-bb41-46c5-86ef-4f2635d65c6a:TiltedScreen f6b6b1a8d48a8045bd940370455f3450: !UIComponent Id: a8b1b6f6-8ad4-4580-bd94-0370455f3450 Page: null @@ -152,8 +152,8 @@ Hierarchy: InheritRotation: true Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} InheritScale: true - ScaleUniform: 1.0 Scale: {X: 1.0, Y: 1.0, Z: 1.0} + ScaleUniform: 1.0 SeedOffset: 0 DisplayParticlePosition: false DisplayParticleRotation: true diff --git a/samples/UI/UIElementLink/Assets/Shared/GameSettings.xkgamesettings b/samples/UI/UIElementLink/Assets/Shared/GameSettings.xkgamesettings index 103b320e58..05db9668bb 100644 --- a/samples/UI/UIElementLink/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/UI/UIElementLink/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: d60dae7b-9e44-44ad-bbe6-1e790cbc9f83 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: 67a9eb30-7686-4b8c-89c3-19f12755774e:FullScreen GraphicsCompositor: e571b655-a83d-4c90-b560-d3b182426fc7:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/UI/UIElementLink/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/UI/UIElementLink/Assets/Shared/GraphicsCompositor.xkgfxcomp index d2690cdd25..1c135a4c50 100644 --- a/samples/UI/UIElementLink/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/UI/UIElementLink/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: e571b655-a83d-4c90-b560-d3b182426fc7 -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 823a81bf-bac0-4552-9267-aeed499c40df:DefaultGraphicsCompositorLevel10 Cameras: @@ -39,73 +39,73 @@ RenderStages: EffectSlotName: GBuffer SortMode: !FrontToBackSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster - b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + b60663d7cb46417a94341a39c3bc1a12: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 7d180630-a9ea-4c6c-89fa-223d135e9bf3 EffectName: XenkoForwardShadingEffect.ShadowMapCasterParaboloid - f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + f5533b1249b942df8a8aba311cd79532: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! 4b2b17e0-1517-46c3-9d96-594d1faf8b97 EffectName: XenkoForwardShadingEffect.ShadowMapCasterCubeMap - 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 106341b76db9fcda6a033dad16aa708b: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! d27953f7-41f7-4e8c-ae43-ed81f4f4d1db EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ff51170a7d1a4761b73ef6a5c9f0cba2: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 7d180630-a9ea-4c6c-89fa-223d135e9bf3 DepthClipping: true - ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + ae4336b0a9514e8488e8e0ccbcef25f4: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! 4b2b17e0-1517-46c3-9d96-594d1faf8b97 DepthClipping: true RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 83fea7526ebe4893a5bad953d0502bfd: !Xenko.Rendering.Shadows.ShadowCasterRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Engine {} - 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} - 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Engine {} - ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Engine + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + facdcd5b543cf1c6bdf2138aab6cc473: !Xenko.Rendering.Lights.LightClusteredPointSpotGroupRenderer,Xenko.Rendering {} + 79582329a9cf466e960f8920f579de9b: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + cf0c6bd4198b4cc4aaaab5b54870bdfd: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} + 451af18f3f5c4187cf3fe5f33feb46b1: !Xenko.Rendering.LightProbes.LightProbeRenderer,Xenko.Rendering {} + ShadowMapRenderer: !Xenko.Rendering.Shadows.ShadowMapRenderer,Xenko.Rendering Renderers: - 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Engine + 7c3d3d4c86834c3551bacde2527b3836: !Xenko.Rendering.Shadows.LightDirectionalShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Engine + 1c204b09435636256a3fcfd6f9ddb347: !Xenko.Rendering.Shadows.LightSpotShadowMapRenderer,Xenko.Rendering ShadowCasterRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e - 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Engine + 7c8c69ce27034b4c8bbcab0bcdfe954b: !Xenko.Rendering.Shadows.LightPointShadowMapRendererParaboloid,Xenko.Rendering ShadowCasterRenderStage: ref!! 7d180630-a9ea-4c6c-89fa-223d135e9bf3 - d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Engine + d59ef45dd99e49d3af3887763d153aa7: !Xenko.Rendering.Shadows.LightPointShadowMapRendererCubeMap,Xenko.Rendering ShadowCasterRenderStage: ref!! 4b2b17e0-1517-46c3-9d96-594d1faf8b97 - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -133,6 +133,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} d5b2e71c088247e21556decdce138d96: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine @@ -152,6 +153,7 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} 34ecb9b2633eacfc439ba8744fe05102: !PostProcessingEffects @@ -161,7 +163,6 @@ SharedRenderers: LocalReflections: Enabled: false ResolvePassResolution: Full - DebugMode: None DepthResolution: Half DepthOfField: Enabled: false @@ -185,17 +186,17 @@ SharedRenderers: Enabled: false Color: {R: 0.0, G: 0.0, B: 0.0} Antialiasing: !FXAAEffect {} - ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + ee80a20a9bd99f2d70711114e15fe7ca: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: dae8d18d-399f-4dd6-b868-311692e60675 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! 39e59472-e064-4463-9097-403dadbc041e - Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: 82568e46-92e7-421a-8dca-114a74e0cd69 Children: d39c5ddbf8b7d5ca02bafb6496b1cc3c: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! dae8d18d-399f-4dd6-b868-311692e60675 + 01d338078e9b21121ead0868932613dd: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! dae8d18d-399f-4dd6-b868-311692e60675 RenderMask: All SingleView: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! b41f7807-0a56-4c00-ad86-fdf2d8d39d74 Editor: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 diff --git a/samples/UI/UIElementLink/Assets/Shared/TiltedScreen.xkscene b/samples/UI/UIElementLink/Assets/Shared/TiltedScreen.xkscene index c9eb58bc57..1675b5fed3 100644 --- a/samples/UI/UIElementLink/Assets/Shared/TiltedScreen.xkscene +++ b/samples/UI/UIElementLink/Assets/Shared/TiltedScreen.xkscene @@ -63,8 +63,8 @@ Hierarchy: Size: Large DepthRange: {} PartitionMode: !LightDirectionalShadowMap.PartitionLogarithmic {} - ComputeTransmittance: false BiasParameters: {} + ComputeTransmittance: false - Entity: Id: 820d34a8-2971-4381-abfa-2965d94ec672 Name: Splash @@ -78,7 +78,7 @@ Hierarchy: a7872780eefdc542b4880d3c4b46f129: !UIElementLink.SplashScript,UIElementLink.Game Id: 802787a7-fdee-42c5-b488-0d3c4b46f129 SplashScreenImages: e8e2f386-e79e-4875-993f-8bdaf0ef72c5:SplashScreenImages - NextScene: BillboardedScreen + NextScene: a140a866-a7b3-4c89-8953-5f7adc428c0a:BillboardedScreen f6b6b1a8d48a8045bd940370455f3450: !UIComponent Id: a8b1b6f6-8ad4-4580-bd94-0370455f3450 Page: null @@ -154,8 +154,8 @@ Hierarchy: InheritRotation: true Rotation: {X: 0.0, Y: 0.0, Z: 0.0, W: 1.0} InheritScale: true - ScaleUniform: 1.0 Scale: {X: 1.0, Y: 1.0, Z: 1.0} + ScaleUniform: 1.0 SeedOffset: 0 DisplayParticlePosition: false DisplayParticleRotation: true diff --git a/samples/UI/UIElementLink/UIElementLink.Game/SplashScript.cs b/samples/UI/UIElementLink/UIElementLink.Game/SplashScript.cs index 2e61b128d4..7ad4767dac 100644 --- a/samples/UI/UIElementLink/UIElementLink.Game/SplashScript.cs +++ b/samples/UI/UIElementLink/UIElementLink.Game/SplashScript.cs @@ -3,6 +3,7 @@ using System; using Xenko.Core.Extensions; using Xenko.Core.Mathematics; +using Xenko.Core.Serialization; using Xenko.Engine; using Xenko.Graphics; using Xenko.Rendering.Sprites; @@ -16,7 +17,7 @@ public class SplashScript : UISceneBase { public SpriteSheet SplashScreenImages; - public string NextScene; + public UrlReference NextScene; private Button followedButton; @@ -24,10 +25,10 @@ public class SplashScript : UISceneBase private void LoadNextScene() { - if (NextScene.IsNullOrEmpty()) + if (NextScene?.IsEmpty ?? true) return; - SceneSystem.SceneInstance.RootScene = Content.Load(NextScene); + SceneSystem.SceneInstance.RootScene = Content.Load(NextScene); Cancel(); } diff --git a/samples/UI/UIElementLink/UIElementLink.Game/UIElementLink.Game.csproj b/samples/UI/UIElementLink/UIElementLink.Game/UIElementLink.Game.csproj index d4c0de7fd2..8620fee23f 100644 --- a/samples/UI/UIElementLink/UIElementLink.Game/UIElementLink.Game.csproj +++ b/samples/UI/UIElementLink/UIElementLink.Game/UIElementLink.Game.csproj @@ -4,10 +4,10 @@ UIElementLink - - - - - + + + + + \ No newline at end of file diff --git a/samples/UI/UIElementLink/UIElementLink.Windows/Resources/Icon.ico b/samples/UI/UIElementLink/UIElementLink.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/UI/UIElementLink/UIElementLink.Windows/Resources/Icon.ico and b/samples/UI/UIElementLink/UIElementLink.Windows/Resources/Icon.ico differ diff --git a/samples/UI/UIParticles/Assets/Shared/GameSettings.xkgamesettings b/samples/UI/UIParticles/Assets/Shared/GameSettings.xkgamesettings index 25db182fc4..614f571f6d 100644 --- a/samples/UI/UIParticles/Assets/Shared/GameSettings.xkgamesettings +++ b/samples/UI/UIParticles/Assets/Shared/GameSettings.xkgamesettings @@ -1,6 +1,6 @@ !GameSettingsAsset Id: ee826f6c-55f8-4082-b5bd-9fc206888a73 -SerializedVersion: {Xenko: 2.1.0.3} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] DefaultScene: a8ddac34-2bf1-452c-bdf5-47e2d633e83a:SplashScene GraphicsCompositor: 028b9394-b500-4383-ad72-f4b813eaeccc:GraphicsCompositor @@ -18,7 +18,7 @@ Defaults: TextureQuality: Fast - !Xenko.Audio.AudioEngineSettings,Xenko.Audio HrtfSupport: false - - !Xenko.Streaming.StreamingSettings,Xenko.Engine + - !Xenko.Streaming.StreamingSettings,Xenko.Rendering ManagerUpdatesInterval: 0:00:00:00.0330000 ResourceLiveTimeout: 0:00:00:08.0000000 Overrides: [] diff --git a/samples/UI/UIParticles/Assets/Shared/GraphicsCompositor.xkgfxcomp b/samples/UI/UIParticles/Assets/Shared/GraphicsCompositor.xkgfxcomp index 6970665ecf..f77464bdab 100644 --- a/samples/UI/UIParticles/Assets/Shared/GraphicsCompositor.xkgfxcomp +++ b/samples/UI/UIParticles/Assets/Shared/GraphicsCompositor.xkgfxcomp @@ -1,6 +1,6 @@ !GraphicsCompositorAsset Id: 028b9394-b500-4383-ad72-f4b813eaeccc -SerializedVersion: {Xenko: 2.1.0.2} +SerializedVersion: {Xenko: 3.1.0.1} Tags: [] Archetype: 9af53371-51ba-49fc-b420-ee7874892e75:DefaultGraphicsCompositorLevel9 Cameras: @@ -29,46 +29,46 @@ RenderStages: EffectSlotName: Main SortMode: !BackToFrontSortMode {} RenderFeatures: - d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Engine + d8fb80b0e7995140a46bca8dc36ee8a2: !Xenko.Rendering.MeshRenderFeature,Xenko.Rendering RenderStageSelectors: - 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Engine + 44cf4a95ef82544e9ce3c6507d5569a9: !Xenko.Rendering.MeshTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: XenkoForwardShadingEffect - 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Engine + 6f7224048750e7260ea87c444f74b32c: !Xenko.Rendering.Shadows.ShadowMapRenderStageSelector,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e EffectName: XenkoForwardShadingEffect.ShadowMapCaster PipelineProcessors: - d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Engine + d70f5aee0616e4ab25081ceaf643290c: !Xenko.Rendering.MeshPipelineProcessor,Xenko.Rendering TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 - 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Engine + 26c899b17f88c21ab13bf60a7220ccd1: !Xenko.Rendering.ShadowMeshPipelineProcessor,Xenko.Rendering ShadowMapRenderStage: ref!! c0524e55-4061-464d-84dd-7c4c70f70e0e RenderFeatures: - 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Engine {} - 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Engine {} - f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Engine {} - 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Engine + 86b959cbdf51a1438d4973177c77c627: !Xenko.Rendering.TransformRenderFeature,Xenko.Rendering {} + 8e0351fee9883922648a11016224b195: !Xenko.Rendering.SkinningRenderFeature,Xenko.Rendering {} + f5a2017030ba4b28784e804807ce7628: !Xenko.Rendering.Materials.MaterialRenderFeature,Xenko.Rendering {} + 65743b4380f4cc43b2b4bdc23cd0c07c: !Xenko.Rendering.Lights.ForwardLightingRenderFeature,Xenko.Rendering LightRenderers: - 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Engine {} - 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Engine {} - 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Engine {} - 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Engine {} - 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Engine {} + 7ac2775468f53c4399b2f3f6357c85c9: !Xenko.Rendering.Lights.LightAmbientRenderer,Xenko.Rendering {} + 7b68f9cd17404a4ba9e5f7df72e3b48d: !Xenko.Rendering.Lights.LightDirectionalGroupRenderer,Xenko.Rendering {} + 411fdcfb9fc388449a0443173dfa3f27: !Xenko.Rendering.Lights.LightSkyboxRenderer,Xenko.Rendering {} + 5890e37af0e4bbc2cfdc1de648ff07d4: !Xenko.Rendering.Lights.LightPointGroupRenderer,Xenko.Rendering {} + 2eda85523d76b3f9e1e7d3e55aab5280: !Xenko.Rendering.Lights.LightSpotGroupRenderer,Xenko.Rendering {} ShadowMapRenderer: null - 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Engine + 28e9bf54a5adbe063f59fb17acb2723e: !Xenko.Rendering.Sprites.SpriteRenderFeature,Xenko.Rendering RenderStageSelectors: - d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Engine + d74665cff080638a2439c4422e542d85: !Xenko.Rendering.Sprites.SpriteTransparentRenderStageSelector,Xenko.Rendering OpaqueRenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 TransparentRenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test - 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Engine + 60780391e205770513fdd53e07279a01: !Xenko.Rendering.Background.BackgroundRenderFeature,Xenko.Rendering RenderStageSelectors: - 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 11c8b8ccb522e3cd1dd6688016062a6d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 50671147-a5c1-49d4-b4ad-3625f71439b3 EffectName: Test 93933ad00d0c357d4915ad462cbfd04c: !Xenko.Rendering.UI.UIRenderFeature,Xenko.UI RenderStageSelectors: - 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Engine + 14a071694411235038a102ac3794bb4d: !Xenko.Rendering.SimpleGroupToRenderStageSelector,Xenko.Rendering RenderStage: ref!! 0fa30591-02ee-486d-9347-2b6aee83d035 EffectName: Test 9013eab3ea0ef6c98bf133b86c173d45: !Xenko.Particles.Rendering.ParticleEmitterRenderFeature,Xenko.Particles @@ -97,35 +97,37 @@ SharedRenderers: Enabled: false RequiredApis: {} Overlays: {} + SubsurfaceScatteringBlurEffect: null MSAALevel: None MSAAResolver: {} - b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine + b83eea5d6052fff4db0c8d7efa7568f6: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering Id: 77660a58-73b5-428e-bce5-c3407a62de31 DebugRenderStages: {} Game: !Xenko.Rendering.Compositing.SceneCameraRenderer,Xenko.Engine Id: 76fe87cf-f574-4ad6-85b8-e9a9586be0e2 Camera: ref!! a070cf65-a750-4060-bcc0-e3303fca30b2 - Child*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine + Child*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: cac20e52-d7fa-43d5-b4dc-e7038d008a9e Children: ce29e81d8821fbf2a3d2264868e9921c*: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 6efe857054d875d04a6788c9b40428bc*: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Engine + 6efe857054d875d04a6788c9b40428bc*: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Rendering Id: 70784831-182a-490d-8fe4-b9ece8b7dbcf RenderStage: ref!! 1131b093-3589-47d1-bb60-62166a6647a3 - 5c3efec9389bbcda4a9ec8113c233439*: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Engine ref!! 77660a58-73b5-428e-bce5-c3407a62de31 + 5c3efec9389bbcda4a9ec8113c233439*: !Xenko.Rendering.Compositing.DebugRenderer,Xenko.Rendering ref!! 77660a58-73b5-428e-bce5-c3407a62de31 + RenderMask: All SingleView: null -Editor*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Engine +Editor*: !Xenko.Rendering.Compositing.SceneRendererCollection,Xenko.Rendering Id: c3f5d39a-57e9-4cd8-9895-ca0e78582b8a Children: - 32f300f15ced1149d18f0acf207b3560: !Xenko.Rendering.Compositing.ClearRenderer,Xenko.Engine + 32f300f15ced1149d18f0acf207b3560: !Xenko.Rendering.Compositing.ClearRenderer,Xenko.Rendering Id: 46f07118-5d51-4110-ba49-b39376d85df4 Color: {R: 0.40491876, G: 0.411895424, B: 0.43775, A: 1.0} 2ca9e8847ef4a97fe3a8e86859b08ab9: !Xenko.Rendering.Compositing.ForwardRenderer,Xenko.Engine ref!! 4d409a59-d3c6-4b55-a5c7-4bd9b8886ea5 - 7d840e9deb2a194b8db6fe5c50728ced: !Xenko.Rendering.Compositing.ClearRenderer,Xenko.Engine + 7d840e9deb2a194b8db6fe5c50728ced: !Xenko.Rendering.Compositing.ClearRenderer,Xenko.Rendering Id: 82a34f6e-44fa-4956-8b0a-2da0e38139cd ClearFlags: DepthOnly Color: {R: 0.40491876, G: 0.411895424, B: 0.43775, A: 1.0} - b9a5c3cb9707ce953871585234ce7822: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Engine + b9a5c3cb9707ce953871585234ce7822: !Xenko.Rendering.Compositing.SingleStageRenderer,Xenko.Rendering Id: 3e645954-bb86-47a8-9c6a-3a47bf1dd560 RenderStage: ref!! 1131b093-3589-47d1-bb60-62166a6647a3 BlockPositions: {} diff --git a/samples/UI/UIParticles/UIParticles.Game/UIParticles.Game.csproj b/samples/UI/UIParticles/UIParticles.Game/UIParticles.Game.csproj index e0ef5b3b08..3dbd7696f5 100644 --- a/samples/UI/UIParticles/UIParticles.Game/UIParticles.Game.csproj +++ b/samples/UI/UIParticles/UIParticles.Game/UIParticles.Game.csproj @@ -4,10 +4,10 @@ UIParticles - - - - - + + + + + \ No newline at end of file diff --git a/samples/UI/UIParticles/UIParticles.Windows/Resources/Icon.ico b/samples/UI/UIParticles/UIParticles.Windows/Resources/Icon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/samples/UI/UIParticles/UIParticles.Windows/Resources/Icon.ico and b/samples/UI/UIParticles/UIParticles.Windows/Resources/Icon.ico differ diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Common/BuildThreadMonitor.cs b/sources/assets/Xenko.Core.Assets.CompilerApp/BuildThreadMonitor.cs similarity index 97% rename from sources/buildengine/Xenko.Core.BuildEngine.Common/BuildThreadMonitor.cs rename to sources/assets/Xenko.Core.Assets.CompilerApp/BuildThreadMonitor.cs index db23a550b7..53be58487b 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine.Common/BuildThreadMonitor.cs +++ b/sources/assets/Xenko.Core.Assets.CompilerApp/BuildThreadMonitor.cs @@ -9,10 +9,11 @@ using Xenko.Core.Diagnostics; using Xenko.Core.MicroThreading; using System.ServiceModel; +using Xenko.Core.BuildEngine; -namespace Xenko.Core.BuildEngine +namespace Xenko.Core.Assets.CompilerApp { - internal class BuildThreadMonitor + internal class BuildThreadMonitor : IBuildThreadMonitor { /// /// This class stores informations relative to a build step, used to build data to send to the clients. It is immutable. @@ -69,7 +70,7 @@ public override string ToString() private Thread monitorThread; - internal BuildThreadMonitor(Scheduler scheduler, Guid builderId, string monitorPipeName = Builder.MonitorPipeName) + public BuildThreadMonitor(Scheduler scheduler, Guid builderId, string monitorPipeName = Builder.MonitorPipeName) { this.monitorPipeName = monitorPipeName; this.builderId = builderId; @@ -81,7 +82,7 @@ internal BuildThreadMonitor(Scheduler scheduler, Guid builderId, string monitorP stopWatch.Start(); } - internal void RegisterThread(int threadId) + public void RegisterThread(int threadId) { lock (threadExecutionIntervals) { @@ -89,7 +90,7 @@ internal void RegisterThread(int threadId) } } - internal void RegisterBuildStep(BuildStep buildStep, TimestampLocalLogger logger) + public void RegisterBuildStep(BuildStep buildStep, TimestampLocalLogger logger) { lock (buildStepInfosToSend) { diff --git a/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilder.cs b/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilder.cs index 1470a5adc5..7cf3ffcfdd 100644 --- a/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilder.cs +++ b/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilder.cs @@ -80,6 +80,7 @@ private BuildResultCode BuildMaster() AutoCompileProjects = !builderOptions.DisableAutoCompileProjects, ExtraCompileProperties = builderOptions.ExtraCompileProperties, RemoveUnloadableObjects = true, + RegisterPackageAssemblies = true, BuildConfiguration = builderOptions.ProjectConfiguration, }; @@ -113,7 +114,8 @@ private BuildResultCode BuildMaster() { Platform = builderOptions.Platform, CompilationContext = typeof(AssetCompilationContext), - BuildConfiguration = builderOptions.ProjectConfiguration + BuildConfiguration = builderOptions.ProjectConfiguration, + Package = package, }; // Command line properties @@ -364,14 +366,6 @@ public async Task TryExecuteRemote(Command command, BuilderContext var address = "net.pipe://localhost/" + Guid.NewGuid(); var arguments = $"--slave=\"{address}\" --build-path=\"{builderOptions.BuildDirectory}\""; - using (var debugger = VisualStudioDebugger.GetAttached()) - { - if (debugger != null) - { - arguments += $" --reattach-debugger={debugger.ProcessId}"; - } - } - // Start WCF pipe for communication with process var processBuilderRemote = new ProcessBuilderRemote(assemblyContainer, commandContext, command); var host = new ServiceHost(processBuilderRemote); diff --git a/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilderApp.cs b/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilderApp.cs index 78e78aa653..6ae42f7250 100644 --- a/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilderApp.cs +++ b/sources/assets/Xenko.Core.Assets.CompilerApp/PackageBuilderApp.cs @@ -150,22 +150,6 @@ public int Run(string[] args) } } }, - { - "reattach-debugger=", "Reattach to a Visual Studio debugger", v => - { - int debuggerProcessId; - if (!string.IsNullOrEmpty(v) && int.TryParse(v, out debuggerProcessId)) - { - if (!Debugger.IsAttached) - { - using (var debugger = VisualStudioDebugger.GetByProcess(debuggerProcessId)) - { - debugger?.Attach(); - } - } - } - } - }, }; TextWriterLogListener fileLogListener = null; @@ -194,7 +178,7 @@ public int Run(string[] args) } else { - globalLoggerOnGlobalMessageLogged = new ConsoleLogListener { LogMode = ConsoleLogMode.Always }; + globalLoggerOnGlobalMessageLogged = new ConsoleLogListener(); } globalLoggerOnGlobalMessageLogged.TextFormatter = FormatLog; GlobalLogger.GlobalMessageLogged += globalLoggerOnGlobalMessageLogged; @@ -263,6 +247,69 @@ public int Run(string[] args) options.Logger.Info("BuildEngine arguments: " + string.Join(" ", args)); options.Logger.Info("Starting builder."); + + try + { + var baseDirectory = Path.Combine(options.BuildDirectory, @"../../../../../"); + var changeFile = baseDirectory + "/files_changed"; + var buildFile = baseDirectory + "/files_built"; + var skipFile = baseDirectory + "/always_build"; + long files_changed_ticks = 0, files_built_ticks = 0; + string[] buildlines = null; + string platform = options.Platform.ToString() + "-" + options.ProjectConfiguration; + + if (File.Exists(changeFile)) + long.TryParse(File.ReadAllText(changeFile), out files_changed_ticks); + + if (File.Exists(buildFile)) + { + buildlines = File.ReadAllLines(buildFile); + for (int i = 0; i < buildlines.Length; i += 2) + { + if (buildlines[i] == platform) + { + long.TryParse(buildlines[i + 1], out files_built_ticks); + // also update with now time + buildlines[i + 1] = System.DateTime.Now.Ticks.ToString(); + } + } + } + + if (File.Exists(skipFile)) + { + options.Logger.Info("Found always_build, so always building assets."); + } + else if (Process.GetProcessesByName("Focus.GameStudio").Length == 0) + { + options.Logger.Warning("Focus.GameStudio does not appear to be running, so the AssetCompiler will always rebuild assets."); + } + else if (files_changed_ticks > 0 && files_built_ticks > 0 && files_built_ticks > files_changed_ticks) + { + options.Logger.Info("All Assets/ and Resources/ appear up date for " + platform + ", so skipping recompilation. If this is a mistake, delete files_changed and files_built in the root project directory. If you want to always build assets, make a file called always_build in the root project directory."); + return 0; + } + + // if there was no changefile, do it now + if (File.Exists(changeFile) == false) + { + File.WriteAllText(changeFile, System.DateTime.Now.Ticks.ToString()); + } + + // update file with changes + if (File.Exists(buildFile) == false) + { + File.WriteAllText(buildFile, platform + "\n" + System.DateTime.Now.Ticks.ToString()); + } + else + { + File.WriteAllLines(buildFile, buildlines); + if (files_built_ticks <= 0) File.AppendAllText(buildFile, platform + "\n" + System.DateTime.Now.Ticks.ToString()); + } + } + catch (Exception) + { + options.Logger.Warning("Error reading/writing files_changed and/or files_built to see if we can skip asset compilation. Reverting to building them."); + } } else { diff --git a/sources/assets/Xenko.Core.Assets.CompilerApp/Xenko.Core.Assets.CompilerApp.csproj b/sources/assets/Xenko.Core.Assets.CompilerApp/Xenko.Core.Assets.CompilerApp.csproj index 1c0e456d99..4844bafb9f 100644 --- a/sources/assets/Xenko.Core.Assets.CompilerApp/Xenko.Core.Assets.CompilerApp.csproj +++ b/sources/assets/Xenko.Core.Assets.CompilerApp/Xenko.Core.Assets.CompilerApp.csproj @@ -9,7 +9,7 @@ false - + 8.0.30703 2.0 @@ -25,8 +25,13 @@ x64 - - + + + + NU1605 + + + @@ -37,6 +42,16 @@ + + + %(RecursiveDir)%(Filename)%(Extension) + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + %(RecursiveDir)%(Filename)%(Extension) + + @@ -44,10 +59,9 @@ - - + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.config diff --git a/sources/assets/Xenko.Core.Assets.CompilerApp/app.config b/sources/assets/Xenko.Core.Assets.CompilerApp/app.config index f19c6a0677..d1c816ddf6 100644 --- a/sources/assets/Xenko.Core.Assets.CompilerApp/app.config +++ b/sources/assets/Xenko.Core.Assets.CompilerApp/app.config @@ -2,25 +2,21 @@ + true - - - - - diff --git a/sources/assets/Xenko.Core.Assets.CompilerApp/build/Xenko.Core.Assets.CompilerApp.targets b/sources/assets/Xenko.Core.Assets.CompilerApp/build/Xenko.Core.Assets.CompilerApp.targets index 15b3dd4e8f..0639e6f234 100644 --- a/sources/assets/Xenko.Core.Assets.CompilerApp/build/Xenko.Core.Assets.CompilerApp.targets +++ b/sources/assets/Xenko.Core.Assets.CompilerApp/build/Xenko.Core.Assets.CompilerApp.targets @@ -45,8 +45,8 @@ $(TargetDir)data - $(MSBuildThisFileDirectory)..\lib\net472\Xenko.Core.Assets.CompilerApp.exe - $(MSBuildThisFileDirectory)..\bin\$(Configuration)\net472\Xenko.Core.Assets.CompilerApp.exe + $(MSBuildThisFileDirectory)..\lib\net48\Xenko.Core.Assets.CompilerApp.exe + $(MSBuildThisFileDirectory)..\bin\$(Configuration)\net48\Xenko.Core.Assets.CompilerApp.exe @@ -148,4 +148,16 @@ + + + + + + + + diff --git a/sources/assets/Xenko.Core.Assets.CompilerClient/Xenko.Core.Assets.CompilerClient.csproj b/sources/assets/Xenko.Core.Assets.CompilerClient/Xenko.Core.Assets.CompilerClient.csproj index 1ba68603ac..90e192a479 100644 --- a/sources/assets/Xenko.Core.Assets.CompilerClient/Xenko.Core.Assets.CompilerClient.csproj +++ b/sources/assets/Xenko.Core.Assets.CompilerClient/Xenko.Core.Assets.CompilerClient.csproj @@ -1,6 +1,6 @@ - + false Exe @@ -28,5 +28,5 @@ - + diff --git a/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/AssetNodeInternalExtensions.cs b/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/AssetNodeInternalExtensions.cs index e7ecdc199c..22d99d79a0 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/AssetNodeInternalExtensions.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/AssetNodeInternalExtensions.cs @@ -8,12 +8,12 @@ namespace Xenko.Core.Assets.Quantum.Tests.Helpers { public static class AssetNodeInternalExtensions { - public static OverrideType GetItemOverride(this IAssetNode node, Index index) + public static OverrideType GetItemOverride(this IAssetNode node, NodeIndex index) { return ((IAssetObjectNodeInternal)node).GetItemOverride(index); } - public static OverrideType GetKeyOverride(this IAssetNode node, Index index) + public static OverrideType GetKeyOverride(this IAssetNode node, NodeIndex index) { return ((IAssetObjectNodeInternal)node).GetKeyOverride(index); } diff --git a/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/Types.cs b/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/Types.cs index a0b6b7530a..e073b98b74 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/Types.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum.Tests/Helpers/Types.cs @@ -165,14 +165,14 @@ public class SomeObject2 : IMyInterface [AssetPropertyGraphDefinition(typeof(MyAssetWithRef))] public class AssetWithRefPropertyGraphDefinition : AssetPropertyGraphDefinition { - public static Func IsObjectReferenceFunc { get; set; } + public static Func IsObjectReferenceFunc { get; set; } public override bool IsMemberTargetObjectReference(IMemberNode member, object value) { - return IsObjectReferenceFunc?.Invoke(member, Index.Empty) ?? base.IsMemberTargetObjectReference(member, value); + return IsObjectReferenceFunc?.Invoke(member, NodeIndex.Empty) ?? base.IsMemberTargetObjectReference(member, value); } - public override bool IsTargetItemObjectReference(IObjectNode collection, Index itemIndex, object value) + public override bool IsTargetItemObjectReference(IObjectNode collection, NodeIndex itemIndex, object value) { return IsObjectReferenceFunc?.Invoke(collection, itemIndex) ?? base.IsTargetItemObjectReference(collection, itemIndex, value); } @@ -186,7 +186,7 @@ public override bool IsMemberTargetObjectReference(IMemberNode member, object va return member.Name == nameof(MyAssetWithRef2.Reference); } - public override bool IsTargetItemObjectReference(IObjectNode collection, Index itemIndex, object value) + public override bool IsTargetItemObjectReference(IObjectNode collection, NodeIndex itemIndex, object value) { return collection.Retrieve() is List; } @@ -244,16 +244,16 @@ public AssetCompositeHierarchyData CreatePartInstances() public class MyAssetHierarchyPropertyGraph : AssetCompositeHierarchyPropertyGraph { public MyAssetHierarchyPropertyGraph(AssetPropertyGraphContainer container, AssetItem assetItem, ILogger logger) : base(container, assetItem, logger) { } - public override bool IsChildPartReference(IGraphNode node, Index index) => node.Type == typeof(ChildrenList); + public override bool IsChildPartReference(IGraphNode node, NodeIndex index) => node.Type == typeof(ChildrenList); protected override void AddChildPartToParentPart(MyPart parentPart, MyPart childPart, int index) { - Container.NodeContainer.GetNode(parentPart)[nameof(MyPart.Children)].Target.Add(childPart, new Index(index)); + Container.NodeContainer.GetNode(parentPart)[nameof(MyPart.Children)].Target.Add(childPart, new NodeIndex(index)); Container.NodeContainer.GetNode(childPart)[nameof(MyPart.Parent)].Update(parentPart); } protected override void RemoveChildPartFromParentPart(MyPart parentPart, MyPart childPart) { - Container.NodeContainer.GetNode(parentPart)[nameof(MyPart.Children)].Target.Remove(childPart, new Index(parentPart.Children.IndexOf(childPart))); + Container.NodeContainer.GetNode(parentPart)[nameof(MyPart.Children)].Target.Remove(childPart, new NodeIndex(parentPart.Children.IndexOf(childPart))); Container.NodeContainer.GetNode(childPart)[nameof(MyPart.Parent)].Update(null); } diff --git a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesAdvanced.cs b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesAdvanced.cs index 8dc832cf9b..11d14cd899 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesAdvanced.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesAdvanced.cs @@ -21,25 +21,25 @@ public void TestSimpleDictionaryAddWithCollision() var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset3.MyDictionary)]; // Update a key to derived and then the same key to the base - derivedPropertyNode.Target.Add("String3", new Index("Key3")); - basePropertyNode.Target.Add("String4", new Index("Key3")); + derivedPropertyNode.Target.Add("String3", new NodeIndex("Key3")); + basePropertyNode.Target.Add("String4", new NodeIndex("Key3")); Assert.Equal(3, context.BaseAsset.MyDictionary.Count); Assert.Equal(3, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index("Key3"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex("Key3"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key3"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key3"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); Assert.NotEqual(baseIds, derivedIds); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -66,24 +66,24 @@ public void TestSimpleCollectionRemoveDeleted() // Delete an item from the derived and then delete the same from the base var derivedDeletedId = derivedIds[2]; var baseDeletedId = baseIds[2]; - derivedPropertyNode.Target.Remove("String3", new Index(2)); - basePropertyNode.Target.Remove("String3", new Index(2)); + derivedPropertyNode.Target.Remove("String3", new NodeIndex(2)); + basePropertyNode.Target.Remove("String3", new NodeIndex(2)); Assert.Equal(3, context.BaseAsset.MyStrings.Count); Assert.Equal(3, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(2))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(3, derivedIds.KeyCount); @@ -107,25 +107,25 @@ public void TestSimpleDictionaryRemoveDeleted() // Delete an item from the derived and then delete the same from the base var derivedDeletedId = derivedIds["Key3"]; - derivedPropertyNode.Target.Remove("String3", new Index("Key3")); + derivedPropertyNode.Target.Remove("String3", new NodeIndex("Key3")); var baseDeletedId = baseIds["Key3"]; - basePropertyNode.Target.Remove("String3", new Index("Key3")); + basePropertyNode.Target.Remove("String3", new NodeIndex("Key3")); Assert.Equal(3, context.BaseAsset.MyDictionary.Count); Assert.Equal(3, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index("Key4"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(3, derivedIds.KeyCount); @@ -149,26 +149,26 @@ public void TestSimpleCollectionUpdateDeleted() // Delete an item from the derived and then update the same from the base var derivedDeletedId = derivedIds[2]; - derivedPropertyNode.Target.Remove("String3", new Index(2)); - basePropertyNode.Target.Update("String3.5", new Index(2)); + derivedPropertyNode.Target.Remove("String3", new NodeIndex(2)); + basePropertyNode.Target.Update("String3.5", new NodeIndex(2)); Assert.Equal(4, context.BaseAsset.MyStrings.Count); Assert.Equal(3, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3.5", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index(3))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(2))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3.5", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(3))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(3))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(4, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(3, derivedIds.KeyCount); @@ -191,26 +191,26 @@ public void TestSimpleDictionaryUpdateDeleted() // Delete an item from the derived and then update the same from the base var derivedDeletedId = derivedIds["Key3"]; - derivedPropertyNode.Target.Remove("String3", new Index("Key3")); - basePropertyNode.Target.Update("String3.5", new Index("Key3")); + derivedPropertyNode.Target.Remove("String3", new NodeIndex("Key3")); + basePropertyNode.Target.Update("String3.5", new NodeIndex("Key3")); Assert.Equal(4, context.BaseAsset.MyDictionary.Count); Assert.Equal(3, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3.5", basePropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index("Key4"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3.5", basePropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(4, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(3, derivedIds.KeyCount); @@ -231,36 +231,36 @@ public void TestSimpleCollectionAddMultipleAndCheckOrder() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; - derivedPropertyNode.Target.Add("String3.5", new Index(3)); - derivedPropertyNode.Target.Add("String1.5", new Index(1)); + derivedPropertyNode.Target.Add("String3.5", new NodeIndex(3)); + derivedPropertyNode.Target.Add("String1.5", new NodeIndex(1)); Assert.Equal(6, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String1", "String1.5", "String2", "String3", "String3.5", "String4"); - basePropertyNode.Target.Add("String0.1", new Index(0)); + basePropertyNode.Target.Add("String0.1", new NodeIndex(0)); Assert.Equal(5, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String2", "String3", "String4"); Assert.Equal(7, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.5", "String2", "String3", "String3.5", "String4"); - basePropertyNode.Target.Add("String1.1", new Index(2)); + basePropertyNode.Target.Add("String1.1", new NodeIndex(2)); Assert.Equal(6, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String3", "String4"); Assert.Equal(8, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.1", "String1.5", "String2", "String3", "String3.5", "String4"); - basePropertyNode.Target.Add("String2.1", new Index(4)); + basePropertyNode.Target.Add("String2.1", new NodeIndex(4)); Assert.Equal(7, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String2.1", "String3", "String4"); Assert.Equal(9, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.1", "String1.5", "String2", "String2.1", "String3", "String3.5", "String4"); - basePropertyNode.Target.Add("String3.1", new Index(6)); + basePropertyNode.Target.Add("String3.1", new NodeIndex(6)); Assert.Equal(8, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String2.1", "String3", "String3.1", "String4"); Assert.Equal(10, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.1", "String1.5", "String2", "String2.1", "String3", "String3.1", "String3.5", "String4"); - basePropertyNode.Target.Add("String4.1", new Index(8)); + basePropertyNode.Target.Add("String4.1", new NodeIndex(8)); Assert.Equal(9, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String2.1", "String3", "String3.1", "String4", "String4.1"); Assert.Equal(11, context.DerivedAsset.MyStrings.Count); @@ -295,28 +295,28 @@ public void TestRemoveBaseAddDerivedWithSubDerived() // Delete an item from the derived and then update the same from the base var derivedDeletedId = derivedIds[1]; - derivedPropertyNode.Target.Remove("String2", new Index(1)); + derivedPropertyNode.Target.Remove("String2", new NodeIndex(1)); basePropertyNode.Target.Add("String3"); Assert.Equal(3, context.BaseAsset.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.MyStrings.Count); Assert.Equal(2, context.SubDerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", subDerivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String3", subDerivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", subDerivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String3", subDerivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, subDerivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(2, derivedIds.KeyCount); @@ -345,34 +345,34 @@ public void TestAddBaseRemoveDerivedAndAddInBaseWithSubDerived() // Delete an item from the derived and then update the same from the base basePropertyNode.Target.Add("String3"); var derivedDeletedId = derivedIds[2]; - derivedPropertyNode.Target.Remove("String3", new Index(2)); + derivedPropertyNode.Target.Remove("String3", new NodeIndex(2)); basePropertyNode.Target.Add("String4"); Assert.Equal(4, context.BaseAsset.MyStrings.Count); Assert.Equal(3, context.DerivedAsset.MyStrings.Count); Assert.Equal(3, context.SubDerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index(3))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", subDerivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", subDerivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", subDerivedPropertyNode.Retrieve(new Index(2))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(3))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", subDerivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", subDerivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", subDerivedPropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(3))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, subDerivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(4, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(3, derivedIds.KeyCount); @@ -393,7 +393,7 @@ private static void AssertCollection(IGraphNode node, params string[] items) for (var i = 0; i < items.Length; i++) { var item = items[i]; - Assert.Equal(item, node.Retrieve(new Index(i))); + Assert.Equal(item, node.Retrieve(new NodeIndex(i))); } } } diff --git a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesBasic.cs b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesBasic.cs index 5c7142a0be..fd5ddf097e 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesBasic.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestArchetypesBasic.cs @@ -164,16 +164,16 @@ public static TestArchetypesRun PrepareSimpleCollectionUpdate() { Assert.Equal(2, context.BaseAsset.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -184,21 +184,21 @@ public static TestArchetypesRun PrepareSimpleCollectionUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.FirstChange = () => { basePropertyNode.Target.Update("MyBaseString", new Index(1)); }; + test.FirstChange = () => { basePropertyNode.Target.Update("MyBaseString", new NodeIndex(1)); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -209,21 +209,21 @@ public static TestArchetypesRun PrepareSimpleCollectionUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.SecondChange = () => { derivedPropertyNode.Target.Update("MyDerivedString", new Index(0)); }; + test.SecondChange = () => { derivedPropertyNode.Target.Update("MyDerivedString", new NodeIndex(0)); }; test.SecondChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -257,16 +257,16 @@ public static TestArchetypesRun PrepareSimpleCollectionAdd() { Assert.Equal(2, context.BaseAsset.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -282,18 +282,18 @@ public static TestArchetypesRun PrepareSimpleCollectionAdd() { Assert.Equal(2, context.BaseAsset.MyStrings.Count); Assert.Equal(3, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index(2))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.Equal(2, baseIds.KeyCount); @@ -308,22 +308,22 @@ public static TestArchetypesRun PrepareSimpleCollectionAdd() { Assert.Equal(3, context.BaseAsset.MyStrings.Count); Assert.Equal(4, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index(3))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex(3))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(3))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.Equal(3, baseIds.KeyCount); @@ -359,24 +359,24 @@ public static TestArchetypesRun PrepareSimpleCollectionRemove() { Assert.Equal(4, context.BaseAsset.MyStrings.Count); Assert.Equal(4, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index(3))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(3))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(3))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(3))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(3))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(3))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -392,28 +392,28 @@ public static TestArchetypesRun PrepareSimpleCollectionRemove() test.FirstChange = () => { derivedDeletedId = derivedIds[2]; - derivedPropertyNode.Target.Remove("String3", new Index(2)); + derivedPropertyNode.Target.Remove("String3", new NodeIndex(2)); }; test.FirstChangeCheck = () => { Assert.Equal(4, context.BaseAsset.MyStrings.Count); Assert.Equal(3, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index(3))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(2))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(3))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(3))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -429,24 +429,24 @@ public static TestArchetypesRun PrepareSimpleCollectionRemove() test.SecondChange = () => { baseDeletedId = baseIds[3]; - basePropertyNode.Target.Remove("String4", new Index(3)); + basePropertyNode.Target.Remove("String4", new NodeIndex(3)); }; test.SecondChangeCheck = () => { Assert.Equal(3, context.BaseAsset.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.Equal(3, baseIds.KeyCount); @@ -483,16 +483,16 @@ public static TestArchetypesRun PrepareCollectionInStructUpdate() { Assert.Equal(2, context.BaseAsset.Struct.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.Struct.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -503,21 +503,21 @@ public static TestArchetypesRun PrepareCollectionInStructUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.FirstChange = () => { basePropertyNode.Target.Update("MyBaseString", new Index(1)); }; + test.FirstChange = () => { basePropertyNode.Target.Update("MyBaseString", new NodeIndex(1)); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.Struct.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.Struct.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -528,21 +528,21 @@ public static TestArchetypesRun PrepareCollectionInStructUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.SecondChange = () => { derivedPropertyNode.Target.Update("MyDerivedString", new Index(0)); }; + test.SecondChange = () => { derivedPropertyNode.Target.Update("MyDerivedString", new NodeIndex(0)); }; test.SecondChangeCheck = () => { Assert.Equal(2, context.BaseAsset.Struct.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.Struct.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -576,16 +576,16 @@ public static TestArchetypesRun PrepareSimpleDictionaryUpdate() { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -596,21 +596,21 @@ public static TestArchetypesRun PrepareSimpleDictionaryUpdate() Assert.Equal(baseIds["Key1"], derivedIds["Key1"]); Assert.Equal(baseIds["Key2"], derivedIds["Key2"]); }; - test.FirstChange = () => { basePropertyNode.Target.Update("MyBaseString", new Index("Key2")); }; + test.FirstChange = () => { basePropertyNode.Target.Update("MyBaseString", new NodeIndex("Key2")); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -621,21 +621,21 @@ public static TestArchetypesRun PrepareSimpleDictionaryUpdate() Assert.Equal(baseIds["Key1"], derivedIds["Key1"]); Assert.Equal(baseIds["Key2"], derivedIds["Key2"]); }; - test.SecondChange = () => { derivedPropertyNode.Target.Update("MyDerivedString", new Index("Key1")); }; + test.SecondChange = () => { derivedPropertyNode.Target.Update("MyDerivedString", new NodeIndex("Key1")); }; test.SecondChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -669,16 +669,16 @@ public static TestArchetypesRun PrepareSimpleDictionaryAdd() { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -689,23 +689,23 @@ public static TestArchetypesRun PrepareSimpleDictionaryAdd() Assert.Equal(baseIds["Key1"], derivedIds["Key1"]); Assert.Equal(baseIds["Key2"], derivedIds["Key2"]); }; - test.FirstChange = () => { derivedPropertyNode.Target.Add("String3", new Index("Key3")); }; + test.FirstChange = () => { derivedPropertyNode.Target.Add("String3", new NodeIndex("Key3")); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(3, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index("Key3"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex("Key3"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key3"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -718,27 +718,27 @@ public static TestArchetypesRun PrepareSimpleDictionaryAdd() Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(3, context.DerivedAsset.MyDictionary.Count); }; - test.SecondChange = () => { basePropertyNode.Target.Add("String4", new Index("Key4")); }; + test.SecondChange = () => { basePropertyNode.Target.Add("String4", new NodeIndex("Key4")); }; test.SecondChangeCheck = () => { Assert.Equal(3, context.BaseAsset.MyDictionary.Count); Assert.Equal(4, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index("Key4"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -777,24 +777,24 @@ public static TestArchetypesRun PrepareSimpleDictionaryRemove() { Assert.Equal(4, context.BaseAsset.MyDictionary.Count); Assert.Equal(4, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index("Key4"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -810,28 +810,28 @@ public static TestArchetypesRun PrepareSimpleDictionaryRemove() test.FirstChange = () => { derivedDeletedId = derivedIds["Key3"]; - derivedPropertyNode.Target.Remove("String3", new Index("Key3")); + derivedPropertyNode.Target.Remove("String3", new NodeIndex("Key3")); }; test.FirstChangeCheck = () => { Assert.Equal(4, context.BaseAsset.MyDictionary.Count); Assert.Equal(3, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index("Key4"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -847,24 +847,24 @@ public static TestArchetypesRun PrepareSimpleDictionaryRemove() test.SecondChange = () => { baseDeletedId = baseIds["Key4"]; - basePropertyNode.Target.Remove("String4", new Index("Key4")); + basePropertyNode.Target.Remove("String4", new NodeIndex("Key4")); }; test.SecondChangeCheck = () => { Assert.Equal(3, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", basePropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key3"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.Equal(3, baseIds.KeyCount); @@ -906,24 +906,24 @@ public static TestArchetypesRun PrepareObjectCollectionUpdate() { Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(2, context.DerivedAsset.MyObjects.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -934,29 +934,29 @@ public static TestArchetypesRun PrepareObjectCollectionUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.FirstChange = () => { basePropertyNode.Target.Update(newObjB, new Index(1)); }; + test.FirstChange = () => { basePropertyNode.Target.Update(newObjB, new NodeIndex(1)); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(2, context.DerivedAsset.MyObjects.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -967,29 +967,29 @@ public static TestArchetypesRun PrepareObjectCollectionUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.SecondChange = () => { derivedPropertyNode.Target.Update(newObjD, new Index(0)); }; + test.SecondChange = () => { derivedPropertyNode.Target.Update(newObjD, new NodeIndex(0)); }; test.SecondChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(2, context.DerivedAsset.MyObjects.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1030,24 +1030,24 @@ public static TestArchetypesRun PrepareObjectCollectionAdd() { Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(2, context.DerivedAsset.MyObjects.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1063,28 +1063,28 @@ public static TestArchetypesRun PrepareObjectCollectionAdd() { Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(3, context.DerivedAsset.MyObjects.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(2))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(2))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1100,35 +1100,35 @@ public static TestArchetypesRun PrepareObjectCollectionAdd() { Assert.Equal(3, context.BaseAsset.MyObjects.Count); Assert.Equal(4, context.DerivedAsset.MyObjects.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index(2))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.NotEqual(newObjB, derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index(3))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String4", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(2))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String4", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(2))).Value); - Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(3))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.NotEqual(newObjB, derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex(3))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String4", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(2))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String4", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(2))).Value); + Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(3))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(3))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(3)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(3))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(3)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1170,25 +1170,25 @@ public static TestArchetypesRun PrepareAbstractCollectionUpdate() { Assert.Equal(2, context.BaseAsset.MyInterfaces.Count); Assert.Equal(2, context.DerivedAsset.MyInterfaces.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); // NOTE: we're using this code to test undo/redo and in this case, we have different objects in the derived object after undoing due to the fact that the type of the instance has changed //Assert.Equal(objD0, derivedPropertyNode.Content.Retrieve(new Index(0))); //Assert.Equal(objD1, derivedPropertyNode.Content.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1199,29 +1199,29 @@ public static TestArchetypesRun PrepareAbstractCollectionUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.FirstChange = () => { basePropertyNode.Target.Update(newObjB, new Index(1)); }; + test.FirstChange = () => { basePropertyNode.Target.Update(newObjB, new NodeIndex(1)); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyInterfaces.Count); Assert.Equal(2, context.DerivedAsset.MyInterfaces.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1232,29 +1232,29 @@ public static TestArchetypesRun PrepareAbstractCollectionUpdate() Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); }; - test.SecondChange = () => { derivedPropertyNode.Target.Update(newObjD, new Index(0)); }; + test.SecondChange = () => { derivedPropertyNode.Target.Update(newObjD, new NodeIndex(0)); }; test.SecondChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyInterfaces.Count); Assert.Equal(2, context.DerivedAsset.MyInterfaces.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index(0))); - Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("MyDerivedString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("MyDerivedString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1295,24 +1295,24 @@ public static TestArchetypesRun PrepareAbstractCollectionAdd() { Assert.Equal(2, context.BaseAsset.MyInterfaces.Count); Assert.Equal(2, context.DerivedAsset.MyInterfaces.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1328,28 +1328,28 @@ public static TestArchetypesRun PrepareAbstractCollectionAdd() { Assert.Equal(2, context.BaseAsset.MyInterfaces.Count); Assert.Equal(3, context.DerivedAsset.MyInterfaces.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(2))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(2))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1365,35 +1365,35 @@ public static TestArchetypesRun PrepareAbstractCollectionAdd() { Assert.Equal(3, context.BaseAsset.MyInterfaces.Count); Assert.Equal(4, context.DerivedAsset.MyInterfaces.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index(0))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index(1))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index(2))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index(1))); - Assert.NotEqual(newObjB, derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index(3))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String4", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index(2))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String4", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(2))).Value); - Assert.Equal("String3", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index(3))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.NotEqual(newObjB, derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex(3))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String4", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex(2))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String4", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(2))).Value); + Assert.Equal("String3", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex(3))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(3))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(3)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(3))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(3)].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1435,25 +1435,25 @@ public static TestArchetypesRun PrepareAbstractDictionaryUpdate() { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex("Key2"))); // NOTE: we're using this code to test undo/redo and in this case, we have different objects in the derived object after undoing due to the fact that the type of the instance has changed //Assert.Equal(objD0, derivedPropertyNode.Content.Retrieve(new Index("Key1"))); //Assert.Equal(objD1, derivedPropertyNode.Content.Retrieve(new Index("Key2"))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key2"))).Value); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key2"))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1464,29 +1464,29 @@ public static TestArchetypesRun PrepareAbstractDictionaryUpdate() Assert.Equal(baseIds["Key1"], derivedIds["Key1"]); Assert.Equal(baseIds["Key2"], derivedIds["Key2"]); }; - test.FirstChange = () => { basePropertyNode.Target.Update(newObjB, new Index("Key2")); }; + test.FirstChange = () => { basePropertyNode.Target.Update(newObjB, new NodeIndex("Key2")); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key2"))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key2"))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1497,29 +1497,29 @@ public static TestArchetypesRun PrepareAbstractDictionaryUpdate() Assert.Equal(baseIds["Key1"], derivedIds["Key1"]); Assert.Equal(baseIds["Key2"], derivedIds["Key2"]); }; - test.SecondChange = () => { derivedPropertyNode.Target.Update(newObjD, new Index("Key1")); }; + test.SecondChange = () => { derivedPropertyNode.Target.Update(newObjD, new NodeIndex("Key1")); }; test.SecondChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("MyDerivedString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key2"))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.NotEqual(objD1, derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("MyDerivedString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("MyBaseString", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key2"))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1560,24 +1560,24 @@ public static TestArchetypesRun PrepareAbstractDictionaryAdd() { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key2"))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key2"))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1588,33 +1588,33 @@ public static TestArchetypesRun PrepareAbstractDictionaryAdd() Assert.Equal(baseIds["Key1"], derivedIds["Key1"]); Assert.Equal(baseIds["Key2"], derivedIds["Key2"]); }; - test.FirstChange = () => { derivedPropertyNode.Target.Add(newObjD, new Index("Key3")); }; + test.FirstChange = () => { derivedPropertyNode.Target.Add(newObjD, new NodeIndex("Key3")); }; test.FirstChangeCheck = () => { Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(3, context.DerivedAsset.MyDictionary.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("String3", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key3"))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("String3", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key3"))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key3")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key3")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); @@ -1625,40 +1625,40 @@ public static TestArchetypesRun PrepareAbstractDictionaryAdd() Assert.Equal(baseIds["Key1"], derivedIds["Key1"]); Assert.Equal(baseIds["Key2"], derivedIds["Key2"]); }; - test.SecondChange = () => { basePropertyNode.Target.Add(newObjB, new Index("Key4")); }; + test.SecondChange = () => { basePropertyNode.Target.Add(newObjB, new NodeIndex("Key4")); }; test.SecondChangeCheck = () => { Assert.Equal(3, context.BaseAsset.MyDictionary.Count); Assert.Equal(4, context.DerivedAsset.MyDictionary.Count); - Assert.Equal(objB0, basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(objB1, basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal(newObjB, basePropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal(objD0, derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal(objD1, derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.NotEqual(newObjB, derivedPropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("String4", ((Types.IMyInterface)basePropertyNode.Retrieve(new Index("Key4"))).Value); - Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key1"))).Value); - Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key2"))).Value); - Assert.Equal("String4", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key4"))).Value); - Assert.Equal("String3", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new Index("Key3"))).Value); + Assert.Equal(objB0, basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(objB1, basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal(newObjB, basePropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal(objD0, derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal(objD1, derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.NotEqual(newObjB, derivedPropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal(newObjD, derivedPropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String1", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("String4", ((Types.IMyInterface)basePropertyNode.Retrieve(new NodeIndex("Key4"))).Value); + Assert.Equal("String1", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key1"))).Value); + Assert.Equal("String2", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key2"))).Value); + Assert.Equal("String4", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key4"))).Value); + Assert.Equal("String3", ((Types.IMyInterface)derivedPropertyNode.Retrieve(new NodeIndex("Key3"))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index("Key4")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex("Key4")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key4"))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key3")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index("Key4")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key1")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key2")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key3")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex("Key4")].TargetNode[nameof(Types.IMyInterface.Value)]).GetContentOverride()); Assert.Single(derivedPropertyNode.Target.GetOverriddenItemIndices()); Assert.Empty(derivedPropertyNode.Target.GetOverriddenKeyIndices()); Assert.NotSame(baseIds, derivedIds); diff --git a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestObjectReferenceGraph.cs b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestObjectReferenceGraph.cs index c06660bb8d..05a6949031 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestObjectReferenceGraph.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestObjectReferenceGraph.cs @@ -59,12 +59,12 @@ public void TestCollectionObjectReferenceGraph() Assert.True(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.NonReference)].IsReference); Assert.Equal(obj, context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.NonReference)].Target.Retrieve()); Assert.True(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].IsReference); - Assert.Equal(obj, context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target.Retrieve(new Index(0))); - Assert.Equal(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.NonReference)].Target, context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target.IndexedTarget(new Index(0))); + Assert.Equal(obj, context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target.Retrieve(new NodeIndex(0))); + Assert.Equal(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.NonReference)].Target, context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target.IndexedTarget(new NodeIndex(0))); Assert.Equal(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.References)], context.DerivedGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].BaseNode); Assert.Equal(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target, context.DerivedGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target.BaseNode); - Assert.Equal(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.NonReference)].Target, context.DerivedGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target.IndexedTarget(new Index(0)).BaseNode); + Assert.Equal(context.BaseGraph.RootNode[nameof(Types.MyAssetWithRef2.NonReference)].Target, context.DerivedGraph.RootNode[nameof(Types.MyAssetWithRef2.References)].Target.IndexedTarget(new NodeIndex(0)).BaseNode); } } } diff --git a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestOverrideSerialization.cs b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestOverrideSerialization.cs index 2562558e2b..d4b775ceb8 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestOverrideSerialization.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum.Tests/TestOverrideSerialization.cs @@ -278,8 +278,8 @@ public void TestSimpleCollectionUpdateSerialization() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; - basePropertyNode.Target.Update("MyBaseString", new Index(1)); - derivedPropertyNode.Target.Update("MyDerivedString", new Index(0)); + basePropertyNode.Target.Update("MyBaseString", new NodeIndex(1)); + derivedPropertyNode.Target.Update("MyDerivedString", new NodeIndex(0)); SerializationHelper.SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, SimpleCollectionUpdateBaseYaml, false); SerializationHelper.SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, SimpleCollectionUpdateDerivedYaml, true); } @@ -295,16 +295,16 @@ public void TestSimpleCollectionUpdateDeserialization() Assert.Equal(2, context.BaseAsset.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.NotSame(baseIds, derivedIds); Assert.Equal(2, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -325,8 +325,8 @@ public void TestSimpleDictionaryUpdateSerialization() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset3.MyDictionary)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset3.MyDictionary)]; - basePropertyNode.Target.Update("MyBaseString", new Index("Key2")); - derivedPropertyNode.Target.Update("MyDerivedString", new Index("Key1")); + basePropertyNode.Target.Update("MyBaseString", new NodeIndex("Key2")); + derivedPropertyNode.Target.Update("MyDerivedString", new NodeIndex("Key1")); SerializationHelper.SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, SimpleDictionaryUpdateBaseYaml, false); SerializationHelper.SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, SimpleDictionaryUpdateDerivedYaml, true); @@ -338,16 +338,16 @@ public void TestSimpleDictionaryUpdateSerialization() Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.NotSame(baseIds, derivedIds); Assert.Equal(2, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -368,16 +368,16 @@ public void TestSimpleDictionaryDeserialization() Assert.Equal(2, context.BaseAsset.MyDictionary.Count); Assert.Equal(2, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index("Key2"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); Assert.NotSame(baseIds, derivedIds); Assert.Equal(2, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -400,8 +400,8 @@ public void TestCollectionInStructUpdateSerialization() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset2.Struct)].Target[nameof(Types.MyAsset2.MyStrings)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset2.Struct)].Target[nameof(Types.MyAsset2.MyStrings)]; - basePropertyNode.Target.Update("MyBaseString", new Index(1)); - derivedPropertyNode.Target.Update("MyDerivedString", new Index(0)); + basePropertyNode.Target.Update("MyBaseString", new NodeIndex(1)); + derivedPropertyNode.Target.Update("MyDerivedString", new NodeIndex(0)); SerializationHelper.SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, CollectionInStructBaseYaml, false); SerializationHelper.SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, CollectionInStructDerivedYaml, true); } @@ -417,16 +417,16 @@ public void TestCollectionInStructUpdateDeserialization() Assert.Equal(2, context.BaseAsset.Struct.MyStrings.Count); Assert.Equal(2, context.DerivedAsset.Struct.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new Index(1))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("MyDerivedString", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("MyBaseString", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.NotSame(baseIds, derivedIds); Assert.Equal(2, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -469,22 +469,22 @@ public void TestSimpleCollectionAddDeserialization() Assert.Equal(3, context.BaseAsset.MyStrings.Count); Assert.Equal(4, context.DerivedAsset.MyStrings.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index(2))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(2))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index(3))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(2))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex(3))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(3))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(4, derivedIds.KeyCount); @@ -506,8 +506,8 @@ public void TestSimpleDictionaryAddSerialization() var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset3.MyDictionary)]; // Update derived and check - derivedPropertyNode.Target.Add("String3", new Index("Key3")); - basePropertyNode.Target.Add("String4", new Index("Key4")); + derivedPropertyNode.Target.Add("String3", new NodeIndex("Key3")); + basePropertyNode.Target.Add("String4", new NodeIndex("Key4")); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); var expectedBaseYaml = string.Format(SimpleDictionaryAddBaseYaml.Replace("{}", "{{}}"), baseIds["Key4"]); @@ -529,22 +529,22 @@ public void TestSimpleDictionaryAddDeserialization() Assert.Equal(3, context.BaseAsset.MyDictionary.Count); Assert.Equal(4, context.DerivedAsset.MyDictionary.Count); - Assert.Equal("String1", basePropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", basePropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String4", basePropertyNode.Retrieve(new Index("Key4"))); - Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); - Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); - Assert.Equal("String3", derivedPropertyNode.Retrieve(new Index("Key3"))); - Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index("Key4"))); + Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex("Key4"))); + Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex("Key1"))); + Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex("Key2"))); + Assert.Equal("String3", derivedPropertyNode.Retrieve(new NodeIndex("Key3"))); + Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key1"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key2"))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index("Key3"))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index("Key4"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key1"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key2"))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key3"))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex("Key4"))); Assert.NotSame(baseIds, derivedIds); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -568,8 +568,8 @@ public void TestObjectCollectionUpdateSerialization() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset4.MyObjects)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset4.MyObjects)]; - basePropertyNode.Target.Update(new Types.SomeObject { Value = "MyBaseString" }, new Index(1)); - derivedPropertyNode.Target.Update(new Types.SomeObject { Value = "MyDerivedString" }, new Index(0)); + basePropertyNode.Target.Update(new Types.SomeObject { Value = "MyBaseString" }, new NodeIndex(1)); + derivedPropertyNode.Target.Update(new Types.SomeObject { Value = "MyDerivedString" }, new NodeIndex(0)); SerializationHelper.SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, ObjectCollectionUpdateBaseYaml, false); SerializationHelper.SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, ObjectCollectionUpdateDerivedYaml, true); } @@ -585,20 +585,20 @@ public void TestObjectCollectionUpdateDeserialization() Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(2, context.DerivedAsset.MyObjects.Count); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.NotSame(baseIds, derivedIds); Assert.Equal(2, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -641,28 +641,28 @@ public void TestObjectCollectionAddDeserialization() Assert.Equal(3, context.BaseAsset.MyObjects.Count); Assert.Equal(4, context.DerivedAsset.MyObjects.Count); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String4", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(2))).Value); - Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("String4", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(2))).Value); - Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(3))).Value); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String4", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(2))).Value); + Assert.Equal("String1", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("String2", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("String4", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(2))).Value); + Assert.Equal("String3", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(3))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); - Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new Index(3))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(3)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); + Assert.Equal(OverrideType.New, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(3))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(2)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(3)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.NotSame(baseIds, derivedIds); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -684,8 +684,8 @@ public void TestObjectCollectionPropertyUpdateSerialization() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset4.MyObjects)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset4.MyObjects)]; - basePropertyNode.Target.IndexedTarget(new Index(1))[nameof(Types.SomeObject.Value)].Update("MyBaseString"); - derivedPropertyNode.Target.IndexedTarget(new Index(0))[nameof(Types.SomeObject.Value)].Update("MyDerivedString"); + basePropertyNode.Target.IndexedTarget(new NodeIndex(1))[nameof(Types.SomeObject.Value)].Update("MyBaseString"); + derivedPropertyNode.Target.IndexedTarget(new NodeIndex(0))[nameof(Types.SomeObject.Value)].Update("MyDerivedString"); SerializationHelper.SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, ObjectCollectionPropertyUpdateBaseYaml, false); SerializationHelper.SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, ObjectCollectionPropertyUpdateDerivedYaml, true); } @@ -701,20 +701,20 @@ public void TestObjectCollectionPropertyUpdateDeserialization() Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(2, context.DerivedAsset.MyObjects.Count); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.New, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.New, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.NotSame(baseIds, derivedIds); Assert.Equal(2, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); @@ -732,12 +732,12 @@ public void TestNonIdentifiableObjectCollectionUpdateSerialization() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset8.MyObjects)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset8.MyObjects)]; // Manually link base of non-identifiable items - this simulates a scenario similar to prefabs - context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new Index(0)), basePropertyNode.Target.IndexedTarget(new Index(0))); - context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new Index(1)), basePropertyNode.Target.IndexedTarget(new Index(1))); + context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new NodeIndex(0)), basePropertyNode.Target.IndexedTarget(new NodeIndex(0))); + context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new NodeIndex(1)), basePropertyNode.Target.IndexedTarget(new NodeIndex(1))); context.DerivedGraph.RefreshBase(); - basePropertyNode.Target.IndexedTarget(new Index(1))[nameof(Types.SomeObject.Value)].Update("MyBaseString"); - derivedPropertyNode.Target.IndexedTarget(new Index(0))[nameof(Types.SomeObject.Value)].Update("MyDerivedString"); + basePropertyNode.Target.IndexedTarget(new NodeIndex(1))[nameof(Types.SomeObject.Value)].Update("MyBaseString"); + derivedPropertyNode.Target.IndexedTarget(new NodeIndex(0))[nameof(Types.SomeObject.Value)].Update("MyDerivedString"); SerializationHelper.SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, NonIdentifiableObjectCollectionPropertyUpdateBaseYaml, false); SerializationHelper.SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, NonIdentifiableObjectCollectionPropertyUpdateDerivedYaml, true); } @@ -749,26 +749,26 @@ public void TestNonIdentifiableObjectCollectionUpdateDeserialization() var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset8.MyObjects)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset8.MyObjects)]; // Manually link base of non-identifiable items - this simulates a scenario similar to prefabs - context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new Index(0)), basePropertyNode.Target.IndexedTarget(new Index(0))); - context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new Index(1)), basePropertyNode.Target.IndexedTarget(new Index(1))); + context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new NodeIndex(0)), basePropertyNode.Target.IndexedTarget(new NodeIndex(0))); + context.DerivedGraph.RegisterCustomBaseLink(derivedPropertyNode.Target.IndexedTarget(new NodeIndex(1)), basePropertyNode.Target.IndexedTarget(new NodeIndex(1))); context.DerivedGraph.RefreshBase(); Assert.Equal(2, context.BaseAsset.MyObjects.Count); Assert.Equal(2, context.DerivedAsset.MyObjects.Count); - Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new Index(1))).Value); - Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(0))).Value); - Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new Index(1))).Value); + Assert.Equal("String1", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)basePropertyNode.Retrieve(new NodeIndex(1))).Value); + Assert.Equal("MyDerivedString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(0))).Value); + Assert.Equal("MyBaseString", ((Types.SomeObject)derivedPropertyNode.Retrieve(new NodeIndex(1))).Value); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)basePropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); - Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); - Assert.Equal(OverrideType.New, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); - Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new Index(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); + Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); + Assert.Equal(OverrideType.New, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(0)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); + Assert.Equal(OverrideType.Base, ((AssetMemberNode)derivedPropertyNode.Target.ItemReferences[new NodeIndex(1)].TargetNode[nameof(Types.SomeObject.Value)]).GetContentOverride()); } [Fact] @@ -819,7 +819,7 @@ public void TestGenerateOverridesForSerializationOfCollectionItem() "; var asset = new Types.MyAsset4 { MyObjects = { new Types.SomeObject { Value = "String1" }, new Types.SomeObject { Value = "String2" } } }; var context = DeriveAssetTest.DeriveAsset(asset); - var derivedPropertyNode = (AssetObjectNode)context.DerivedGraph.RootNode[nameof(Types.MyAsset4.MyObjects)].Target.IndexedTarget(new Index(1)); + var derivedPropertyNode = (AssetObjectNode)context.DerivedGraph.RootNode[nameof(Types.MyAsset4.MyObjects)].Target.IndexedTarget(new NodeIndex(1)); derivedPropertyNode[nameof(Types.SomeObject.Value)].Update("OverriddenString"); var expectedPath = new YamlAssetPath(); expectedPath.PushMember(nameof(Types.SomeObject.Value)); diff --git a/sources/assets/Xenko.Core.Assets.Quantum.Tests/Xenko.Core.Assets.Quantum.Tests.csproj b/sources/assets/Xenko.Core.Assets.Quantum.Tests/Xenko.Core.Assets.Quantum.Tests.csproj index cd499ef4a4..0ead68ad8e 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum.Tests/Xenko.Core.Assets.Quantum.Tests.csproj +++ b/sources/assets/Xenko.Core.Assets.Quantum.Tests/Xenko.Core.Assets.Quantum.Tests.csproj @@ -1,6 +1,6 @@ - + true $(TargetFrameworkTool) @@ -42,5 +42,5 @@ - + \ No newline at end of file diff --git a/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs b/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs index 21db7355c6..1c9006eb55 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraph.cs @@ -80,7 +80,7 @@ protected AssetCompositeHierarchyPropertyGraph([NotNull] AssetPropertyGraphConta /// public event EventHandler PartRemoved; - public abstract bool IsChildPartReference(IGraphNode node, Index index); + public abstract bool IsChildPartReference(IGraphNode node, NodeIndex index); /// public override void Dispose() @@ -161,7 +161,7 @@ public void AddPartToAsset(AssetPartCollection new if (parent == null) { var rootPartsNode = HierarchyNode[nameof(AssetCompositeHierarchyData.RootParts)].Target; - rootPartsNode.Add(child.Part, new Index(index)); + rootPartsNode.Add(child.Part, new NodeIndex(index)); } else { @@ -185,7 +185,7 @@ public void RemovePartFromAsset([NotNull] TAssetPartDesign partDesign) } else { - var index = new Index(Asset.Hierarchy.RootParts.IndexOf(partDesign.Part)); + var index = new NodeIndex(Asset.Hierarchy.RootParts.IndexOf(partDesign.Part)); var rootPartsNode = HierarchyNode[nameof(AssetCompositeHierarchyData.RootParts)].Target; rootPartsNode.Remove(partDesign.Part, index); } @@ -744,7 +744,7 @@ private void PartRemovedInBaseAsset(object sender, AssetPartChangeEventArgs e) private void InsertPartInPartsCollection(AssetPartCollection newPartCollection, [NotNull] TAssetPartDesign rootPart) { var node = HierarchyNode[nameof(AssetCompositeHierarchyData.Parts)].Target; - node.Add(rootPart, new Index(rootPart.Part.Id)); + node.Add(rootPart, new NodeIndex(rootPart.Part.Id)); foreach (var childPart in Asset.EnumerateChildParts(rootPart.Part, false)) { var partDesign = newPartCollection[childPart.Id]; @@ -760,7 +760,7 @@ private void RemovePartFromPartsCollection([NotNull] TAssetPartDesign rootPart) RemovePartFromPartsCollection(partDesign); } var node = HierarchyNode[nameof(AssetCompositeHierarchyData.Parts)].Target; - var index = new Index(rootPart.Part.Id); + var index = new NodeIndex(rootPart.Part.Id); node.Remove(rootPart, index); } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraphDefinition.cs b/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraphDefinition.cs index 436ec5e72e..2d5c48334b 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraphDefinition.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/AssetCompositeHierarchyPropertyGraphDefinition.cs @@ -19,7 +19,7 @@ public override bool IsMemberTargetObjectReference(IMemberNode member, object va return base.IsMemberTargetObjectReference(member, value); } - public override bool IsTargetItemObjectReference(IObjectNode collection, Index itemIndex, object value) + public override bool IsTargetItemObjectReference(IObjectNode collection, NodeIndex itemIndex, object value) { return value is TAssetPart || base.IsTargetItemObjectReference(collection, itemIndex, value); } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/AssetGraphNodeLinker.cs b/sources/assets/Xenko.Core.Assets.Quantum/AssetGraphNodeLinker.cs index 80571ec666..197b09e90a 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/AssetGraphNodeLinker.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/AssetGraphNodeLinker.cs @@ -21,7 +21,7 @@ protected override bool ShouldVisitMemberTarget([NotNull] IMemberNode member) return !propertyGraphDefinition.IsMemberTargetObjectReference(member, member.Retrieve()) && base.ShouldVisitMemberTarget(member); } - protected override bool ShouldVisitTargetItem([NotNull] IObjectNode collectionNode, Index index) + protected override bool ShouldVisitTargetItem([NotNull] IObjectNode collectionNode, NodeIndex index) { return !propertyGraphDefinition.IsTargetItemObjectReference(collectionNode, index, collectionNode.Retrieve(index)) && base.ShouldVisitTargetItem(collectionNode, index); } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraph.cs b/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraph.cs index 03b171af9f..8be0ca33e6 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraph.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraph.cs @@ -26,14 +26,14 @@ public class AssetPropertyGraph : IDisposable public struct NodeOverride { - public NodeOverride(IAssetNode overriddenNode, Index overriddenIndex, OverrideTarget target) + public NodeOverride(IAssetNode overriddenNode, NodeIndex overriddenIndex, OverrideTarget target) { Node = overriddenNode; Index = overriddenIndex; Target = target; } public readonly IAssetNode Node; - public readonly Index Index; + public readonly NodeIndex Index; public readonly OverrideTarget Target; } @@ -211,7 +211,7 @@ public void ReconcileWithBase() ReconcileWithBase(RootNode); } - private void ReconcileWithBase([NotNull] IAssetNode rootNode, Dictionary nodesToReset = null) + private void ReconcileWithBase([NotNull] IAssetNode rootNode, Dictionary nodesToReset = null) { // Two passes: first pass will reconcile almost everything, but skip object reference. // The reason is that the target of the reference might not exist yet (might need to be reconcilied) @@ -230,18 +230,18 @@ private void ReconcileWithBase([NotNull] IAssetNode rootNode, Dictionary /// The node for which to reset overrides. /// The index of the override to reset in this node, if relevant. - internal void ResetAllOverridesRecursively([NotNull] IAssetNode rootNode, Index indexToReset) + internal void ResetAllOverridesRecursively([NotNull] IAssetNode rootNode, NodeIndex indexToReset) { - if (rootNode is IAssetMemberNode && indexToReset != Index.Empty) throw new ArgumentException(@"The index must be empty when invoking this method on a member node.", nameof(indexToReset)); + if (rootNode is IAssetMemberNode && indexToReset != NodeIndex.Empty) throw new ArgumentException(@"The index must be empty when invoking this method on a member node.", nameof(indexToReset)); // We first use a visitor to reset recursively all overrides - var nodesToReset = new Dictionary(); + var nodesToReset = new Dictionary(); IGraphNode visitRoot = null; var memberNode = rootNode as AssetMemberNode; if (memberNode != null) { - if (indexToReset != Index.Empty) throw new InvalidOperationException("Expecting empty index when resetting a member node."); + if (indexToReset != NodeIndex.Empty) throw new InvalidOperationException("Expecting empty index when resetting a member node."); visitRoot = memberNode.Target; nodesToReset.Add(rootNode, indexToReset); } @@ -249,7 +249,7 @@ internal void ResetAllOverridesRecursively([NotNull] IAssetNode rootNode, Index var objectNode = rootNode as AssetObjectNode; if (objectNode != null) { - if (indexToReset != Index.Empty) + if (indexToReset != NodeIndex.Empty) { nodesToReset.Add(rootNode, indexToReset); visitRoot = objectNode.IsReference ? objectNode.IndexedTarget(indexToReset) : null; @@ -265,7 +265,7 @@ internal void ResetAllOverridesRecursively([NotNull] IAssetNode rootNode, Index { var visitor = new AssetGraphVisitorBase(Definition); // If we're in scenario where rootNode is an object node and index is not empty, we might already have the node in the dictionary so let's check this in Visiting - visitor.Visiting += (node, path) => { if (!nodesToReset.ContainsKey(node)) nodesToReset.Add(node, Index.Empty); }; + visitor.Visiting += (node, path) => { if (!nodesToReset.ContainsKey(node)) nodesToReset.Add(node, NodeIndex.Empty); }; visitor.Visit(rootNode); } // Then we reconcile (recursively) with the base. @@ -329,10 +329,10 @@ protected virtual void OnItemChanged(ItemChangeEventArgs args) } [CanBeNull] - private static IAssetNode ResolveObjectPath([NotNull] IAssetNode rootNode, [NotNull] YamlAssetPath path, out Index index, out bool resolveOnIndex) + private static IAssetNode ResolveObjectPath([NotNull] IAssetNode rootNode, [NotNull] YamlAssetPath path, out NodeIndex index, out bool resolveOnIndex) { var currentNode = rootNode; - index = Index.Empty; + index = NodeIndex.Empty; resolveOnIndex = false; for (var i = 0; i < path.Elements.Count; i++) { @@ -341,7 +341,7 @@ private static IAssetNode ResolveObjectPath([NotNull] IAssetNode rootNode, [NotN { case YamlAssetPath.ElementType.Member: { - index = Index.Empty; + index = NodeIndex.Empty; resolveOnIndex = false; if (currentNode.IsReference) { @@ -357,7 +357,7 @@ private static IAssetNode ResolveObjectPath([NotNull] IAssetNode rootNode, [NotN } case YamlAssetPath.ElementType.Index: { - index = new Index(item.Value); + index = new NodeIndex(item.Value); resolveOnIndex = true; var memberNode = currentNode as IMemberNode; if (memberNode == null) throw new InvalidOperationException($"An IMemberNode was expected when processing the path [{path}]"); @@ -366,7 +366,7 @@ private static IAssetNode ResolveObjectPath([NotNull] IAssetNode rootNode, [NotN { var objNode = currentNode as IObjectNode; if (objNode == null) throw new InvalidOperationException($"An IObjectNode was expected when processing the path [{path}]"); - currentNode = (IAssetNode)objNode.IndexedTarget(new Index(item.Value)); + currentNode = (IAssetNode)objNode.IndexedTarget(new NodeIndex(item.Value)); } break; } @@ -374,7 +374,7 @@ private static IAssetNode ResolveObjectPath([NotNull] IAssetNode rootNode, [NotN { var ids = CollectionItemIdHelper.GetCollectionItemIds(currentNode.Retrieve()); var key = ids.GetKey(item.AsItemId()); - index = new Index(key); + index = new NodeIndex(key); resolveOnIndex = false; var memberNode = currentNode as IMemberNode; if (memberNode == null) throw new InvalidOperationException($"An IMemberNode was expected when processing the path [{path}]"); @@ -383,7 +383,7 @@ private static IAssetNode ResolveObjectPath([NotNull] IAssetNode rootNode, [NotN { var objNode = currentNode as IObjectNode; if (objNode == null) throw new InvalidOperationException($"An IObjectNode was expected when processing the path [{path}]"); - currentNode = (IAssetNode)objNode.IndexedTarget(new Index(key)); + currentNode = (IAssetNode)objNode.IndexedTarget(new NodeIndex(key)); } break; } @@ -427,7 +427,7 @@ public static void ApplyOverrides([NotNull] IAssetNode rootNode, YamlAssetMetada foreach (var overrideInfo in overrides) { - var node = ResolveObjectPath(rootNode, overrideInfo.Key, out Index index, out bool overrideOnKey); + var node = ResolveObjectPath(rootNode, overrideInfo.Key, out NodeIndex index, out bool overrideOnKey); // The node is unreachable, skip this override. if (node == null) continue; @@ -469,7 +469,7 @@ public List ClearAllOverrides() if (memberNode != null && memberNode.IsContentOverridden()) { memberNode.OverrideContent(false); - clearedOverrides.Add(new NodeOverride(memberNode, Index.Empty, OverrideTarget.Content)); + clearedOverrides.Add(new NodeOverride(memberNode, NodeIndex.Empty, OverrideTarget.Content)); } if (objectNode != null) { @@ -532,7 +532,7 @@ protected virtual IBaseToDerivedRegistry CreateBaseToDerivedRegistry() } // TODO: this method is should be called in every scenario of ReconcileWithBase, it is not the case yet. - protected virtual bool CanUpdate(IAssetNode node, ContentChangeType changeType, Index index, object value) + protected virtual bool CanUpdate(IAssetNode node, ContentChangeType changeType, NodeIndex index, object value) { return true; } @@ -566,11 +566,11 @@ private static object CloneFromBase(object value) private void LinkBaseNode([NotNull] IGraphNode currentNode, IGraphNode baseNode) { - var assetNode = (IAssetNode)currentNode; - ((IAssetNodeInternal)assetNode).SetPropertyGraph(this); - ((IAssetNodeInternal)assetNode).SetBaseNode(baseNode); + var assetNode = (IAssetNodeInternal)currentNode; + assetNode.SetPropertyGraph(this); + assetNode.SetBaseNode(baseNode); - BaseToDerivedRegistry.RegisterBaseToDerived((IAssetNode)baseNode, (IAssetNode)currentNode); + BaseToDerivedRegistry.RegisterBaseToDerived((IAssetNode)baseNode, assetNode); if (!baseLinkedNodes.ContainsKey(assetNode)) { @@ -578,14 +578,13 @@ private void LinkBaseNode([NotNull] IGraphNode currentNode, IGraphNode baseNode) EventHandler itemChange = null; if (baseNode != null) { - var member = assetNode.BaseNode as IMemberNode; - if (member != null) + if (assetNode.BaseNode is IMemberNode member) { valueChange = (s, e) => OnBaseContentChanged(e, currentNode); member.ValueChanged += valueChange; } - var objectNode = assetNode.BaseNode as IObjectNode; - if (objectNode != null) + + if (assetNode.BaseNode is IObjectNode objectNode) { itemChange = (s, e) => OnBaseContentChanged(e, currentNode); objectNode.ItemChanged += itemChange; @@ -601,13 +600,12 @@ private void UnlinkBaseNode(IGraphNode currentNode, IGraphNode baseNode) if (baseLinkedNodes.TryGetValue(assetNode, out NodeChangeHandlers linkedNode)) { - var member = assetNode.BaseNode as IMemberNode; - if (member != null) + if (assetNode.BaseNode is IMemberNode member) { member.ValueChanged -= linkedNode.ValueChange; } - var objectNode = assetNode.BaseNode as IObjectNode; - if (objectNode != null) + + if (assetNode.BaseNode is IObjectNode objectNode) { objectNode.ItemChanged -= linkedNode.ItemChange; } @@ -619,13 +617,12 @@ private void ClearAllBaseLinks() { foreach (var linkedNode in baseLinkedNodes) { - var member = linkedNode.Key.BaseNode as IMemberNode; - if (member != null) + if (linkedNode.Key.BaseNode is IMemberNode member) { member.ValueChanged -= linkedNode.Value.ValueChange; } - var objectNode = linkedNode.Key.BaseNode as IObjectNode; - if (objectNode != null) + + if (linkedNode.Key.BaseNode is IObjectNode objectNode) { objectNode.ItemChanged -= linkedNode.Value.ItemChange; } @@ -744,7 +741,7 @@ private void OnBaseContentChanged(INodeChangeEventArgs e, IGraphNode node) BaseContentChanged?.Invoke(e, node); } - private void ReconcileWithBaseNode(IAssetNode assetNode, bool reconcileObjectReference, Dictionary nodesToReset) + private void ReconcileWithBaseNode(IAssetNode assetNode, bool reconcileObjectReference, Dictionary nodesToReset) { var memberNode = assetNode as AssetMemberNode; var objectNode = assetNode as IAssetObjectNodeInternal; @@ -796,7 +793,7 @@ private void ReconcileWithBaseNode(IAssetNode assetNode, bool reconcileObjectRef foreach (var index in objectNode.Indices) { // Skip overridden items, if they are not marked to be reset. - if (objectNode.IsItemOverridden(index) || (nodesToReset != null && nodesToReset.TryGetValue(objectNode, out Index indexToReset) && indexToReset != index)) + if (objectNode.IsItemOverridden(index) || (nodesToReset != null && nodesToReset.TryGetValue(objectNode, out NodeIndex indexToReset) && indexToReset != index)) continue; var itemId = objectNode.IndexToId(index); @@ -841,7 +838,7 @@ private void ReconcileWithBaseNode(IAssetNode assetNode, bool reconcileObjectRef continue; } - if (!objectNode.TryIdToIndex(itemId, out Index localIndex)) + if (!objectNode.TryIdToIndex(itemId, out NodeIndex localIndex)) { // For dictionary, we might have a key collision, if so, we consider that the new value from the base is deleted in the instance. var keyCollision = assetNode.Descriptor is DictionaryDescriptor && (objectNode.ItemReferences?.HasIndex(index) == true || objectNode.Indices.Any(x => index.Equals(x))); @@ -881,7 +878,7 @@ private void ReconcileWithBaseNode(IAssetNode assetNode, bool reconcileObjectRef if (ShouldReconcileIndex(localIndex, index)) { // Reconcile using a move (Remove + Add) of the key-value pair - var clonedIndex = new Index(CloneValueFromBase(index.Value, assetNode)); + var clonedIndex = new NodeIndex(CloneValueFromBase(index.Value, assetNode)); var localItemValue = assetNode.Retrieve(localIndex); objectNode.Remove(localItemValue, localIndex); objectNode.Add(localItemValue, clonedIndex); @@ -914,19 +911,19 @@ private void ReconcileWithBaseNode(IAssetNode assetNode, bool reconcileObjectRef var currentBaseIndex = baseIndex.Int - 1; // Initialize the target index to zero, in case we don't find any better index. - var localIndex = new Index(0); + var localIndex = new NodeIndex(0); // Find the first item of the base that also exists (in term of id) in the local node, iterating backward (from baseIndex to 0) while (currentBaseIndex >= 0) { // This should not happen since the currentBaseIndex comes from the base. - if (!baseNode.TryIndexToId(new Index(currentBaseIndex), out ItemId baseId)) + if (!baseNode.TryIndexToId(new NodeIndex(currentBaseIndex), out ItemId baseId)) throw new InvalidOperationException("Cannot find an identifier matching the index in the base collection"); // If we have an matching item, we want to insert right after it - if (objectNode.TryIdToIndex(baseId, out Index sameIndexInInstance)) + if (objectNode.TryIdToIndex(baseId, out NodeIndex sameIndexInInstance)) { - localIndex = new Index(sameIndexInInstance.Int + 1); + localIndex = new NodeIndex(sameIndexInInstance.Int + 1); break; } currentBaseIndex--; @@ -946,16 +943,16 @@ private void ReconcileWithBaseNode(IAssetNode assetNode, bool reconcileObjectRef } } - private bool ShouldReconcileMember([NotNull] IAssetMemberNode memberNode, bool reconcileObjectReference, Dictionary nodesToReset) + private bool ShouldReconcileMember([NotNull] IAssetMemberNode memberNode, bool reconcileObjectReference, Dictionary nodesToReset) { var localValue = memberNode.Retrieve(); var baseValue = memberNode.BaseNode.Retrieve(); // First rule: if the node is to be reset, we should reconcile. - var index = Index.Empty; + var index = NodeIndex.Empty; if (nodesToReset?.TryGetValue(memberNode, out index) ?? false) { - return index == Index.Empty; + return index == NodeIndex.Empty; } // Second rule: if the node is overridden, we shouldn't reconcile. @@ -990,16 +987,16 @@ private bool ShouldReconcileMember([NotNull] IAssetMemberNode memberNode, bool r return !Equals(localValue, baseValue); } - private bool ShouldReconcileItem([NotNull] IAssetObjectNode node, Index localIndex, Index baseIndex, bool reconcileObjectReference, Dictionary nodesToReset) + private bool ShouldReconcileItem([NotNull] IAssetObjectNode node, NodeIndex localIndex, NodeIndex baseIndex, bool reconcileObjectReference, Dictionary nodesToReset) { var localValue = node.Retrieve(localIndex); var baseValue = node.BaseNode.Retrieve(baseIndex); // First rule: if the node is to be reset, we should reconcile. - var index = Index.Empty; + var index = NodeIndex.Empty; if (nodesToReset?.TryGetValue(node, out index) ?? false) { - return index == Index.Empty || index == localIndex; + return index == NodeIndex.Empty || index == localIndex; } // Second rule: if the node is overridden, we shouldn't reconcile. @@ -1034,7 +1031,7 @@ private bool ShouldReconcileItem([NotNull] IAssetObjectNode node, Index localInd return !Equals(localValue, baseValue); } - private static bool ShouldReconcileIndex(Index localIndex, Index baseIndex) + private static bool ShouldReconcileIndex(NodeIndex localIndex, NodeIndex baseIndex) { return !Equals(localIndex, baseIndex); } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraphDefinition.cs b/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraphDefinition.cs index 97fe51a3da..712ae11e12 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraphDefinition.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/AssetPropertyGraphDefinition.cs @@ -29,7 +29,7 @@ public virtual bool IsMemberTargetObjectReference(IMemberNode member, object val return false; } - public virtual bool IsTargetItemObjectReference(IObjectNode collection, Index itemIndex, object value) + public virtual bool IsTargetItemObjectReference(IObjectNode collection, NodeIndex itemIndex, object value) { return false; } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/AssetToBaseNodeLinker.cs b/sources/assets/Xenko.Core.Assets.Quantum/AssetToBaseNodeLinker.cs index ba02eb920f..87f6bfe6da 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/AssetToBaseNodeLinker.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/AssetToBaseNodeLinker.cs @@ -48,7 +48,13 @@ public override ObjectReference FindTargetReference(IGraphNode sourceNode, IGrap var targetIds = CollectionItemIdHelper.GetCollectionItemIds(targetNode.Retrieve()); var itemId = sourceIds[sourceReference.Index.Value]; var targetKey = targetIds.GetKey(itemId); - return targetReference.FirstOrDefault(x => Equals(x.Index.Value, targetKey)); + foreach (var targetRef in targetReference) + { + if (Equals(targetRef.Index.Value, targetKey)) + return targetRef; + } + + return null; } } } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/IAssetObjectNode.cs b/sources/assets/Xenko.Core.Assets.Quantum/IAssetObjectNode.cs index 2cf95110d6..a65158d651 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/IAssetObjectNode.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/IAssetObjectNode.cs @@ -12,11 +12,11 @@ public interface IAssetObjectNode : IAssetNode, IObjectNode [NotNull] new IAssetMemberNode this[string name] { get; } - new IAssetObjectNode IndexedTarget(Index index); + new IAssetObjectNode IndexedTarget(NodeIndex index); - void OverrideItem(bool isOverridden, Index index); + void OverrideItem(bool isOverridden, NodeIndex index); - void OverrideKey(bool isOverridden, Index index); + void OverrideKey(bool isOverridden, NodeIndex index); void OverrideDeletedItem(bool isOverridden, ItemId deletedId); @@ -24,38 +24,38 @@ public interface IAssetObjectNode : IAssetNode, IObjectNode void Restore(object restoredItem, ItemId id); - void Restore(object restoredItem, Index index, ItemId id); + void Restore(object restoredItem, NodeIndex index, ItemId id); - void RemoveAndDiscard(object item, Index itemIndex, ItemId id); + void RemoveAndDiscard(object item, NodeIndex itemIndex, ItemId id); - bool IsItemInherited(Index index); + bool IsItemInherited(NodeIndex index); - bool IsKeyInherited(Index index); + bool IsKeyInherited(NodeIndex index); - bool IsItemOverridden(Index index); + bool IsItemOverridden(NodeIndex index); bool IsItemOverriddenDeleted(ItemId id); - bool IsKeyOverridden(Index index); + bool IsKeyOverridden(NodeIndex index); - ItemId IndexToId(Index index); + ItemId IndexToId(NodeIndex index); - bool TryIndexToId(Index index, out ItemId id); + bool TryIndexToId(NodeIndex index, out ItemId id); bool HasId(ItemId id); - Index IdToIndex(ItemId id); + NodeIndex IdToIndex(ItemId id); - bool TryIdToIndex(ItemId id, out Index index); + bool TryIdToIndex(ItemId id, out NodeIndex index); /// /// Resets the overrides attached to this node at a specific index and to its descendants, recursively. /// /// The index of the override to reset in this node. - void ResetOverrideRecursively(Index indexToReset); + void ResetOverrideRecursively(NodeIndex indexToReset); - IEnumerable GetOverriddenItemIndices(); + IEnumerable GetOverriddenItemIndices(); - IEnumerable GetOverriddenKeyIndices(); + IEnumerable GetOverriddenKeyIndices(); } } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetBoxedNode.cs b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetBoxedNode.cs index 5cca96c2ad..8ff3c19d0c 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetBoxedNode.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetBoxedNode.cs @@ -34,13 +34,13 @@ public AssetBoxedNode([NotNull] INodeBuilder nodeBuilder, object value, Guid gui [CanBeNull] public IGraphNode GetContent([NotNull] string key) => ex.GetContent(key); - public void ResetOverrideRecursively() => ex.ResetOverrideRecursively(Index.Empty); + public void ResetOverrideRecursively() => ex.ResetOverrideRecursively(NodeIndex.Empty); - public void ResetOverrideRecursively(Index indexToReset) => ex.ResetOverrideRecursively(indexToReset); + public void ResetOverrideRecursively(NodeIndex indexToReset) => ex.ResetOverrideRecursively(indexToReset); - public void OverrideItem(bool isOverridden, Index index) => ex.OverrideItem(isOverridden, index); + public void OverrideItem(bool isOverridden, NodeIndex index) => ex.OverrideItem(isOverridden, index); - public void OverrideKey(bool isOverridden, Index index) => ex.OverrideKey(isOverridden, index); + public void OverrideKey(bool isOverridden, NodeIndex index) => ex.OverrideKey(isOverridden, index); public void OverrideDeletedItem(bool isOverridden, ItemId deletedId) => ex.OverrideDeletedItem(isOverridden, deletedId); @@ -48,39 +48,39 @@ public AssetBoxedNode([NotNull] INodeBuilder nodeBuilder, object value, Guid gui public void Restore(object restoredItem, ItemId id) => ex.Restore(restoredItem, id); - public void Restore(object restoredItem, Index index, ItemId id) => ex.Restore(restoredItem, index, id); + public void Restore(object restoredItem, NodeIndex index, ItemId id) => ex.Restore(restoredItem, index, id); - public void RemoveAndDiscard(object item, Index itemIndex, ItemId id) => ex.RemoveAndDiscard(item, itemIndex, id); + public void RemoveAndDiscard(object item, NodeIndex itemIndex, ItemId id) => ex.RemoveAndDiscard(item, itemIndex, id); - public OverrideType GetItemOverride(Index index) => ex.GetItemOverride(index); + public OverrideType GetItemOverride(NodeIndex index) => ex.GetItemOverride(index); - public OverrideType GetKeyOverride(Index index) => ex.GetKeyOverride(index); + public OverrideType GetKeyOverride(NodeIndex index) => ex.GetKeyOverride(index); - public bool IsItemInherited(Index index) => ex.IsItemInherited(index); + public bool IsItemInherited(NodeIndex index) => ex.IsItemInherited(index); - public bool IsKeyInherited(Index index) => ex.IsKeyInherited(index); + public bool IsKeyInherited(NodeIndex index) => ex.IsKeyInherited(index); - public bool IsItemOverridden(Index index) => ex.IsItemOverridden(index); + public bool IsItemOverridden(NodeIndex index) => ex.IsItemOverridden(index); public bool IsItemOverriddenDeleted(ItemId id) => ex.IsItemOverriddenDeleted(id); - public bool IsKeyOverridden(Index index) => ex.IsKeyOverridden(index); + public bool IsKeyOverridden(NodeIndex index) => ex.IsKeyOverridden(index); - public IEnumerable GetOverriddenItemIndices() => ex.GetOverriddenItemIndices(); + public IEnumerable GetOverriddenItemIndices() => ex.GetOverriddenItemIndices(); - public IEnumerable GetOverriddenKeyIndices() => ex.GetOverriddenKeyIndices(); + public IEnumerable GetOverriddenKeyIndices() => ex.GetOverriddenKeyIndices(); - public ItemId IndexToId(Index index) => ex.IndexToId(index); + public ItemId IndexToId(NodeIndex index) => ex.IndexToId(index); - public bool TryIndexToId(Index index, out ItemId id) => ex.TryIndexToId(index, out id); + public bool TryIndexToId(NodeIndex index, out ItemId id) => ex.TryIndexToId(index, out id); public bool HasId(ItemId id) => ex.HasId(id); - public Index IdToIndex(ItemId id) => ex.IdToIndex(id); + public NodeIndex IdToIndex(ItemId id) => ex.IdToIndex(id); - public bool TryIdToIndex(ItemId id, out Index index) => ex.TryIdToIndex(id, out index); + public bool TryIdToIndex(ItemId id, out NodeIndex index) => ex.TryIdToIndex(id, out index); - IAssetObjectNode IAssetObjectNode.IndexedTarget(Index index) => (IAssetObjectNode)IndexedTarget(index); + IAssetObjectNode IAssetObjectNode.IndexedTarget(NodeIndex index) => (IAssetObjectNode)IndexedTarget(index); void IAssetObjectNodeInternal.DisconnectOverriddenDeletedItem(ItemId deletedId) => ex.DisconnectOverriddenDeletedItem(deletedId); diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetMemberNode.cs b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetMemberNode.cs index 91a89efbe8..0a3203ad74 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetMemberNode.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetMemberNode.cs @@ -69,18 +69,18 @@ public void OverrideContent(bool isOverridden) /// public void ResetOverrideRecursively() { - PropertyGraph.ResetAllOverridesRecursively(this, Index.Empty); + PropertyGraph.ResetAllOverridesRecursively(this, NodeIndex.Empty); } private void ContentChanged(object sender, [NotNull] MemberNodeChangeEventArgs e) { - // Make sure that we have item ids everywhere we're supposed to. - AssetCollectionItemIdHelper.GenerateMissingItemIds(e.Member.Retrieve()); - var node = (AssetMemberNode)e.Member; if (node.IsNonIdentifiableCollectionContent) return; + // Make sure that we have item ids everywhere we're supposed to. + AssetCollectionItemIdHelper.GenerateMissingItemIds(e.Member.Retrieve()); + // Don't update override if propagation from base is disabled. if (PropertyGraph?.Container == null || PropertyGraph?.Container?.PropagateChangesFromBase == false) return; diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNode.cs b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNode.cs index 18ef0a18f2..14498b848e 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNode.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNode.cs @@ -35,13 +35,13 @@ public AssetObjectNode([NotNull] INodeBuilder nodeBuilder, object value, Guid gu [CanBeNull] public IGraphNode GetContent([NotNull] string key) => ex.GetContent(key); - public void ResetOverrideRecursively() => ex.ResetOverrideRecursively(Index.Empty); + public void ResetOverrideRecursively() => ex.ResetOverrideRecursively(NodeIndex.Empty); - public void ResetOverrideRecursively(Index indexToReset) => ex.ResetOverrideRecursively(indexToReset); + public void ResetOverrideRecursively(NodeIndex indexToReset) => ex.ResetOverrideRecursively(indexToReset); - public void OverrideItem(bool isOverridden, Index index) => ex.OverrideItem(isOverridden, index); + public void OverrideItem(bool isOverridden, NodeIndex index) => ex.OverrideItem(isOverridden, index); - public void OverrideKey(bool isOverridden, Index index) => ex.OverrideKey(isOverridden, index); + public void OverrideKey(bool isOverridden, NodeIndex index) => ex.OverrideKey(isOverridden, index); public void OverrideDeletedItem(bool isOverridden, ItemId deletedId) => ex.OverrideDeletedItem(isOverridden, deletedId); @@ -49,39 +49,39 @@ public AssetObjectNode([NotNull] INodeBuilder nodeBuilder, object value, Guid gu public void Restore(object restoredItem, ItemId id) => ex.Restore(restoredItem, id); - public void Restore(object restoredItem, Index index, ItemId id) => ex.Restore(restoredItem, index, id); + public void Restore(object restoredItem, NodeIndex index, ItemId id) => ex.Restore(restoredItem, index, id); - public void RemoveAndDiscard(object item, Index itemIndex, ItemId id) => ex.RemoveAndDiscard(item, itemIndex, id); + public void RemoveAndDiscard(object item, NodeIndex itemIndex, ItemId id) => ex.RemoveAndDiscard(item, itemIndex, id); - public OverrideType GetItemOverride(Index index) => ex.GetItemOverride(index); + public OverrideType GetItemOverride(NodeIndex index) => ex.GetItemOverride(index); - public OverrideType GetKeyOverride(Index index) => ex.GetKeyOverride(index); + public OverrideType GetKeyOverride(NodeIndex index) => ex.GetKeyOverride(index); - public bool IsItemInherited(Index index) => ex.IsItemInherited(index); + public bool IsItemInherited(NodeIndex index) => ex.IsItemInherited(index); - public bool IsKeyInherited(Index index) => ex.IsKeyInherited(index); + public bool IsKeyInherited(NodeIndex index) => ex.IsKeyInherited(index); - public bool IsItemOverridden(Index index) => ex.IsItemOverridden(index); + public bool IsItemOverridden(NodeIndex index) => ex.IsItemOverridden(index); public bool IsItemOverriddenDeleted(ItemId id) => ex.IsItemOverriddenDeleted(id); - public bool IsKeyOverridden(Index index) => ex.IsKeyOverridden(index); + public bool IsKeyOverridden(NodeIndex index) => ex.IsKeyOverridden(index); - public IEnumerable GetOverriddenItemIndices() => ex.GetOverriddenItemIndices(); + public IEnumerable GetOverriddenItemIndices() => ex.GetOverriddenItemIndices(); - public IEnumerable GetOverriddenKeyIndices() => ex.GetOverriddenKeyIndices(); + public IEnumerable GetOverriddenKeyIndices() => ex.GetOverriddenKeyIndices(); - public ItemId IndexToId(Index index) => ex.IndexToId(index); + public ItemId IndexToId(NodeIndex index) => ex.IndexToId(index); - public bool TryIndexToId(Index index, out ItemId id) => ex.TryIndexToId(index, out id); + public bool TryIndexToId(NodeIndex index, out ItemId id) => ex.TryIndexToId(index, out id); public bool HasId(ItemId id) => ex.HasId(id); - public Index IdToIndex(ItemId id) => ex.IdToIndex(id); + public NodeIndex IdToIndex(ItemId id) => ex.IdToIndex(id); - public bool TryIdToIndex(ItemId id, out Index index) => ex.TryIdToIndex(id, out index); + public bool TryIdToIndex(ItemId id, out NodeIndex index) => ex.TryIdToIndex(id, out index); - IAssetObjectNode IAssetObjectNode.IndexedTarget(Index index) => (IAssetObjectNode)IndexedTarget(index); + IAssetObjectNode IAssetObjectNode.IndexedTarget(NodeIndex index) => (IAssetObjectNode)IndexedTarget(index); void IAssetObjectNodeInternal.DisconnectOverriddenDeletedItem(ItemId deletedId) => ex.DisconnectOverriddenDeletedItem(deletedId); diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNodeExtended.cs b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNodeExtended.cs index 97a9557989..827215908f 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNodeExtended.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Internal/AssetObjectNodeExtended.cs @@ -51,13 +51,13 @@ public IGraphNode GetContent([NotNull] string key) } /// - public void ResetOverrideRecursively(Index indexToReset) + public void ResetOverrideRecursively(NodeIndex indexToReset) { OverrideItem(false, indexToReset); PropertyGraph.ResetAllOverridesRecursively(node, indexToReset); } - public void OverrideItem(bool isOverridden, Index index) + public void OverrideItem(bool isOverridden, NodeIndex index) { node.NotifyOverrideChanging(); var id = IndexToId(index); @@ -65,7 +65,7 @@ public void OverrideItem(bool isOverridden, Index index) node.NotifyOverrideChanged(); } - public void OverrideKey(bool isOverridden, Index index) + public void OverrideKey(bool isOverridden, NodeIndex index) { node.NotifyOverrideChanging(); var id = IndexToId(index); @@ -136,7 +136,7 @@ public void Restore(object restoredItem, ItemId id) node.Add(restoredItem); } - public void Restore(object restoredItem, Index index, ItemId id) + public void Restore(object restoredItem, NodeIndex index, ItemId id) { restoringId = id; node.Add(restoredItem, index); @@ -149,7 +149,7 @@ public void Restore(object restoredItem, Index index, ItemId id) } } - public void RemoveAndDiscard(object item, Index itemIndex, ItemId id) + public void RemoveAndDiscard(object item, NodeIndex itemIndex, ItemId id) { node.Remove(item, itemIndex); CollectionItemIdentifiers ids; @@ -160,7 +160,7 @@ public void RemoveAndDiscard(object item, Index itemIndex, ItemId id) } } - public OverrideType GetItemOverride(Index index) + public OverrideType GetItemOverride(NodeIndex index) { var result = OverrideType.Base; ItemId id; @@ -169,7 +169,7 @@ public OverrideType GetItemOverride(Index index) return itemOverrides.TryGetValue(id, out result) ? result : OverrideType.Base; } - public OverrideType GetKeyOverride(Index index) + public OverrideType GetKeyOverride(NodeIndex index) { var result = OverrideType.Base; ItemId id; @@ -178,17 +178,17 @@ public OverrideType GetKeyOverride(Index index) return keyOverrides.TryGetValue(id, out result) ? result : OverrideType.Base; } - public bool IsItemInherited(Index index) + public bool IsItemInherited(NodeIndex index) { return BaseNode != null && !IsItemOverridden(index); } - public bool IsKeyInherited(Index index) + public bool IsKeyInherited(NodeIndex index) { return BaseNode != null && !IsKeyOverridden(index); } - public bool IsItemOverridden(Index index) + public bool IsItemOverridden(NodeIndex index) { OverrideType result; ItemId id; @@ -203,7 +203,7 @@ public bool IsItemOverriddenDeleted(ItemId id) return IsItemDeleted(id) && itemOverrides.TryGetValue(id, out result) && (result & OverrideType.New) == OverrideType.New; } - public bool IsKeyOverridden(Index index) + public bool IsKeyOverridden(NodeIndex index) { OverrideType result; ItemId id; @@ -212,7 +212,7 @@ public bool IsKeyOverridden(Index index) return keyOverrides.TryGetValue(id, out result) && (result & OverrideType.New) == OverrideType.New; } - public IEnumerable GetOverriddenItemIndices() + public IEnumerable GetOverriddenItemIndices() { if (BaseNode == null) yield break; @@ -235,7 +235,7 @@ public IEnumerable GetOverriddenItemIndices() } } - public IEnumerable GetOverriddenKeyIndices() + public IEnumerable GetOverriddenKeyIndices() { if (BaseNode == null) yield break; @@ -260,22 +260,22 @@ public IEnumerable GetOverriddenKeyIndices() public bool HasId(ItemId id) { - Index index; + NodeIndex index; return TryIdToIndex(id, out index); } - public Index IdToIndex(ItemId id) + public NodeIndex IdToIndex(ItemId id) { - Index index; + NodeIndex index; if (!TryIdToIndex(id, out index)) throw new InvalidOperationException("No Collection item identifier associated to the given collection."); return index; } - public bool TryIdToIndex(ItemId id, out Index index) + public bool TryIdToIndex(ItemId id, out NodeIndex index) { if (id == ItemId.Empty) { - index = Index.Empty; + index = NodeIndex.Empty; return true; } @@ -283,24 +283,24 @@ public bool TryIdToIndex(ItemId id, out Index index) CollectionItemIdentifiers ids; if (TryGetCollectionItemIds(collection, out ids)) { - index = new Index(ids.GetKey(id)); + index = new NodeIndex(ids.GetKey(id)); return !index.IsEmpty; } - index = Index.Empty; + index = NodeIndex.Empty; return false; } - public ItemId IndexToId(Index index) + public ItemId IndexToId(NodeIndex index) { ItemId id; if (!TryIndexToId(index, out id)) throw new InvalidOperationException("No Collection item identifier associated to the given collection."); return id; } - public bool TryIndexToId(Index index, out ItemId id) + public bool TryIndexToId(NodeIndex index, out ItemId id) { - if (index == Index.Empty) + if (index == NodeIndex.Empty) { id = ItemId.Empty; return true; @@ -338,15 +338,31 @@ internal void OnItemChanged(object sender, ItemChangeEventArgs e) switch (e.ChangeType) { case ContentChangeType.CollectionUpdate: + { + if (collectionDescriptor is SetDescriptor setDescriptor) + { + itemIds.Delete(e.OldValue); + object newValue = e.NewValue; + if (newValue == null && !setDescriptor.ElementType.IsNullable()) + { + newValue = setDescriptor.ElementType.Default(); + } + if (!itemIds.ContainsKey(newValue)) + { + var itemId = restoringId != ItemId.Empty ? restoringId : ItemId.New(); + itemIds[newValue] = itemId; + } + } break; + } case ContentChangeType.CollectionAdd: { // Compute the id we will add for this item var itemId = restoringId != ItemId.Empty ? restoringId : ItemId.New(); // Add the id to the proper location (insert or add) - if (collectionDescriptor != null) + if (collectionDescriptor != null && collectionDescriptor.Category != DescriptorCategory.Set) { - if (e.Index == Index.Empty) + if (e.Index == NodeIndex.Empty) throw new InvalidOperationException("An item has been added to a collection that does not have a predictable Add. Consider using NonIdentifiableCollectionItemsAttribute on this collection."); itemIds.Insert(e.Index.Int, itemId); @@ -362,7 +378,14 @@ internal void OnItemChanged(object sender, ItemChangeEventArgs e) var itemId = itemIds[e.Index.Value]; // update isOverriding, it should be true only if the item being removed exist in the base. isOverriding = isOverriding && baseNode.HasId(itemId); - removedId = collectionDescriptor != null ? itemIds.DeleteAndShift(e.Index.Int, isOverriding) : itemIds.Delete(e.Index.Value, isOverriding); + if (collectionDescriptor != null && collectionDescriptor.Category != DescriptorCategory.Set) + { + removedId = itemIds.DeleteAndShift(e.Index.Int, isOverriding); + } + else + { + removedId = itemIds.Delete(e.Index.Value, isOverriding); + } break; } default: diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Internal/IAssetObjectNodeInternal.cs b/sources/assets/Xenko.Core.Assets.Quantum/Internal/IAssetObjectNodeInternal.cs index b6b16e0e14..90896ecec4 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Internal/IAssetObjectNodeInternal.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Internal/IAssetObjectNodeInternal.cs @@ -11,9 +11,9 @@ namespace Xenko.Core.Assets.Quantum.Internal /// internal interface IAssetObjectNodeInternal : IAssetObjectNode, IAssetNodeInternal { - OverrideType GetItemOverride(Index index); + OverrideType GetItemOverride(NodeIndex index); - OverrideType GetKeyOverride(Index index); + OverrideType GetKeyOverride(NodeIndex index); /// /// Removes the given from the list of overridden deleted items in the underlying , but keep diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/AssetGraphVisitorBase.cs b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/AssetGraphVisitorBase.cs index fa81c7e6f4..8c6c0c83e8 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/AssetGraphVisitorBase.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/AssetGraphVisitorBase.cs @@ -31,7 +31,7 @@ protected override bool ShouldVisitMemberTarget(IMemberNode member) } /// - protected override bool ShouldVisitTargetItem(IObjectNode collectionNode, Index index) + protected override bool ShouldVisitTargetItem(IObjectNode collectionNode, NodeIndex index) { return base.ShouldVisitTargetItem(collectionNode, index) && !PropertyGraphDefinition.IsTargetItemObjectReference(collectionNode, index, collectionNode.Retrieve(index)); } diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ClearObjectReferenceVisitor.cs b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ClearObjectReferenceVisitor.cs index 65b4a607a6..8d0734034b 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ClearObjectReferenceVisitor.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ClearObjectReferenceVisitor.cs @@ -14,7 +14,7 @@ namespace Xenko.Core.Assets.Quantum.Visitors public class ClearObjectReferenceVisitor : IdentifiableObjectVisitorBase { private readonly HashSet targetIds; - private readonly Func shouldClearReference; + private readonly Func shouldClearReference; /// /// Initializes a new instance of the class. @@ -22,7 +22,7 @@ public class ClearObjectReferenceVisitor : IdentifiableObjectVisitorBase /// The used to analyze object references. /// The identifiers of the objects for which to clear references. /// A method allowing to select which object reference to clear. If null, all object references to the given id will be cleared. - public ClearObjectReferenceVisitor([NotNull] AssetPropertyGraphDefinition propertyGraphDefinition, [NotNull] IEnumerable targetIds, [CanBeNull] Func shouldClearReference = null) + public ClearObjectReferenceVisitor([NotNull] AssetPropertyGraphDefinition propertyGraphDefinition, [NotNull] IEnumerable targetIds, [CanBeNull] Func shouldClearReference = null) : base(propertyGraphDefinition) { if (propertyGraphDefinition == null) throw new ArgumentNullException(nameof(propertyGraphDefinition)); @@ -39,7 +39,7 @@ protected override void ProcessIdentifiableMembers(IIdentifiable identifiable, I if (PropertyGraphDefinition.IsMemberTargetObjectReference(member, identifiable)) { - if (shouldClearReference?.Invoke(member, Index.Empty) ?? true) + if (shouldClearReference?.Invoke(member, NodeIndex.Empty) ?? true) { member.Update(null); } @@ -48,7 +48,7 @@ protected override void ProcessIdentifiableMembers(IIdentifiable identifiable, I } /// - protected override void ProcessIdentifiableItems(IIdentifiable identifiable, IObjectNode collection, Index index) + protected override void ProcessIdentifiableItems(IIdentifiable identifiable, IObjectNode collection, NodeIndex index) { if (!targetIds.Contains(identifiable.Id)) return; diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ExternalReferenceCollector.cs b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ExternalReferenceCollector.cs index 2ab911bed8..2d22adb20d 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ExternalReferenceCollector.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/ExternalReferenceCollector.cs @@ -74,7 +74,7 @@ protected override void ProcessIdentifiableMembers(IIdentifiable identifiable, I internalReferences.Add(identifiable); } - protected override void ProcessIdentifiableItems(IIdentifiable identifiable, IObjectNode collection, Index index) + protected override void ProcessIdentifiableItems(IIdentifiable identifiable, IObjectNode collection, NodeIndex index) { if (propertyGraphDefinition.IsTargetItemObjectReference(collection, index, identifiable)) { diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/IdentifiableObjectVisitorBase.cs b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/IdentifiableObjectVisitorBase.cs index a5051af5dd..8b33502474 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Visitors/IdentifiableObjectVisitorBase.cs +++ b/sources/assets/Xenko.Core.Assets.Quantum/Visitors/IdentifiableObjectVisitorBase.cs @@ -48,7 +48,7 @@ protected override void VisitItemTargets(IObjectNode node) /// The identifiable instance to process. /// The object node representing the collection referencing the identifiable instance. /// The index at which the identifiable instance is referenced. - protected abstract void ProcessIdentifiableItems([NotNull] IIdentifiable identifiable, IObjectNode collection, Index index); + protected abstract void ProcessIdentifiableItems([NotNull] IIdentifiable identifiable, IObjectNode collection, NodeIndex index); private void CheckAndProcessIdentifiableMember([NotNull] IMemberNode member) { @@ -59,7 +59,7 @@ private void CheckAndProcessIdentifiableMember([NotNull] IMemberNode member) ProcessIdentifiableMembers(identifiable, member); } - private void CheckAndProcessIdentifiableItem([NotNull] IObjectNode collection, Index index) + private void CheckAndProcessIdentifiableItem([NotNull] IObjectNode collection, NodeIndex index) { var identifiable = collection.Retrieve(index) as IIdentifiable; if (identifiable == null) diff --git a/sources/assets/Xenko.Core.Assets.Quantum/Xenko.Core.Assets.Quantum.csproj b/sources/assets/Xenko.Core.Assets.Quantum/Xenko.Core.Assets.Quantum.csproj index a871e0b0f8..24dd38e068 100644 --- a/sources/assets/Xenko.Core.Assets.Quantum/Xenko.Core.Assets.Quantum.csproj +++ b/sources/assets/Xenko.Core.Assets.Quantum/Xenko.Core.Assets.Quantum.csproj @@ -1,6 +1,6 @@ - + - + 8.0.30703 2.0 @@ -13,17 +13,18 @@ - - - + + + + - - + + - + @@ -38,5 +39,5 @@ - + \ No newline at end of file diff --git a/sources/assets/Xenko.Core.Assets.Tests/Xenko.Core.Assets.Tests.csproj b/sources/assets/Xenko.Core.Assets.Tests/Xenko.Core.Assets.Tests.csproj index c14dc2f875..74c887e917 100644 --- a/sources/assets/Xenko.Core.Assets.Tests/Xenko.Core.Assets.Tests.csproj +++ b/sources/assets/Xenko.Core.Assets.Tests/Xenko.Core.Assets.Tests.csproj @@ -1,6 +1,6 @@ - + Exe true @@ -75,5 +75,5 @@ - + \ No newline at end of file diff --git a/sources/assets/Xenko.Core.Assets/Analysis/AssetAnalysis.cs b/sources/assets/Xenko.Core.Assets/Analysis/AssetAnalysis.cs index 9fc9c0c3cd..0efccb5dfe 100644 --- a/sources/assets/Xenko.Core.Assets/Analysis/AssetAnalysis.cs +++ b/sources/assets/Xenko.Core.Assets/Analysis/AssetAnalysis.cs @@ -132,7 +132,7 @@ internal static void UpdateAssetReferences(AssetItem assetItem, IEnumerable x.FindAsset(contentReference.Location) != null); if (packageFound != null) diff --git a/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencies.cs b/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencies.cs index 035356a3ae..baf45ec15e 100644 --- a/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencies.cs +++ b/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencies.cs @@ -295,8 +295,8 @@ private void AddLink(ref Dictionary dictionary, AssetLink co dictionary = new Dictionary(); var id = contentLink.Element.Id; - if (dictionary.ContainsKey(id)) - contentLink.Type |= dictionary[id].Type; + if (dictionary.TryGetValue(id, out var existingLink)) + contentLink.Type |= existingLink.Type; dictionary[id] = contentLink; } diff --git a/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencyManager.cs b/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencyManager.cs index 079ae1a31d..dd0ebf6425 100644 --- a/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencyManager.cs +++ b/sources/assets/Xenko.Core.Assets/Analysis/AssetDependencyManager.cs @@ -700,6 +700,14 @@ public IEnumerable GetDependencies(AssetItem item) return dependencies.BrokenLinksOut; } + public override void VisitArray(Array array, ArrayDescriptor descriptor) + { + if (!IsArrayOfPrimitiveType(descriptor)) + { + base.VisitArray(array, descriptor); + } + } + public override void VisitObject(object obj, ObjectDescriptor descriptor, bool visitMembers) { // references and base diff --git a/sources/assets/Xenko.Core.Assets/Analysis/AssetReferenceAnalysis.cs b/sources/assets/Xenko.Core.Assets/Analysis/AssetReferenceAnalysis.cs index 7845f9404a..569b04bb4b 100644 --- a/sources/assets/Xenko.Core.Assets/Analysis/AssetReferenceAnalysis.cs +++ b/sources/assets/Xenko.Core.Assets/Analysis/AssetReferenceAnalysis.cs @@ -240,6 +240,53 @@ public override void VisitDictionaryKeyValue(object dictionaryObj, DictionaryDes } } + public override void VisitSetItem(IEnumerable setObject, SetDescriptor descriptor, object item, ITypeDescriptor itemDescriptor) + { + base.VisitSetItem(setObject, descriptor, item, itemDescriptor); + var assetReference = item as AssetReference; + var attachedReference = AttachedReferenceManager.GetAttachedReference(item); + if (assetReference != null) + { + AddLink(assetReference, + (guid, location) => + { + var link = AssetReference.New(guid ?? assetReference.Id, location); + descriptor.Add(setObject, link); + return link; + }); + } + else if (attachedReference != null) + { + AddLink(attachedReference, + (guid, location) => + { + object link = guid.HasValue && guid.Value != AssetId.Empty ? AttachedReferenceManager.CreateProxyObject(descriptor.ElementType, guid.Value, location) : null; + descriptor.Add(setObject, link); + return link; + }); + } + else if (item is UFile) + { + AddLink(item, + (guid, location) => + { + var link = new UFile(location); + descriptor.Add(setObject, link); + return link; + }); + } + else if (item is UDirectory) + { + AddLink(item, + (guid, location) => + { + var link = new UDirectory(location); + descriptor.Add(setObject, link); + return link; + }); + } + } + public override void VisitObjectMember(object container, ObjectDescriptor containerDescriptor, IMemberDescriptor member, object value) { base.VisitObjectMember(container, containerDescriptor, member, value); diff --git a/sources/assets/Xenko.Core.Assets/Analysis/BuildAssetNode.cs b/sources/assets/Xenko.Core.Assets/Analysis/BuildAssetNode.cs index d8a43bcc60..c6d9805e9f 100644 --- a/sources/assets/Xenko.Core.Assets/Analysis/BuildAssetNode.cs +++ b/sources/assets/Xenko.Core.Assets/Analysis/BuildAssetNode.cs @@ -262,6 +262,14 @@ public IEnumerable GetDependencies(AssetItem item) return references; } + public override void VisitArray(Array array, ArrayDescriptor descriptor) + { + if (!IsArrayOfPrimitiveType(descriptor)) + { + base.VisitArray(array, descriptor); + } + } + public override void VisitObject(object obj, ObjectDescriptor descriptor, bool visitMembers) { var enteringRuntimeObject = visitedRuntimeObject == null && types.Any(x => x.IsInstanceOfType(obj)); diff --git a/sources/assets/Xenko.Core.Assets/Analysis/CollectionItemIdsAnalysis.cs b/sources/assets/Xenko.Core.Assets/Analysis/CollectionItemIdsAnalysis.cs index 1e0a1a8c6d..a00fa9edae 100644 --- a/sources/assets/Xenko.Core.Assets/Analysis/CollectionItemIdsAnalysis.cs +++ b/sources/assets/Xenko.Core.Assets/Analysis/CollectionItemIdsAnalysis.cs @@ -47,18 +47,24 @@ public override void VisitArray(Array array, ArrayDescriptor descriptor) base.VisitArray(array, descriptor); } - public override void VisitCollection(IEnumerable collection, CollectionDescriptor descriptor) - { - Fixup(collection); - base.VisitCollection(collection, descriptor); - } - public override void VisitDictionary(object dictionary, DictionaryDescriptor descriptor) { Fixup(dictionary); base.VisitDictionary(dictionary, descriptor); } + public override void VisitSet(IEnumerable set, SetDescriptor descriptor) + { + Fixup(set); + base.VisitSet(set, descriptor); + } + + public override void VisitCollection(IEnumerable collection, CollectionDescriptor descriptor) + { + Fixup(collection); + base.VisitCollection(collection, descriptor); + } + /// /// Fixes up the of a collection by generating new ids if there are any duplicate. /// diff --git a/sources/assets/Xenko.Core.Assets/AssetImporterParameters.cs b/sources/assets/Xenko.Core.Assets/AssetImporterParameters.cs index f1156faf3e..abcf5dd772 100644 --- a/sources/assets/Xenko.Core.Assets/AssetImporterParameters.cs +++ b/sources/assets/Xenko.Core.Assets/AssetImporterParameters.cs @@ -24,6 +24,7 @@ public class AssetImporterParameters /// public AssetImporterParameters() { + InputParameters = new PropertyCollection(); SelectedOutputTypes = new Dictionary(); } @@ -54,6 +55,12 @@ public AssetImporterParameters(IEnumerable supportedTypes) : this() } } + /// + /// Gets the import input parameters. + /// + /// The import input parameters. + public PropertyCollection InputParameters { get; private set; } + /// /// Gets the selected output types. /// diff --git a/sources/assets/Xenko.Core.Assets/AssetItemExtensions.cs b/sources/assets/Xenko.Core.Assets/AssetItemExtensions.cs index 34e2ddc671..636cdf441a 100644 --- a/sources/assets/Xenko.Core.Assets/AssetItemExtensions.cs +++ b/sources/assets/Xenko.Core.Assets/AssetItemExtensions.cs @@ -29,7 +29,7 @@ public static string GetProjectInclude([NotNull] this AssetItem assetItem) [NotNull] public static UFile GetGeneratedAbsolutePath([NotNull] this AssetItem assetItem) { - return new UFile(new UFile(assetItem.FullPath).GetFullPathWithoutExtension() + ".cs"); + return new UFile(assetItem.FullPath + ".cs"); } /// @@ -39,7 +39,7 @@ public static UFile GetGeneratedAbsolutePath([NotNull] this AssetItem assetItem) /// public static string GetGeneratedInclude([NotNull] this AssetItem assetItem) { - return Path.ChangeExtension(GetProjectInclude(assetItem), ".cs"); + return GetProjectInclude(assetItem) + ".cs"; } } } diff --git a/sources/assets/Xenko.Core.Assets/AssetReferenceDataSerializer.cs b/sources/assets/Xenko.Core.Assets/AssetReferenceDataSerializer.cs index 3c2b204e81..9504032086 100644 --- a/sources/assets/Xenko.Core.Assets/AssetReferenceDataSerializer.cs +++ b/sources/assets/Xenko.Core.Assets/AssetReferenceDataSerializer.cs @@ -17,7 +17,7 @@ public override void Serialize(ref AssetReference assetReference, ArchiveMode mo if (mode == ArchiveMode.Serialize) { stream.Write(assetReference.Id); - stream.Write(assetReference.Location); + stream.Write(assetReference.Location ?? ""); } else { diff --git a/sources/assets/Xenko.Core.Assets/AssetRegistry.cs b/sources/assets/Xenko.Core.Assets/AssetRegistry.cs index c87cd88e10..2ef2c4c726 100644 --- a/sources/assets/Xenko.Core.Assets/AssetRegistry.cs +++ b/sources/assets/Xenko.Core.Assets/AssetRegistry.cs @@ -11,6 +11,7 @@ using Xenko.Core.Serialization.Contents; using Xenko.Core.VisualStudio; using Xenko.Core.Yaml.Serialization; +using Xenko.Core.Serialization; namespace Xenko.Core.Assets { @@ -289,6 +290,14 @@ public static IReadOnlyList GetAssetTypes(Type contentType) lock (RegistryLock) { var currentType = contentType; + if (UrlReferenceHelper.IsGenericUrlReferenceType(currentType)) + { + currentType = UrlReferenceHelper.GetTargetContentType(currentType); + } + else if (UrlReferenceHelper.IsUrlReferenceType(contentType)) + { + return GetPublicTypes().Where(t => IsAssetType(t)).ToList(); + } List assetTypes; return ContentToAssetTypes.TryGetValue(currentType, out assetTypes) ? new List(assetTypes) : new List(); } diff --git a/sources/assets/Xenko.Core.Assets/CollectionIdGenerator.cs b/sources/assets/Xenko.Core.Assets/CollectionIdGenerator.cs index 6fa4a1cffa..497a93eaf1 100644 --- a/sources/assets/Xenko.Core.Assets/CollectionIdGenerator.cs +++ b/sources/assets/Xenko.Core.Assets/CollectionIdGenerator.cs @@ -66,7 +66,11 @@ public override void VisitArray(Array array, ArrayDescriptor descriptor) itemIds.Add(i, ItemId.New()); } } - base.VisitArray(array, descriptor); + + if (!IsArrayOfPrimitiveType(descriptor)) + { + base.VisitArray(array, descriptor); + } } public override void VisitCollection(IEnumerable collection, CollectionDescriptor descriptor) @@ -80,7 +84,11 @@ public override void VisitCollection(IEnumerable collection, CollectionDescripto itemIds.Add(i, ItemId.New()); } } - base.VisitCollection(collection, descriptor); + + if (!descriptor.ElementType.IsValueType) + { + base.VisitCollection(collection, descriptor); + } } public override void VisitDictionary(object dictionary, DictionaryDescriptor descriptor) @@ -93,7 +101,20 @@ public override void VisitDictionary(object dictionary, DictionaryDescriptor des itemIds.Add(element.Key, ItemId.New()); } } - base.VisitDictionary(dictionary, descriptor); + } + + public override void VisitSet(IEnumerable set, SetDescriptor descriptor) + { + if (ShouldGenerateItemIdCollection(set)) + { + IEnumerator enumerator = (set as IEnumerable).GetEnumerator(); + var itemIds = CollectionItemIdHelper.GetCollectionItemIds(set); + while (enumerator.MoveNext()) + { + itemIds.Add(enumerator.Current, ItemId.New()); + } + } + base.VisitSet(set, descriptor); } private bool ShouldGenerateItemIdCollection(object collection) diff --git a/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerContext.cs b/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerContext.cs index f370201c4f..a6eb0899f0 100644 --- a/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerContext.cs +++ b/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerContext.cs @@ -21,6 +21,11 @@ public class AssetCompilerContext : CompilerContext /// public string BuildConfiguration { get; set; } + /// + /// Gets or sets the entry package this build was called upon. + /// + public Package Package { get; set; } + /// /// Gets or sets the target platform for compiler is being used for. /// diff --git a/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerRegistry.cs b/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerRegistry.cs index 7035e94e9e..3d7d7155dd 100644 --- a/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerRegistry.cs +++ b/sources/assets/Xenko.Core.Assets/Compiler/AssetCompilerRegistry.cs @@ -181,27 +181,34 @@ private void RegisterAssembly(Assembly assembly) private void RegisterCompilersFromAssembly(Assembly assembly) { // Process Asset types. - foreach (var type in assembly.GetTypes()) + try { - // Only process Asset types - if (!typeof(IAssetCompiler).IsAssignableFrom(type) || !type.IsClass) - continue; + foreach (var type in assembly.GetTypes()) + { + // Only process Asset types + if (!typeof(IAssetCompiler).IsAssignableFrom(type) || !type.IsClass) + continue; - // Asset compiler - var compilerAttribute = type.GetCustomAttribute(); + // Asset compiler + var compilerAttribute = type.GetCustomAttribute(); - if (compilerAttribute == null) // no compiler attribute in this asset - continue; + if (compilerAttribute == null) // no compiler attribute in this asset + continue; - try - { - ProcessAttribute(compilerAttribute, type); - } - catch (Exception ex) - { - log.Error($"Unable to instantiate compiler [{compilerAttribute.TypeName}]", ex); + try + { + ProcessAttribute(compilerAttribute, type); + } + catch (Exception ex) + { + log.Error($"Unable to instantiate compiler [{compilerAttribute.TypeName}]", ex); + } } } + catch (Exception e) + { + log.Warning($"Unable to register asset compilers from assembly [{assembly}]"); + } } private void UnregisterAssembly(Assembly assembly) diff --git a/sources/assets/Xenko.Core.Assets/Package.cs b/sources/assets/Xenko.Core.Assets/Package.cs index f08c5c1ccb..14ae4ed7e6 100644 --- a/sources/assets/Xenko.Core.Assets/Package.cs +++ b/sources/assets/Xenko.Core.Assets/Package.cs @@ -118,7 +118,7 @@ public Package() /// /// true if this package is a system package; otherwise, false. [DataMemberIgnore] - public bool IsSystem { get; internal set; } + public bool IsSystem => !(Container is SolutionProject); /// /// Gets or sets the metadata associated with this package. @@ -274,6 +274,23 @@ public bool IsDirty [DataMemberIgnore] public string RootNamespace { get; private set; } + [DataMemberIgnore] + public bool IsImplicitProject + { + get + { + // To keep in sync with LoadProject() .csproj + // Note: Meta is ignored since it is supposedly "read-only" from csproj + return (AssetFolders.Count == 1 && AssetFolders.First().Path == "Assets" + && ResourceFolders.Count == 1 && ResourceFolders.First() == "Resources" + && OutputGroupDirectories.Count == 0 + && ExplicitFolders.Count == 0 + && Bundles.Count == 0 + && RootAssets.Count == 0 + && TemplateFolders.Count == 0); + } + } + /// /// Adds an existing project to this package. /// @@ -612,6 +629,14 @@ public static PackageContainer LoadProject(ILogger log, string filePath) } else { + // Try to get version from NuGet folder + var path = new UFile(filePath); + var nuspecPath = UPath.Combine(path.GetFullDirectory().GetParent(), new UFile(path.GetFileNameWithoutExtension() + ".nuspec")); + if (path.GetFullDirectory().GetDirectoryName() == "xenko" && File.Exists(nuspecPath) + && PackageVersion.TryParse(path.GetFullDirectory().GetParent().GetDirectoryName(), out var packageVersion)) + { + package.Meta.Version = packageVersion; + } return new StandalonePackage(package); } } @@ -1240,7 +1265,7 @@ private static void FindAssetsInProject(ICollection lis if (package.IsSystem) return; var project = package.Container as SolutionProject; - if (project == null || project.FullPath == null || project.Type != ProjectType.Library) + if (project == null || project.FullPath == null) return; string defaultNamespace; diff --git a/sources/assets/Xenko.Core.Assets/PackageCollection.cs b/sources/assets/Xenko.Core.Assets/PackageCollection.cs index 90ffa99fbd..30d5399a53 100644 --- a/sources/assets/Xenko.Core.Assets/PackageCollection.cs +++ b/sources/assets/Xenko.Core.Assets/PackageCollection.cs @@ -141,7 +141,10 @@ public void CopyTo(Package[] array, int arrayIndex) public bool Remove(Package item) { if (item == null) throw new ArgumentNullException("item"); - return packages.Remove(item); + var success = packages.Remove(item); + if (success) + OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item)); + return success; } private void OnCollectionChanged(NotifyCollectionChangedEventArgs e) diff --git a/sources/assets/Xenko.Core.Assets/PackageLoadParameters.cs b/sources/assets/Xenko.Core.Assets/PackageLoadParameters.cs index 474e42902d..0857371e98 100644 --- a/sources/assets/Xenko.Core.Assets/PackageLoadParameters.cs +++ b/sources/assets/Xenko.Core.Assets/PackageLoadParameters.cs @@ -42,6 +42,7 @@ public static bool ShouldUpgrade(PackageUpgradeRequestedAnswer answer) public PackageLoadParameters() { LoadMissingDependencies = true; + RegisterPackageAssemblies = false; LoadAssemblyReferences = true; AutoCompileProjects = true; AutoLoadTemporaryAssets = true; @@ -55,6 +56,11 @@ public PackageLoadParameters() /// true if [load missing dependencies]; otherwise, false. public bool LoadMissingDependencies { get; set; } + /// + /// Register the package's assemblies from the project. + /// + public bool RegisterPackageAssemblies { get; set; } + /// /// Gets or sets a value indicating whether [load assembly references]. /// diff --git a/sources/assets/Xenko.Core.Assets/PackageSession.Dependencies.cs b/sources/assets/Xenko.Core.Assets/PackageSession.Dependencies.cs index 836e3d0b82..ed48d58ab9 100644 --- a/sources/assets/Xenko.Core.Assets/PackageSession.Dependencies.cs +++ b/sources/assets/Xenko.Core.Assets/PackageSession.Dependencies.cs @@ -6,7 +6,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyModel; using NuGet.Commands; +using NuGet.Common; using NuGet.DependencyResolver; using NuGet.LibraryModel; using NuGet.ProjectModel; @@ -20,7 +22,7 @@ namespace Xenko.Core.Assets { partial class PackageSession { - private async Task GenerateRestoreGraph(ILogger log, string projectName, string projectPath) + private async Task GenerateRestoreGraph(Core.Diagnostics.ILogger log, string projectName, string projectPath) { var dgFile = await VSProjectHelper.GenerateRestoreGraphFile(log, projectPath); var dgProvider = new DependencyGraphSpecRequestProvider(new RestoreCommandProvidersCache(), dgFile); @@ -52,13 +54,7 @@ private async Task GenerateRestoreGraph(ILogger log, string var requestProject = request.Request.Project; - var projectRange = new LibraryRange() - { - Name = projectName, - VersionRange = new NuGet.Versioning.VersionRange(requestProject.Version), - TypeConstraint = LibraryDependencyTarget.Project | LibraryDependencyTarget.ExternalProject - }; - + var projectRange = new LibraryRange(projectName, new NuGet.Versioning.VersionRange(requestProject.Version), LibraryDependencyTarget.Project | LibraryDependencyTarget.ExternalProject); var framework = requestProject.TargetFrameworks.First(); var graphs = new List> { @@ -73,7 +69,7 @@ await walker.WalkAsync( } } - private async Task PreLoadPackageDependencies(ILogger log, SolutionProject project, PackageLoadParameters loadParameters) + private async Task PreLoadPackageDependencies(Core.Diagnostics.ILogger log, SolutionProject project, PackageLoadParameters loadParameters) { if (log == null) throw new ArgumentNullException(nameof(log)); if (project == null) throw new ArgumentNullException(nameof(project)); @@ -271,37 +267,7 @@ private async Task PreLoadPackageDependencies(ILogger log, SolutionProject proje } } - project.FlattenedDependencies.Clear(); - project.DirectDependencies.Clear(); - var projectAssetsJsonPath = Path.Combine(project.FullPath.GetFullDirectory(), @"obj", LockFileFormat.AssetsFileName); - if (File.Exists(projectAssetsJsonPath)) - { - var format = new LockFileFormat(); - var projectAssets = format.Read(projectAssetsJsonPath); - - // Update dependencies - foreach (var library in projectAssets.Libraries) - { - project.FlattenedDependencies.Add(new Dependency(library.Name, library.Version.ToPackageVersion(), library.Type == "project" ? DependencyType.Project : DependencyType.Package) { MSBuildProject = library.Type == "project" ? library.MSBuildProject : null }); - } - - foreach (var projectReference in projectAssets.PackageSpec.RestoreMetadata.TargetFrameworks.First().ProjectReferences) - { - var projectName = new UFile(projectReference.ProjectUniqueName).GetFileNameWithoutExtension(); - project.DirectDependencies.Add(new DependencyRange(projectName, null, DependencyType.Project) { MSBuildProject = projectReference.ProjectPath }); - } - - foreach (var dependency in projectAssets.PackageSpec.TargetFrameworks.First().Dependencies) - { - if (dependency.AutoReferenced) - continue; - project.DirectDependencies.Add(new DependencyRange(dependency.Name, dependency.LibraryRange.VersionRange.ToPackageVersionRange(), DependencyType.Package)); - } - - // Load dependency (if external) - - // Compute output path - } + UpdateDependencies(project, true, true); // 1. Load store package foreach (var projectDependency in project.FlattenedDependencies) @@ -324,7 +290,7 @@ private async Task PreLoadPackageDependencies(ILogger log, SolutionProject proje if (file != null && File.Exists(file)) { // Load package - var loadedProject = LoadProject(log, file, true, loadParameters); + var loadedProject = LoadProject(log, file, loadParameters); loadedProject.Package.Meta.Name = projectDependency.Name; loadedProject.Package.Meta.Version = projectDependency.Version; Projects.Add(loadedProject); @@ -365,10 +331,100 @@ private async Task PreLoadPackageDependencies(ILogger log, SolutionProject proje } } + public class ConsoleLogger : NuGet.Common.ILogger + { + public void Log(LogLevel level, string data) + { + WriteDebugLine($"NuGet [{level}]: {data}"); + } + + public void Log(NuGet.Common.ILogMessage message) + { + Log(message.Level, message.Message); + } + + public Task LogAsync(LogLevel level, string data) + { + Log(level, data); + return Task.CompletedTask; + } + + public Task LogAsync(NuGet.Common.ILogMessage message) + { + Log(message); + return Task.CompletedTask; + } + + public void LogDebug(string data) => Log(LogLevel.Debug, data); + public void LogVerbose(string data) => Log(LogLevel.Verbose, data); + public void LogInformation(string data) => Log(LogLevel.Information, data); + public void LogMinimal(string data) => Log(LogLevel.Minimal, data); + public void LogWarning(string data) => Log(LogLevel.Warning, data); + public void LogError(string data) => Log(LogLevel.Error, data); + public void LogInformationSummary(string data) => Log(LogLevel.Information, data); + } + + public static void WriteDebugLine(string line) + { + System.Diagnostics.Debug.WriteLine(line); + Console.WriteLine(line); + Console.Error.WriteLine(line); + } + + public static void UpdateDependencies(SolutionProject project, bool directDependencies, bool flattenedDependencies) + { + if (flattenedDependencies) + project.FlattenedDependencies.Clear(); + if (directDependencies) + project.DirectDependencies.Clear(); + var projectAssetsJsonPath = Path.Combine(project.FullPath.GetFullDirectory(), @"obj", LockFileFormat.AssetsFileName); + if (File.Exists(projectAssetsJsonPath)) + { + var format = new LockFileFormat(); + ConsoleLogger consoleLogger = new ConsoleLogger(); + var projectAssets = format.Read(projectAssetsJsonPath, consoleLogger); + + // Update dependencies + if (flattenedDependencies) + { + foreach (var library in projectAssets.Libraries) + { + var projectDependency = new Dependency(library.Name, library.Version.ToPackageVersion(), library.Type == "project" ? DependencyType.Project : DependencyType.Package) { MSBuildProject = library.Type == "project" ? library.MSBuildProject : null }; + project.FlattenedDependencies.Add(projectDependency); + // Try to resolve package if already loaded + projectDependency.Package = project.Session.Packages.Find(projectDependency); + } + } + + if (directDependencies) + { + PackageSpec ps = projectAssets.PackageSpec; + + if (ps?.RestoreMetadata?.TargetFrameworks != null) + { + foreach (var projectReference in ps.RestoreMetadata.TargetFrameworks.First().ProjectReferences) + { + var projectName = new UFile(projectReference.ProjectUniqueName).GetFileNameWithoutExtension(); + project.DirectDependencies.Add(new DependencyRange(projectName, null, DependencyType.Project) { MSBuildProject = projectReference.ProjectPath }); + } + + foreach (var dependency in ps.TargetFrameworks.First().Dependencies) + { + if (dependency.AutoReferenced) + continue; + project.DirectDependencies.Add(new DependencyRange(dependency.Name, dependency.LibraryRange.VersionRange.ToPackageVersionRange(), DependencyType.Package)); + } + } else { + WriteDebugLine("Warning: " + projectAssets.Path + " couldn't find PackageSpec."); + } + } + } + } + private static RemoteWalkContext CreateRemoteWalkContext(RestoreRequest request, RestoreCollectorLogger logger) { var context = new RemoteWalkContext( - request.CacheContext, + request.CacheContext, request.PackageSourceMapping, logger); foreach (var provider in request.DependencyProviders.LocalProviders) diff --git a/sources/assets/Xenko.Core.Assets/PackageSession.cs b/sources/assets/Xenko.Core.Assets/PackageSession.cs index 09923994c3..d2d790cf92 100644 --- a/sources/assets/Xenko.Core.Assets/PackageSession.cs +++ b/sources/assets/Xenko.Core.Assets/PackageSession.cs @@ -114,7 +114,7 @@ public void Save(ILogger log, PackageSaveParameters saveParameters = null) { try { - File.Delete(file.FullPath); + Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(file.FullPath, Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin); } catch (Exception ex) { @@ -156,7 +156,9 @@ public void Save(ILogger log, PackageSaveParameters saveParameters = null) } //check if the item is already there, this is possible when saving the first time when creating from a template - if (project.Items.All(x => x.EvaluatedInclude != projectInclude)) + // Note: if project has auto items, no need to add it + if (project.Items.All(x => x.EvaluatedInclude != projectInclude) + && (string.Compare(project.GetPropertyValue("EnableDefaultCompileItems"), "true", true, CultureInfo.InvariantCulture) != 0)) { var generatorAsset = projectAsset as IProjectFileGeneratorAsset; if (generatorAsset != null) @@ -181,9 +183,7 @@ public void Save(ILogger log, PackageSaveParameters saveParameters = null) } else { - // Note: if project has auto items, no need to add it - if (string.Compare(project.GetPropertyValue("EnableDefaultCompileItems"), "true", true, CultureInfo.InvariantCulture) != 0) - project.AddItem("Compile", projectInclude); + project.AddItem("Compile", projectInclude); } } } @@ -365,7 +365,9 @@ private void DirectDependencies_CollectionChanged(object sender, NotifyCollectio switch (dependency.Type) { case DependencyType.Package: - msbuildProject.AddItem("PackageReference", dependency.Name, new[] { new KeyValuePair("Version", dependency.VersionRange.ToString()) }); + msbuildProject.AddItem("PackageReference", dependency.Name, new[] { new KeyValuePair("Version", dependency.VersionRange.ToString()) }) + // Make sure Version is a XML attribute rather than a XML child. + .ForEach(packageReference => packageReference.Metadata.ForEach(metadata => metadata.Xml.ExpressedAsAttribute = true)); isProjectDirty = true; break; case DependencyType.Project: @@ -385,6 +387,11 @@ private void DirectDependencies_CollectionChanged(object sender, NotifyCollectio protected override void SavePackage() { + // Check if our project is still implicit one + // Note: we only allow transition from implicit to explicit (otherwise we would have to delete file, etc.) + if (IsImplicitProject && Package.IsDirty && !Package.IsImplicitProject) + IsImplicitProject = false; + if (!IsImplicitProject) base.SavePackage(); } @@ -630,7 +637,7 @@ public PackageContainer AddExistingProject(UFile projectPath, ILogger logger, Pa // Enable reference analysis caching during loading AssetReferenceAnalysis.EnableCaching = true; - project = LoadProject(logger, projectPath.ToWindowsPath(), false, loadParametersArg); + project = LoadProject(logger, projectPath.ToWindowsPath(), loadParametersArg); Projects.Add(project); package = project.Package; @@ -707,7 +714,7 @@ public AssetItem FindAssetFromProxyObject(object proxyObject) return reference != null ? (FindAsset(reference.Id) ?? FindAsset(reference.Url)) : null; } - private PackageContainer LoadProject(ILogger log, string filePath, bool isSystem, PackageLoadParameters loadParameters = null) + private PackageContainer LoadProject(ILogger log, string filePath, PackageLoadParameters loadParameters = null) { var project = Package.LoadProject(log, filePath); @@ -729,7 +736,6 @@ private PackageContainer LoadProject(ILogger log, string filePath, bool isSystem } var package = project.Package; - package.IsSystem = isSystem; // If the package doesn't have a meta name, fix it here (This is supposed to be done in the above disabled analysis - but we still need to do it!) if (string.IsNullOrWhiteSpace(package.Meta.Name) && package.FullPath != null) @@ -802,7 +808,7 @@ public static void Load(string filePath, PackageSessionResult sessionResult, Pac { if (vsProject.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharp || vsProject.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharpNewSystem) { - var project = (SolutionProject)session.LoadProject(sessionResult, vsProject.FullPath, false, loadParameters); + var project = (SolutionProject)session.LoadProject(sessionResult, vsProject.FullPath, loadParameters); project.VSProject = vsProject; session.Projects.Add(project); @@ -822,7 +828,7 @@ public static void Load(string filePath, PackageSessionResult sessionResult, Pac else if (Path.GetExtension(filePath).ToLowerInvariant() == ".csproj" || Path.GetExtension(filePath).ToLowerInvariant() == Package.PackageFileExtension) { - var project = session.LoadProject(sessionResult, filePath, false, loadParameters); + var project = session.LoadProject(sessionResult, filePath, loadParameters); session.Projects.Add(project); firstProject = project as SolutionProject; } @@ -895,6 +901,13 @@ public static PackageSessionResult Load(string filePath, PackageLoadParameters l public void LoadMissingReferences(ILogger log, PackageLoadParameters loadParameters = null) { LoadMissingDependencies(log, loadParameters); + if (log != null && (loadParameters?.RegisterPackageAssemblies ?? false)) + { + foreach (var package in Packages.ToList()) + { + package.LoadAssemblies(log, loadParameters); + } + } LoadMissingAssets(log, Packages.ToList(), loadParameters); } @@ -997,7 +1010,7 @@ public void Save(ILogger log, PackageSaveParameters saveParameters = null) // Return immediately if there is any error if (loggerResult.HasErrors) return; - + //batch projects var vsProjs = new Dictionary(); @@ -1037,7 +1050,7 @@ public void Save(ILogger log, PackageSaveParameters saveParameters = null) { var generatedAbsolutePath = assetItem.GetGeneratedAbsolutePath().ToWindowsPath(); - File.Delete(generatedAbsolutePath); + Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(generatedAbsolutePath, Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin); var generatedInclude = assetItem.GetGeneratedInclude(); var generatedItem = project.Items.FirstOrDefault(x => (x.ItemType == "Compile" || x.ItemType == "None") && x.EvaluatedInclude == generatedInclude); @@ -1049,7 +1062,8 @@ public void Save(ILogger log, PackageSaveParameters saveParameters = null) } } - File.Delete(assetPath); + if (File.Exists(assetPath)) + Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(assetPath, Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin); } catch (Exception ex) { @@ -1325,7 +1339,7 @@ private void OnAssetDirtyChanged(AssetItem asset, bool oldValue, bool newValue) AssetDirtyChanged?.Invoke(asset, oldValue, newValue); } - private Package PreLoadPackage(ILogger log, string filePath, bool isSystemPackage, PackageLoadParameters loadParameters) + private Package PreLoadPackage(ILogger log, string filePath, PackageLoadParameters loadParameters) { if (log == null) throw new ArgumentNullException(nameof(log)); if (filePath == null) throw new ArgumentNullException(nameof(filePath)); @@ -1335,7 +1349,6 @@ private Package PreLoadPackage(ILogger log, string filePath, bool isSystemPackag { // Load the package without loading any assets var package = Package.LoadRaw(log, filePath); - package.IsSystem = isSystemPackage; // Convert UPath to absolute (Package only) // Removed for now because it is called again in PackageSession.LoadAssembliesAndAssets (and running it twice result in dirty package) diff --git a/sources/assets/Xenko.Core.Assets/PackageSessionHelper.Solution.cs b/sources/assets/Xenko.Core.Assets/PackageSessionHelper.Solution.cs index 2d021ef040..e083b9fc14 100644 --- a/sources/assets/Xenko.Core.Assets/PackageSessionHelper.Solution.cs +++ b/sources/assets/Xenko.Core.Assets/PackageSessionHelper.Solution.cs @@ -67,30 +67,23 @@ public static async Task GetPackageVersion(string fullPath) if (project.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharp || project.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharpNewSystem) { var projectPath = project.FullPath; - var packagePath = Path.ChangeExtension(projectPath, Package.PackageFileExtension); - if (File.Exists(packagePath)) - { - var projectAssetsJsonPath = Path.Combine(Path.GetDirectoryName(projectPath), @"obj", LockFileFormat.AssetsFileName); + var projectAssetsJsonPath = Path.Combine(Path.GetDirectoryName(projectPath), @"obj", LockFileFormat.AssetsFileName); #if !XENKO_LAUNCHER - if (!File.Exists(projectAssetsJsonPath)) - { - var log = new LoggerResult(); - await VSProjectHelper.RestoreNugetPackages(log, projectPath); - } + if (!File.Exists(projectAssetsJsonPath)) + { + var log = new LoggerResult(); + await VSProjectHelper.RestoreNugetPackages(log, projectPath); + } #endif - if (File.Exists(projectAssetsJsonPath)) + if (File.Exists(projectAssetsJsonPath)) + { + var format = new LockFileFormat(); + var projectAssets = format.Read(projectAssetsJsonPath); + foreach (var library in projectAssets.Libraries) { - if (File.Exists(projectAssetsJsonPath)) + if ((library.Type == "package" || library.Type == "project") && library.Name == "Xenko.Engine") { - var format = new LockFileFormat(); - var projectAssets = format.Read(projectAssetsJsonPath); - foreach (var library in projectAssets.Libraries) - { - if (library.Type == "package" && library.Name == "Xenko.Engine") - { - return new PackageVersion((string)library.Version.ToString()); - } - } + return new PackageVersion((string)library.Version.ToString()); } } } diff --git a/sources/assets/Xenko.Core.Assets/PackageStore.cs b/sources/assets/Xenko.Core.Assets/PackageStore.cs index 2d9110c90a..9a82e1069e 100644 --- a/sources/assets/Xenko.Core.Assets/PackageStore.cs +++ b/sources/assets/Xenko.Core.Assets/PackageStore.cs @@ -4,13 +4,13 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Windows.Forms; using Xenko.Core; using Xenko.Core.Diagnostics; using Xenko.Core.IO; using System.Threading.Tasks; using Xenko.Core.Packages; +using System.Reflection; namespace Xenko.Core.Assets { @@ -86,27 +86,31 @@ public UFile GetPackageWithFileName(string packageName) /// if set to true [allow unlisted]. /// A location on the disk to the specified package or null if not found. /// packageName - public UFile GetPackageFileName(string packageName, PackageVersionRange versionRange = null, ConstraintProvider constraintProvider = null, bool allowPreleaseVersion = true, bool allowUnlisted = false) + public UFile GetPackageFileName(string packageName, PackageVersionRange versionRange = null, ConstraintProvider constraintProvider = null, bool allowPreleaseVersion = true, bool allowUnlisted = false, bool searchXenko = false) { if (packageName == null) throw new ArgumentNullException(nameof(packageName)); var package = store.FindLocalPackage(packageName, versionRange, constraintProvider, allowPreleaseVersion, allowUnlisted); - // If package was not found, - if (package != null) + UDirectory packageRoot = package != null ? (UDirectory)store.GetRealPath(package) : (UDirectory)(store.InstallPath + "/" + packageName + "/" + versionRange.MinVersion.ToString()); + var packageFilename = new UFile(packageName + Package.PackageFileExtension); + + // First look for xkpkg at package root + var packageFile = UPath.Combine(packageRoot, packageFilename); + if (File.Exists(packageFile)) + return packageFile; + + // Then look for xkpkg inside xenko subfolder + packageFile = UPath.Combine(UPath.Combine(packageRoot, (UDirectory)"xenko"), packageFilename); + if (File.Exists(packageFile)) + return packageFile; + + if (searchXenko) { - var packageRoot = (UDirectory)store.GetRealPath(package); - var packageFilename = new UFile(packageName + Package.PackageFileExtension); - - // First look for xkpkg at package root - var packageFile = UPath.Combine(packageRoot, packageFilename); - if (File.Exists(packageFile)) - return packageFile; - - // Then look for xkpkg inside xenko subfolder - packageFile = UPath.Combine(UPath.Combine(packageRoot, (UDirectory)"xenko"), packageFilename); - if (File.Exists(packageFile)) - return packageFile; + // finally, look in executing assembly structure + var path = Path.GetFullPath(Path.Combine(Assembly.GetExecutingAssembly().Location, @"..\..\..\..\..\")); + var files = Directory.GetFiles(path, packageFilename.ToString(), SearchOption.AllDirectories); + if (files.Length > 0) return new UFile(files[0]); } return null; diff --git a/sources/assets/Xenko.Core.Assets/Reflection/AbstractObjectInstantiator.cs b/sources/assets/Xenko.Core.Assets/Reflection/AbstractObjectInstantiator.cs index 015a5f95b5..bd6931720c 100644 --- a/sources/assets/Xenko.Core.Assets/Reflection/AbstractObjectInstantiator.cs +++ b/sources/assets/Xenko.Core.Assets/Reflection/AbstractObjectInstantiator.cs @@ -38,7 +38,7 @@ public static object CreateConcreteInstance([NotNull] Type baseType) var asmName = new AssemblyName($"ConcreteObject_{Guid.NewGuid():N}"); // Create assembly (in memory) - var asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run); + var asmBuilder = AssemblyBuilder.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run); var moduleBuilder = asmBuilder.DefineDynamicModule("DynamicModule"); // Define type @@ -46,7 +46,7 @@ public static object CreateConcreteInstance([NotNull] Type baseType) InitializeTypeBuilderFromType(typeBuilder, baseType); // Create type - constructedType = typeBuilder.CreateType(); + constructedType = typeBuilder.CreateTypeInfo(); ConstructedTypes.Add(baseType, constructedType); } diff --git a/sources/assets/Xenko.Core.Assets/Reflection/CollectionItemIdentifiers.cs b/sources/assets/Xenko.Core.Assets/Reflection/CollectionItemIdentifiers.cs index 74eba8a200..f6a37ae53a 100644 --- a/sources/assets/Xenko.Core.Assets/Reflection/CollectionItemIdentifiers.cs +++ b/sources/assets/Xenko.Core.Assets/Reflection/CollectionItemIdentifiers.cs @@ -134,7 +134,12 @@ public void Validate(bool isList) public object GetKey(ItemId itemId) { // TODO: add indexing by guid to avoid O(n) - return keyToIdMap.SingleOrDefault(x => x.Value == itemId).Key; + foreach (var kvp in keyToIdMap) + { + if (kvp.Value == itemId) + return kvp.Key; + } + return null; } public void CloneInto(CollectionItemIdentifiers target, IReadOnlyDictionary referenceTypeClonedKeys) diff --git a/sources/assets/Xenko.Core.Assets/Serializers/UrlReferenceSerializer.cs b/sources/assets/Xenko.Core.Assets/Serializers/UrlReferenceSerializer.cs new file mode 100644 index 0000000000..ee78bcb0cb --- /dev/null +++ b/sources/assets/Xenko.Core.Assets/Serializers/UrlReferenceSerializer.cs @@ -0,0 +1,51 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using Xenko.Core.Serialization; +using Xenko.Core.Yaml; +using Xenko.Core.Yaml.Events; +using Xenko.Core.Yaml.Serialization; + +namespace Xenko.Core.Assets.Serializers +{ + /// + /// A Yaml serializer for + /// + [YamlSerializerFactory(YamlAssetProfile.Name)] + internal class UrlReferenceSerializer : AssetScalarSerializerBase + { + public override bool CanVisit(Type type) + { + return UrlReferenceHelper.IsUrlReferenceType(type); + } + + public override object ConvertFrom(ref ObjectContext context, Scalar fromScalar) + { + if (!AssetReference.TryParse(fromScalar.Value, out var guid, out var location)) + { + throw new YamlException(fromScalar.Start, fromScalar.End, "Unable to decode url reference [{0}]. Expecting format GUID:LOCATION".ToFormat(fromScalar.Value)); + } + + var urlReference = UrlReferenceHelper.CreateReference(context.Descriptor.Type, guid, location.FullPath); + + return urlReference; + } + + public override string ConvertTo(ref ObjectContext objectContext) + { + if (objectContext.Instance is UrlReference urlReference) + { + var attachedReference = AttachedReferenceManager.GetAttachedReference(urlReference); + + if (attachedReference != null) + { + return $"{attachedReference.Id}:{urlReference.Url}"; + } + } + + throw new YamlException($"Unable to extract url reference from object [{objectContext.Instance}]"); + } + + + } +} diff --git a/sources/assets/Xenko.Core.Assets/Templates/TemplateManager.cs b/sources/assets/Xenko.Core.Assets/Templates/TemplateManager.cs index c9351b8d0e..baca81d969 100644 --- a/sources/assets/Xenko.Core.Assets/Templates/TemplateManager.cs +++ b/sources/assets/Xenko.Core.Assets/Templates/TemplateManager.cs @@ -59,7 +59,7 @@ public static void Unregister(ITemplateGenerator generator) /// A sequence containing all registered template descriptions. public static IEnumerable FindTemplates(PackageSession session = null) { - var packages = session?.Packages.Concat(ExtraPackages) ?? ExtraPackages; + var packages = session?.Packages.Concat(ExtraPackages).Distinct(DistinctPackagePathComparer.Default) ?? ExtraPackages; // TODO this will not work if the same package has different versions return packages.SelectMany(package => package.Templates).OrderBy(tpl => tpl.Order).ThenBy(tpl => tpl.Name).ToList(); } @@ -118,5 +118,29 @@ public static ITemplateGenerator FindTemplateGenerator } return null; } + + private class DistinctPackagePathComparer : IEqualityComparer + { + private static DistinctPackagePathComparer defaultInstance; + public static DistinctPackagePathComparer Default + { + get + { + if (defaultInstance == null) + defaultInstance = new DistinctPackagePathComparer(); + return defaultInstance; + } + } + + public bool Equals(Package x, Package y) + { + return x.FullPath == y.FullPath; + } + + public int GetHashCode(Package obj) + { + return obj.FullPath.GetHashCode(); + } + } } } diff --git a/sources/assets/Xenko.Core.Assets/Tracking/SourceFilesCollector.cs b/sources/assets/Xenko.Core.Assets/Tracking/SourceFilesCollector.cs index 9da8d8297e..eb67ba4f07 100644 --- a/sources/assets/Xenko.Core.Assets/Tracking/SourceFilesCollector.cs +++ b/sources/assets/Xenko.Core.Assets/Tracking/SourceFilesCollector.cs @@ -1,5 +1,6 @@ // Copyright (c) Xenko contributors (https://xenko.com) 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.Linq; using Xenko.Core.Assets.Visitors; @@ -41,6 +42,14 @@ public Dictionary GetSourceMembers(Asset asset) return result; } + public override void VisitArray(Array array, ArrayDescriptor descriptor) + { + if (!IsArrayOfPrimitiveType(descriptor)) + { + base.VisitArray(array, descriptor); + } + } + public override void VisitObjectMember(object container, ObjectDescriptor containerDescriptor, IMemberDescriptor member, object value) { if (sourceFiles != null) diff --git a/sources/assets/Xenko.Core.Assets/Tracking/SourceHashesHelper.cs b/sources/assets/Xenko.Core.Assets/Tracking/SourceHashesHelper.cs index 0e95c58f66..90267173a7 100644 --- a/sources/assets/Xenko.Core.Assets/Tracking/SourceHashesHelper.cs +++ b/sources/assets/Xenko.Core.Assets/Tracking/SourceHashesHelper.cs @@ -112,7 +112,14 @@ internal class SourceHashesDynamicMember : DynamicMemberDescriptorBase { public const int DefaultOrder = int.MaxValue; - public static readonly SourceHashesDynamicMember Default = new SourceHashesDynamicMember { ShouldSerialize = x => { var asset = x as Asset; return asset != null && TryGet(asset, AbsoluteSourceHashesKey)?.Count > 0; } }; + public static readonly SourceHashesDynamicMember Default = new SourceHashesDynamicMember + { + ShouldSerialize = (x, parentTypeMemberDesc) => + { + var asset = x as Asset; + return asset != null && TryGet(asset, AbsoluteSourceHashesKey)?.Count > 0; + } + }; static SourceHashesDynamicMember() { diff --git a/sources/assets/Xenko.Core.Assets/UnloadableObjectRemover.cs b/sources/assets/Xenko.Core.Assets/UnloadableObjectRemover.cs index 51858b7fa0..6364dbd289 100644 --- a/sources/assets/Xenko.Core.Assets/UnloadableObjectRemover.cs +++ b/sources/assets/Xenko.Core.Assets/UnloadableObjectRemover.cs @@ -89,6 +89,13 @@ public override void VisitDictionaryKeyValue(object dictionary, DictionaryDescri //base.VisitDictionaryKeyValue(dictionary, descriptor, key, keyDescriptor, value, valueDescriptor); } + public override void VisitSetItem(IEnumerable set, SetDescriptor descriptor, object item, ITypeDescriptor itemDescriptor) + { + if (ProcessObject(item, itemDescriptor.Type)) return; + + Visit(item, itemDescriptor); + } + private bool ProcessObject(object obj, Type expectedType) { var unloadable = obj as IUnloadable; diff --git a/sources/assets/Xenko.Core.Assets/VSProjectHelper.cs b/sources/assets/Xenko.Core.Assets/VSProjectHelper.cs index 2397353729..76ec0fdef0 100644 --- a/sources/assets/Xenko.Core.Assets/VSProjectHelper.cs +++ b/sources/assets/Xenko.Core.Assets/VSProjectHelper.cs @@ -162,25 +162,14 @@ public static async Task RestoreNugetPackages(ILogger logger, string projectPath { await Task.Run(() => { - var pc = new Microsoft.Build.Evaluation.ProjectCollection(); - - try - { - var parameters = new BuildParameters(pc) - { - Loggers = new[] { new LoggerRedirect(logger, true) } //Instance of ILogger instantiated earlier - }; - - // Run a MSBuild /t:Restore - var request = new BuildRequestData(projectPath, new Dictionary(), null, new[] { "Restore" }, null, BuildRequestDataFlags.None); - - mainBuildManager.Build(parameters, request); - } - finally - { - pc.UnloadAllProjects(); - pc.Dispose(); - } + System.Diagnostics.Process process = new System.Diagnostics.Process(); + System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); + startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; + startInfo.FileName = "dotnet"; + startInfo.Arguments = "restore " + projectPath; + process.StartInfo = startInfo; + process.Start(); + process.WaitForExit(); }); } diff --git a/sources/assets/Xenko.Core.Assets/Visitors/AssetMemberVisitorBase.cs b/sources/assets/Xenko.Core.Assets/Visitors/AssetMemberVisitorBase.cs index e3da4ce423..a4a6a43707 100644 --- a/sources/assets/Xenko.Core.Assets/Visitors/AssetMemberVisitorBase.cs +++ b/sources/assets/Xenko.Core.Assets/Visitors/AssetMemberVisitorBase.cs @@ -50,6 +50,14 @@ public override void VisitDictionaryKeyValue(object dictionary, DictionaryDescri } } + public override void VisitSetItem(IEnumerable set, SetDescriptor descriptor, object item, ITypeDescriptor itemDescriptor) + { + if (CurrentPath.Match(MemberPath)) + VisitAssetMember(item, itemDescriptor); + else + base.VisitSetItem(set, descriptor, item, itemDescriptor); + } + /// public override void VisitObject(object obj, ObjectDescriptor descriptor, bool visitMembers) { diff --git a/sources/assets/Xenko.Core.Assets/Xenko.Core.Assets.csproj b/sources/assets/Xenko.Core.Assets/Xenko.Core.Assets.csproj index 05e29a06e1..0ba891dc8c 100644 --- a/sources/assets/Xenko.Core.Assets/Xenko.Core.Assets.csproj +++ b/sources/assets/Xenko.Core.Assets/Xenko.Core.Assets.csproj @@ -1,6 +1,6 @@ - + - + 8.0.30703 2.0 @@ -13,11 +13,14 @@ + - - - - + + + + + + @@ -50,5 +53,5 @@ - + diff --git a/sources/assets/Xenko.Core.Assets/Yaml/AssetObjectSerializerBackend.cs b/sources/assets/Xenko.Core.Assets/Yaml/AssetObjectSerializerBackend.cs index c391959436..8f97b05478 100644 --- a/sources/assets/Xenko.Core.Assets/Yaml/AssetObjectSerializerBackend.cs +++ b/sources/assets/Xenko.Core.Assets/Yaml/AssetObjectSerializerBackend.cs @@ -30,7 +30,7 @@ public AssetObjectSerializerBackend(ITypeDescriptorFactory typeDescriptorFactory public override object ReadMemberValue(ref ObjectContext objectContext, IMemberDescriptor memberDescriptor, object memberValue, Type memberType) { - var memberObjectContext = new ObjectContext(objectContext.SerializerContext, memberValue, objectContext.SerializerContext.FindTypeDescriptor(memberType)); + var memberObjectContext = new ObjectContext(objectContext.SerializerContext, memberValue, objectContext.SerializerContext.FindTypeDescriptor(memberType), objectContext.Descriptor, memberDescriptor); var member = memberDescriptor as MemberDescriptorBase; if (member != null && objectContext.Settings.Attributes.GetAttribute(member.MemberInfo) != null) @@ -48,7 +48,7 @@ public override object ReadMemberValue(ref ObjectContext objectContext, IMemberD public override void WriteMemberValue(ref ObjectContext objectContext, IMemberDescriptor memberDescriptor, object memberValue, Type memberType) { - var memberObjectContext = new ObjectContext(objectContext.SerializerContext, memberValue, objectContext.SerializerContext.FindTypeDescriptor(memberType)) + var memberObjectContext = new ObjectContext(objectContext.SerializerContext, memberValue, objectContext.SerializerContext.FindTypeDescriptor(memberType), objectContext.Descriptor, memberDescriptor) { ScalarStyle = memberDescriptor.ScalarStyle, }; @@ -153,9 +153,9 @@ public override void WriteCollectionItem(ref ObjectContext objectContext, object { var path = GetCurrentPath(ref objectContext, true); path.PushIndex(index); - var itemObjectcontext = new ObjectContext(objectContext.SerializerContext, item, objectContext.SerializerContext.FindTypeDescriptor(itemType)); - SetCurrentPath(ref itemObjectcontext, path); - WriteYaml(ref itemObjectcontext); + var itemObjectContext = new ObjectContext(objectContext.SerializerContext, item, objectContext.SerializerContext.FindTypeDescriptor(itemType)); + SetCurrentPath(ref itemObjectContext, path); + WriteYaml(ref itemObjectContext); } public override object ReadDictionaryKey(ref ObjectContext objectContext, Type keyType) @@ -285,9 +285,9 @@ public override void WriteDictionaryValue(ref ObjectContext objectContext, objec { path.PushIndex(key); } - var itemObjectcontext = new ObjectContext(objectContext.SerializerContext, value, objectContext.SerializerContext.FindTypeDescriptor(valueType)); - SetCurrentPath(ref itemObjectcontext, path); - WriteYaml(ref itemObjectcontext); + var itemObjectContext = new ObjectContext(objectContext.SerializerContext, value, objectContext.SerializerContext.FindTypeDescriptor(valueType)); + SetCurrentPath(ref itemObjectContext, path); + WriteYaml(ref itemObjectContext); } public override bool ShouldSerialize(IMemberDescriptor member, ref ObjectContext objectContext) diff --git a/sources/assets/Xenko.Core.Assets/Yaml/CollectionWithIdsSerializer.cs b/sources/assets/Xenko.Core.Assets/Yaml/CollectionWithIdsSerializer.cs index 4d474d12a3..54994be83e 100644 --- a/sources/assets/Xenko.Core.Assets/Yaml/CollectionWithIdsSerializer.cs +++ b/sources/assets/Xenko.Core.Assets/Yaml/CollectionWithIdsSerializer.cs @@ -124,7 +124,14 @@ protected override void TransformAfterDeserialization(IDictionary container, ITy while (enumerator.MoveNext()) { collectionDescriptor.Add(targetCollection, enumerator.Value); - identifier.Add(i, (ItemId)enumerator.Key); + if (targetDescriptor.Category == DescriptorCategory.Set) + { + identifier.Add(enumerator.Value, (ItemId)enumerator.Key); + } + else + { + identifier.Add(i, (ItemId)enumerator.Key); + } ++i; } if (deletedItems != null) diff --git a/sources/assets/Xenko.Core.Assets/Yaml/UnloadableObjectInstantiator.cs b/sources/assets/Xenko.Core.Assets/Yaml/UnloadableObjectInstantiator.cs index 7a3c9a21f4..ade3402f52 100644 --- a/sources/assets/Xenko.Core.Assets/Yaml/UnloadableObjectInstantiator.cs +++ b/sources/assets/Xenko.Core.Assets/Yaml/UnloadableObjectInstantiator.cs @@ -39,7 +39,7 @@ public static IUnloadable CreateUnloadableObject(Type baseType, string typeName, var asmName = new AssemblyName($"YamlProxy_{Guid.NewGuid():N}"); // Create assembly (in memory) - var asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run); + var asmBuilder = AssemblyBuilder.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run); var moduleBuilder = asmBuilder.DefineDynamicModule("DynamicModule"); // Create type @@ -107,7 +107,7 @@ public static IUnloadable CreateUnloadableObject(Type baseType, string typeName, // User-registered callbacks ProcessProxyType?.Invoke(baseType, typeBuilder); - proxyType = typeBuilder.CreateType(); + proxyType = typeBuilder.CreateTypeInfo(); proxyTypes.Add(baseType, proxyType); } } diff --git a/sources/assets/Xenko.Core.Assets/Yaml/YamlAssetPath.cs b/sources/assets/Xenko.Core.Assets/Yaml/YamlAssetPath.cs index be17232b3d..121ade26a3 100644 --- a/sources/assets/Xenko.Core.Assets/Yaml/YamlAssetPath.cs +++ b/sources/assets/Xenko.Core.Assets/Yaml/YamlAssetPath.cs @@ -240,17 +240,40 @@ public MemberPath ToMemberPath(object root) var typeDescriptor = TypeDescriptorFactory.Default.Find(currentObject.GetType()); if (typeDescriptor is ArrayDescriptor arrayDescriptor) { - if (!(item.Value is int)) throw new InvalidOperationException($"The path [{ToString()}] contains non-integer index on an array."); - memberPath.Push(arrayDescriptor, (int)item.Value); - currentObject = arrayDescriptor.GetValue(currentObject, (int)item.Value); + if (!(item.Value is int)) + { + throw new InvalidOperationException($"The path [{ToString()}] contains non-integer index on an array."); + } + int value = (int)item.Value; + memberPath.Push(arrayDescriptor, value); + currentObject = arrayDescriptor.GetValue(currentObject, value); } - if (typeDescriptor is CollectionDescriptor collectionDescriptor) + else if (typeDescriptor is CollectionDescriptor collectionDescriptor) { - if (!(item.Value is int)) throw new InvalidOperationException($"The path [{ToString()}] contains non-integer index on a collection."); - memberPath.Push(collectionDescriptor, (int)item.Value); - currentObject = collectionDescriptor.GetValue(currentObject, (int)item.Value); + if (collectionDescriptor is SetDescriptor setDescriptor) + { + if (item.Value == null && !collectionDescriptor.ElementType.IsNullable()) + { + throw new InvalidOperationException($"The path [{ToString()}] contains a null item on a set."); + } + if (!setDescriptor.Contains(currentObject, item.Value)) + { + throw new InvalidOperationException($"The path [{ToString()}] item doesn't exsit on a set."); + } + memberPath.Push(setDescriptor, item.Value); + currentObject = item.Value; + } + else + { + if (!(item.Value is int)) + { + throw new InvalidOperationException($"The path [{ToString()}] contains non-integer index on a collection."); + } + memberPath.Push(collectionDescriptor, item.Value); + currentObject = collectionDescriptor.GetValue(currentObject, item.Value); + } } - if (typeDescriptor is DictionaryDescriptor dictionaryDescriptor) + else if (typeDescriptor is DictionaryDescriptor dictionaryDescriptor) { if (item.Value == null) throw new InvalidOperationException($"The path [{ToString()}] contains a null key on an dictionary."); memberPath.Push(dictionaryDescriptor, item.Value); @@ -266,16 +289,30 @@ public MemberPath ToMemberPath(object root) if (typeDescriptor is ArrayDescriptor arrayDescriptor) { if (!(key is int)) throw new InvalidOperationException($"The path [{ToString()}] contains a non-valid item id on an array."); - memberPath.Push(arrayDescriptor, (int)key); - currentObject = arrayDescriptor.GetValue(currentObject, (int)key); + int keyInt = (int)key; + memberPath.Push(arrayDescriptor, keyInt); + currentObject = arrayDescriptor.GetValue(currentObject, keyInt); } - if (typeDescriptor is CollectionDescriptor collectionDescriptor) + else if (typeDescriptor is CollectionDescriptor collectionDescriptor) { - if (!(key is int)) throw new InvalidOperationException($"The path [{ToString()}] contains a non-valid item id on a collection."); - memberPath.Push(collectionDescriptor, (int)key); - currentObject = collectionDescriptor.GetValue(currentObject, (int)key); + if (collectionDescriptor.Category == DescriptorCategory.Set) + { + if (item.Value == null && !collectionDescriptor.ElementType.IsNullable()) + { + throw new InvalidOperationException($"The path [{ToString()}] contains a null item on a set."); + } + } + else + { + if (!(key is int)) + { + throw new InvalidOperationException($"The path [{ToString()}] contains a non-valid item id on a collection."); + } + } + memberPath.Push(collectionDescriptor, key); + currentObject = collectionDescriptor.GetValue(currentObject, key); } - if (typeDescriptor is DictionaryDescriptor dictionaryDescriptor) + else if (typeDescriptor is DictionaryDescriptor dictionaryDescriptor) { if (key == null) throw new InvalidOperationException($"The path [{ToString()}] contains a non-valid item id on an dictionary."); memberPath.Push(dictionaryDescriptor, key); @@ -319,16 +356,21 @@ public static YamlAssetPath FromMemberPath([NotNull] MemberPath path, object roo clone.Push(arrayItem.Descriptor, arrayItem.Index); index = arrayItem.Index; } - if (item is MemberPath.CollectionPathItem collectionItem) + else if (item is MemberPath.CollectionPathItem collectionItem) { clone.Push(collectionItem.Descriptor, collectionItem.Index); index = collectionItem.Index; } - if (item is MemberPath.DictionaryPathItem dictionaryItem) + else if (item is MemberPath.DictionaryPathItem dictionaryItem) { clone.Push(dictionaryItem.Descriptor, dictionaryItem.Key); index = dictionaryItem.Key; } + else if (item is MemberPath.SetPathItem setItem) + { + clone.Push(setItem.Descriptor, setItem.Index); + index = setItem.Index; + } if (!CollectionItemIdHelper.TryGetCollectionItemIds(clone.GetValue(root), out CollectionItemIdentifiers ids)) { result.PushIndex(index); diff --git a/sources/assets/Xenko.Core.Packages/NugetStore.cs b/sources/assets/Xenko.Core.Packages/NugetStore.cs index afa290b392..d3e462be83 100644 --- a/sources/assets/Xenko.Core.Packages/NugetStore.cs +++ b/sources/assets/Xenko.Core.Packages/NugetStore.cs @@ -41,7 +41,7 @@ namespace Xenko.Core.Packages /// public class NugetStore : INugetDownloadProgress { - public const string MainExecutables = @"lib\net472\Xenko.GameStudio.exe,Bin\Windows\Xenko.GameStudio.exe,Bin\Windows-Direct3D11\Xenko.GameStudio.exe"; + public const string MainExecutables = @"lib\net48\Xenko.GameStudio.exe,Bin\Windows\Xenko.GameStudio.exe,Bin\Windows-Direct3D11\Xenko.GameStudio.exe"; public const string PrerequisitesInstaller = @"Bin\Prerequisites\install-prerequisites.exe"; public const string DefaultPackageSource = "https://packages.xenko.com/nuget"; @@ -339,16 +339,13 @@ public async Task InstallPackage(string packageId, PackageVer FilePath = projectPath, Dependencies = new List() { - new LibraryDependency - { - LibraryRange = new LibraryRange(packageId, new VersionRange(version.ToNuGetVersion()), LibraryDependencyTarget.Package), - } + new LibraryDependency(new LibraryRange(packageId, new VersionRange(version.ToNuGetVersion()), LibraryDependencyTarget.Package)) }, TargetFrameworks = { new TargetFrameworkInformation { - FrameworkName = NuGetFramework.Parse("net472"), + FrameworkName = NuGetFramework.Parse("net48"), } }, RestoreMetadata = new ProjectRestoreMetadata @@ -358,7 +355,7 @@ public async Task InstallPackage(string packageId, PackageVer ProjectStyle = ProjectStyle.PackageReference, ProjectUniqueName = projectPath, OutputPath = Path.Combine(Path.GetTempPath(), $"XenkoLauncher-{packageId}-{version.ToString()}"), - OriginalTargetFrameworks = new[] { "net472" }, + OriginalTargetFrameworks = new[] { "net48" }, ConfigFilePaths = settings.GetConfigFilePaths(), PackagesPath = installPath, Sources = SettingsUtility.GetEnabledSources(settings).ToList(), diff --git a/sources/assets/Xenko.Core.Packages/Xenko.Core.Packages.csproj b/sources/assets/Xenko.Core.Packages/Xenko.Core.Packages.csproj index 1fe27715d5..81e7f42542 100644 --- a/sources/assets/Xenko.Core.Packages/Xenko.Core.Packages.csproj +++ b/sources/assets/Xenko.Core.Packages/Xenko.Core.Packages.csproj @@ -1,6 +1,6 @@ - + - + true $(TargetFrameworkTool) @@ -8,8 +8,8 @@ --auto-module-initializer --serialization - - + + @@ -38,5 +38,5 @@ - + \ No newline at end of file diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Common/Builder.cs b/sources/buildengine/Xenko.Core.BuildEngine.Common/Builder.cs index 6412a2a8d5..f200a5be6a 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine.Common/Builder.cs +++ b/sources/buildengine/Xenko.Core.BuildEngine.Common/Builder.cs @@ -117,7 +117,7 @@ public enum Mode private Scheduler scheduler; private readonly CommandIOMonitor ioMonitor; - private readonly List threadMonitors = new List(); + private readonly List currentThreadMonitors = new List(); /// /// A map containing results of each commands, indexed by command hashes. When the builder is running, this map if filled with the result of the commands of the current execution. @@ -297,7 +297,7 @@ private void ScheduleBuildStep(BuilderContext builderContext, BuildStep instigat buildStep.ExecutionId = microThread.Id; - foreach (var threadMonitor in threadMonitors) + foreach (var threadMonitor in currentThreadMonitors) { threadMonitor.RegisterBuildStep(buildStep, buildStepLogger.StepLogger); } @@ -422,7 +422,7 @@ public void CancelBuild() private void RunUntilEnd() { - foreach (var threadMonitor in threadMonitors) + foreach (var threadMonitor in currentThreadMonitors) threadMonitor.RegisterThread(Thread.CurrentThread.ManagedThreadId); while (true) @@ -479,7 +479,7 @@ public void WriteIndexFile(bool mergeWithCurrentIndexFile) /// /// Runs this instance. /// - public BuildResultCode Run(Mode mode, bool writeIndexFile = true, bool enableMonitor = false) + public BuildResultCode Run(Mode mode, bool writeIndexFile = true, List threadMonitors = null) { // When we setup the database ourself we have to take responsibility to close it after var shouldCloseDatabase = ObjectDatabase == null; @@ -497,7 +497,14 @@ public BuildResultCode Run(Mode mode, bool writeIndexFile = true, bool enableMon Cancelled = false; IsRunning = true; DisableCompressionIds.Clear(); - + + currentThreadMonitors.Clear(); + if (threadMonitors != null) + { + foreach (var threadMonitor in threadMonitors) + currentThreadMonitors.Add(threadMonitor); + } + // Reseting result map var inputHashes = FileVersionTracker.GetDefault(); { @@ -506,15 +513,8 @@ public BuildResultCode Run(Mode mode, bool writeIndexFile = true, bool enableMon resultMap = ObjectDatabase; scheduler = new Scheduler(); - if (enableMonitor) - { - threadMonitors.Add(new BuildThreadMonitor(scheduler, BuilderId)); - foreach (var monitorPipeName in MonitorPipeNames) - threadMonitors.Add(new BuildThreadMonitor(scheduler, BuilderId, monitorPipeName)); - - foreach (var threadMonitor in threadMonitors) - threadMonitor.Start(); - } + foreach (var threadMonitor in currentThreadMonitors) + threadMonitor.Start(); // Schedule the build ScheduleBuildStep(builderContext, null, Root, InitialVariables); @@ -536,14 +536,14 @@ public BuildResultCode Run(Mode mode, bool writeIndexFile = true, bool enableMon thread.Join(); } - foreach (var threadMonitor in threadMonitors) + foreach (var threadMonitor in currentThreadMonitors) threadMonitor.Finish(); - foreach (var threadMonitor in threadMonitors) + foreach (var threadMonitor in currentThreadMonitors) threadMonitor.Join(); } - threadMonitors.Clear(); + currentThreadMonitors.Clear(); BuildResultCode result; if (runMode == Mode.Build) diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Common/DynamicBuilder.cs b/sources/buildengine/Xenko.Core.BuildEngine.Common/DynamicBuilder.cs index cd6fdf5fbd..d16665076e 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine.Common/DynamicBuilder.cs +++ b/sources/buildengine/Xenko.Core.BuildEngine.Common/DynamicBuilder.cs @@ -67,7 +67,7 @@ private void BuilderThread() { builder.Reset(); builder.Root.Add(dynamicBuildStep); - builder.Run(Builder.Mode.Build, true, false); + builder.Run(Builder.Mode.Build, true); } } } diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Common/IBuildMonitorRemote.cs b/sources/buildengine/Xenko.Core.BuildEngine.Common/IBuildMonitorRemote.cs index 1e4809a418..abb477bfe6 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine.Common/IBuildMonitorRemote.cs +++ b/sources/buildengine/Xenko.Core.BuildEngine.Common/IBuildMonitorRemote.cs @@ -22,7 +22,7 @@ public enum NotificationType public MicrothreadNotification() { } - internal MicrothreadNotification(int threadId, long microthreadId, long microthreadJobId, long time, NotificationType type) + public MicrothreadNotification(int threadId, long microthreadId, long microthreadJobId, long time, NotificationType type) { ThreadId = threadId; MicrothreadId = microthreadId; diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Common/IBuildThreadMonitor.cs b/sources/buildengine/Xenko.Core.BuildEngine.Common/IBuildThreadMonitor.cs new file mode 100644 index 0000000000..c963e5687c --- /dev/null +++ b/sources/buildengine/Xenko.Core.BuildEngine.Common/IBuildThreadMonitor.cs @@ -0,0 +1,16 @@ +// Copyright (c) Xenko contributors (https://xenko.com) 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 Xenko.Core.Diagnostics; + +namespace Xenko.Core.BuildEngine +{ + public interface IBuildThreadMonitor + { + void Start(); + void RegisterBuildStep(BuildStep buildStep, TimestampLocalLogger stepLogger); + void RegisterThread(int managedThreadId); + void Finish(); + void Join(); + } +} diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Common/ListBuildStep.cs b/sources/buildengine/Xenko.Core.BuildEngine.Common/ListBuildStep.cs index 4f026d6c89..b7767d5163 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine.Common/ListBuildStep.cs +++ b/sources/buildengine/Xenko.Core.BuildEngine.Common/ListBuildStep.cs @@ -275,8 +275,10 @@ private OutputObject AddOutputObject(IExecuteContext executeContext, ObjectUrl o if (outputObject.ObjectId != outputObjectId && outputObject.Counter == mergeCounter) { var error = $"Commands {command} and {outputObject.Command} are both writing {outputObjectUrl} at the same time"; - executeContext.Logger.Error(error); - throw new InvalidOperationException(error); + executeContext.Logger.Warning(error); + // let's continue and allow the developer to determine if this is a big problem or not + // outputs might actually be the same + //throw new InvalidOperationException(error); } // Update new ObjectId diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Common/Xenko.Core.BuildEngine.Common.csproj b/sources/buildengine/Xenko.Core.BuildEngine.Common/Xenko.Core.BuildEngine.Common.csproj index 12424fa6d3..f4b56d3ca6 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine.Common/Xenko.Core.BuildEngine.Common.csproj +++ b/sources/buildengine/Xenko.Core.BuildEngine.Common/Xenko.Core.BuildEngine.Common.csproj @@ -1,16 +1,17 @@ - + 8.0.30703 2.0 true - $(TargetFrameworkTool) + netstandard2.0 --auto-module-initializer --serialization - + + @@ -26,5 +27,5 @@ - + diff --git a/sources/buildengine/Xenko.Core.BuildEngine.Tests/Xenko.Core.BuildEngine.Tests.csproj b/sources/buildengine/Xenko.Core.BuildEngine.Tests/Xenko.Core.BuildEngine.Tests.csproj index 6b550273ca..e69973e9a4 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine.Tests/Xenko.Core.BuildEngine.Tests.csproj +++ b/sources/buildengine/Xenko.Core.BuildEngine.Tests/Xenko.Core.BuildEngine.Tests.csproj @@ -1,7 +1,7 @@ - + Exe @@ -27,6 +27,6 @@ - + \ No newline at end of file diff --git a/sources/buildengine/Xenko.Core.BuildEngine/Xenko.Core.BuildEngine.csproj b/sources/buildengine/Xenko.Core.BuildEngine/Xenko.Core.BuildEngine.csproj index d2ee401f46..5f21e0fdb6 100644 --- a/sources/buildengine/Xenko.Core.BuildEngine/Xenko.Core.BuildEngine.csproj +++ b/sources/buildengine/Xenko.Core.BuildEngine/Xenko.Core.BuildEngine.csproj @@ -3,7 +3,7 @@ Windows - + 8.0.30703 2.0 @@ -29,5 +29,5 @@ - + \ No newline at end of file diff --git a/sources/core/Xenko.Core.AssemblyProcessor.Tests/Xenko.Core.AssemblyProcessor.Tests.csproj b/sources/core/Xenko.Core.AssemblyProcessor.Tests/Xenko.Core.AssemblyProcessor.Tests.csproj index febba8374c..1587a792a4 100644 --- a/sources/core/Xenko.Core.AssemblyProcessor.Tests/Xenko.Core.AssemblyProcessor.Tests.csproj +++ b/sources/core/Xenko.Core.AssemblyProcessor.Tests/Xenko.Core.AssemblyProcessor.Tests.csproj @@ -2,7 +2,7 @@ 8.0.30703 2.0 - net472 + net48 true @@ -20,9 +20,6 @@ true - - ..\..\..\deps\Mono.Cecil\Mono.Cecil.dll - ..\..\..\deps\NUnit\addins\nunit.core.interfaces.dll diff --git a/sources/core/Xenko.Core.AssemblyProcessor/AssemblyProcessorApp.cs b/sources/core/Xenko.Core.AssemblyProcessor/AssemblyProcessorApp.cs index 0a49e0653c..631c4d171b 100644 --- a/sources/core/Xenko.Core.AssemblyProcessor/AssemblyProcessorApp.cs +++ b/sources/core/Xenko.Core.AssemblyProcessor/AssemblyProcessorApp.cs @@ -226,7 +226,6 @@ public bool Run(ref AssemblyDefinition assemblyDefinition, ref bool readWriteSym processors.Add(new InitLocalsProcessor()); processors.Add(new DispatcherProcessor()); - processors.Add(new OpenSourceSignProcessor()); // Check if there is already a AssemblyProcessedAttribute (in which case we can skip processing, it has already been done). // Note that we should probably also match the command line as well so that we throw an error if processing is different (need to rebuild). diff --git a/sources/core/Xenko.Core.AssemblyProcessor/DispatcherProcessor.cs b/sources/core/Xenko.Core.AssemblyProcessor/DispatcherProcessor.cs index 3cf2acf62b..61090602fc 100644 --- a/sources/core/Xenko.Core.AssemblyProcessor/DispatcherProcessor.cs +++ b/sources/core/Xenko.Core.AssemblyProcessor/DispatcherProcessor.cs @@ -157,7 +157,7 @@ private bool ProcessDelegateAllocation(AssemblyProcessorContext context, MethodD // The previous instruction pushes the target onto the stack // If it's the this-parameter, we can create an instance field, and reuse the same delegate var loadClosureInstruction = functionPointerInstruction.Previous; - if (loadClosureInstruction.OpCode == OpCodes.Ldarg_0 && !method.IsStatic) + if ((loadClosureInstruction.OpCode == OpCodes.Ldarg_0 || loadClosureInstruction.OpCode == OpCodes.Ldnull) && !method.IsStatic) { // TODO: Handle generic methods/delegates // TODO: Handle multiple constructors propertly @@ -173,7 +173,7 @@ private bool ProcessDelegateAllocation(AssemblyProcessorContext context, MethodD // Create and store the delegate in constructor var ilProcessor5 = constructor.Body.GetILProcessor(); ilProcessor5.InsertBefore(retInstruction3, ilProcessor5.Create(OpCodes.Ldarg_0)); - ilProcessor5.InsertBefore(retInstruction3, ilProcessor5.Create(OpCodes.Ldarg_0)); + ilProcessor5.InsertBefore(retInstruction3, ilProcessor5.Create(loadClosureInstruction.OpCode)); ilProcessor5.InsertBefore(retInstruction3, ilProcessor5.Create(OpCodes.Ldftn, delegateMethod)); ilProcessor5.InsertBefore(retInstruction3, ilProcessor5.Create(OpCodes.Newobj, delegateInstanceConstructor)); ilProcessor5.InsertBefore(retInstruction3, ilProcessor5.Create(OpCodes.Stfld, sharedDelegateField)); @@ -181,6 +181,7 @@ private bool ProcessDelegateAllocation(AssemblyProcessorContext context, MethodD // Load from field instead of allocating var ilProcessor4 = method.Body.GetILProcessor(); ilProcessor4.Remove(functionPointerInstruction); + loadClosureInstruction.OpCode = OpCodes.Ldarg_0; // In case it was a ldnull ilProcessor4.Replace(delegateAllocationInstruction, ilProcessor4.Create(OpCodes.Ldfld, sharedDelegateField)); return true; @@ -241,32 +242,39 @@ private bool ProcessDelegateAllocation(AssemblyProcessorContext context, MethodD var ilProcessor = method.Body.GetILProcessor(); + Func generateClosureVariable = () => closureVarible == null ? ilProcessor.Create(loadClosureInstruction.OpCode) : ilProcessor.Create(loadClosureInstruction.OpCode, closureVarible.Resolve()); + // Retrieve from pool var closureGenericArguments = (closureInstanceType as GenericInstanceType)?.GenericArguments.ToArray() ?? new TypeReference[0]; var closureAllocation = storeClosureInstruction.Previous; if (closureAllocation.OpCode == OpCodes.Newobj) { // Retrieve closure from pool, instead of allocating + ilProcessor.Replace(storeClosureInstruction, ilProcessor.Create(OpCodes.Nop)); + var acquireClosure = ilProcessor.Create(OpCodes.Callvirt, poolAcquireMethod.MakeGeneric(closureInstanceType)); - ilProcessor.InsertAfter(closureAllocation, acquireClosure); - ilProcessor.InsertAfter(closureAllocation, ilProcessor.Create(OpCodes.Ldsfld, closure.PoolField.MakeGeneric(closureGenericArguments))); + var methodPreviousStart = ilProcessor.Body.Instructions.First(); + ilProcessor.InsertBefore(methodPreviousStart, ilProcessor.Create(OpCodes.Nop)); + ilProcessor.InsertBefore(methodPreviousStart, ilProcessor.Create(OpCodes.Ldsfld, closure.PoolField.MakeGeneric(closureGenericArguments))); + ilProcessor.InsertBefore(methodPreviousStart, acquireClosure); + ilProcessor.InsertBefore(methodPreviousStart, storeClosureInstruction); closureAllocation.OpCode = OpCodes.Nop; // Change to Nop instead of removing it, as this instruction might be reference somewhere? closureAllocation.Operand = null; // Add a reference - ilProcessor.InsertAfter(storeClosureInstruction, ilProcessor.Create(OpCodes.Callvirt, closure.AddReferenceMethod.MakeGeneric(closureGenericArguments))); - ilProcessor.InsertAfter(storeClosureInstruction, closureVarible == null ? ilProcessor.Create(loadClosureInstruction.OpCode) : ilProcessor.Create(loadClosureInstruction.OpCode, closureVarible.Resolve())); + ilProcessor.InsertBefore(methodPreviousStart, generateClosureVariable()); + ilProcessor.InsertBefore(methodPreviousStart, ilProcessor.Create(OpCodes.Callvirt, closure.AddReferenceMethod.MakeGeneric(closureGenericArguments))); // TODO: Multiple returns + try/finally // Release reference var retInstructions = method.Body.Instructions.Where(x => x.OpCode == OpCodes.Ret).ToArray(); - Instruction beforeReturn = closureVarible == null ? ilProcessor.Create(loadClosureInstruction.OpCode) : ilProcessor.Create(loadClosureInstruction.OpCode, closureVarible.Resolve()); + Instruction beforeReturn = generateClosureVariable(); Instruction newReturnInstruction = ilProcessor.Create(OpCodes.Ret); ilProcessor.Append(beforeReturn); ilProcessor.Append(ilProcessor.Create(OpCodes.Ldnull)); ilProcessor.Append(ilProcessor.Create(OpCodes.Beq, newReturnInstruction)); - ilProcessor.Append(closureVarible == null ? ilProcessor.Create(loadClosureInstruction.OpCode) : ilProcessor.Create(loadClosureInstruction.OpCode, closureVarible.Resolve())); + ilProcessor.Append(generateClosureVariable()); ilProcessor.Append(ilProcessor.Create(OpCodes.Callvirt, closure.ReleaseMethod.MakeGeneric(closureGenericArguments))); ilProcessor.Append(newReturnInstruction); diff --git a/sources/core/Xenko.Core.AssemblyProcessor/OpenSourceSignProcessor.cs b/sources/core/Xenko.Core.AssemblyProcessor/OpenSourceSignProcessor.cs deleted file mode 100644 index e5ed3c8d74..0000000000 --- a/sources/core/Xenko.Core.AssemblyProcessor/OpenSourceSignProcessor.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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 Mono.Cecil; - -namespace Xenko.Core.AssemblyProcessor -{ - internal class OpenSourceSignProcessor : IAssemblyDefinitionProcessor - { - public bool Process(AssemblyProcessorContext context) - { - var assembly = context.Assembly; - - // Only process if there is a public key - if (!assembly.Name.HasPublicKey) - return false; - - // Check if already strong signed - if ((assembly.MainModule.Attributes & ModuleAttributes.StrongNameSigned) == ModuleAttributes.StrongNameSigned) - return false; - - // We have a delay signed assembly that is not strong name signed yet. - // Let's strong sign it now (a.k.a. OSS, OpenSourceSign) - // Note: Maybe we should make sure it's actually Xenko key? - assembly.MainModule.Attributes |= ModuleAttributes.StrongNameSigned; - - return true; - } - } -} diff --git a/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.IL.cs b/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.IL.cs index 0f33b159e6..b4b63ee190 100644 --- a/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.IL.cs +++ b/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.IL.cs @@ -153,6 +153,8 @@ class UpdatablePropertyCodeGenerator : UpdatablePropertyBaseCodeGenerator { private readonly FieldDefinition updatablePropertyGetter; private readonly FieldDefinition updatablePropertySetter; + private readonly FieldDefinition updatablePropertyVirtualDispatchGetter; + private readonly FieldDefinition updatablePropertyVirtualDispatchSetter; protected TypeDefinition declaringTypeForObjectMethods; public UpdatablePropertyCodeGenerator(AssemblyDefinition assembly) : base(assembly) @@ -163,6 +165,8 @@ public UpdatablePropertyCodeGenerator(AssemblyDefinition assembly) : base(assemb updatablePropertyGetter = declaringTypeForObjectMethods.Fields.First(x => x.Name == "Getter"); updatablePropertySetter = declaringTypeForObjectMethods.Fields.First(x => x.Name == "Setter"); + updatablePropertyVirtualDispatchGetter = declaringTypeForObjectMethods.Fields.First(x => x.Name == "VirtualDispatchGetter"); + updatablePropertyVirtualDispatchSetter = declaringTypeForObjectMethods.Fields.First(x => x.Name == "VirtualDispatchSetter"); } public override void GenerateUpdatablePropertyCode() @@ -188,16 +192,42 @@ public override void GenerateUpdatablePropertyCode() public override void EmitGetCode(ILProcessor il, TypeReference type) { + var calliInstance = Instruction.Create(OpCodes.Calli, new CallSite(type) { HasThis = true }); + var calliVirtualDispatch = Instruction.Create(OpCodes.Calli, new CallSite(type) { HasThis = false, Parameters = { new ParameterDefinition(assembly.MainModule.TypeSystem.Object) } }); + var postCalli = Instruction.Create(OpCodes.Nop); + il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldfld, updatablePropertyGetter); - il.Emit(OpCodes.Calli, new CallSite(type) { HasThis = true }); + il.Emit(OpCodes.Ldarg_0); + // For normal calls, we use ldftn and an instance calls + // For virtual and interface calls, we generate a dispatch function that calls ldvirtftn on the actual object, then call the method on the object + // this dispatcher method is static, so the calli has a different signature + // Note: we could later optimize the bool check by having two variant of Get/SetObject + // and two different implementations of both UpdatableProperty and UpdatablePropertyObject + // (not sure if worth it) + il.Emit(OpCodes.Ldfld, updatablePropertyVirtualDispatchGetter); + il.Emit(OpCodes.Brfalse, calliInstance); + il.Append(calliVirtualDispatch); + il.Emit(OpCodes.Br, postCalli); + il.Append(calliInstance); + il.Append(postCalli); } public override void EmitSetCodeAfterValue(ILProcessor il, TypeReference type) { + var calliInstance = Instruction.Create(OpCodes.Calli, new CallSite(assembly.MainModule.TypeSystem.Void) { HasThis = true, Parameters = { new ParameterDefinition(type) } }); + var calliVirtualDispatch = Instruction.Create(OpCodes.Calli, new CallSite(assembly.MainModule.TypeSystem.Void) { HasThis = false, Parameters = { new ParameterDefinition(assembly.MainModule.TypeSystem.Object), new ParameterDefinition(type) } }); + var postCalli = Instruction.Create(OpCodes.Nop); + il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldfld, updatablePropertySetter); - il.Emit(OpCodes.Calli, new CallSite(assembly.MainModule.TypeSystem.Void) { HasThis = true, Parameters = { new ParameterDefinition(type) } }); + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldfld, updatablePropertyVirtualDispatchSetter); + il.Emit(OpCodes.Brfalse, calliInstance); + il.Append(calliVirtualDispatch); + il.Emit(OpCodes.Br, postCalli); + il.Append(calliInstance); + il.Append(postCalli); } } diff --git a/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.cs b/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.cs index 80aee09a54..6d111ba395 100644 --- a/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.cs +++ b/sources/core/Xenko.Core.AssemblyProcessor/UpdateEngineProcessor.cs @@ -34,6 +34,54 @@ internal partial class UpdateEngineProcessor : ICecilSerializerProcessor private MethodReference getTypeFromHandleMethod; + int prepareMethodCount = 0; + + private MethodDefinition CreateUpdateMethod(AssemblyDefinition assembly) + { + // Get or create method + var updateEngineType = GetOrCreateUpdateType(assembly, true); + var mainPrepareMethod = new MethodDefinition($"UpdateMain{prepareMethodCount++}", MethodAttributes.HideBySig | MethodAttributes.Assembly | MethodAttributes.Static, assembly.MainModule.TypeSystem.Void); + updateEngineType.Methods.Add(mainPrepareMethod); + + // Make sure it is called at module startup + var xenkoCoreModule = assembly.GetXenkoCoreModule(); + var moduleInitializerAttribute = xenkoCoreModule.GetType("Xenko.Core.ModuleInitializerAttribute"); + var ctorMethod = moduleInitializerAttribute.GetConstructors().Single(x => !x.IsStatic && !x.HasParameters); + mainPrepareMethod.CustomAttributes.Add(new CustomAttribute(assembly.MainModule.ImportReference(ctorMethod))); + + return mainPrepareMethod; + } + + private MethodReference CreateDispatcher(AssemblyDefinition assembly, MethodReference method) + { + var updateEngineType = GetOrCreateUpdateType(assembly, true); + + var dispatcherMethod = new MethodDefinition($"Dispatcher_{method.Name}", MethodAttributes.HideBySig | MethodAttributes.Assembly | MethodAttributes.Static, assembly.MainModule.ImportReference(method.ReturnType)); + updateEngineType.Methods.Add(dispatcherMethod); + + dispatcherMethod.Parameters.Add(new ParameterDefinition("this", Mono.Cecil.ParameterAttributes.None, method.DeclaringType)); + foreach (var param in method.Parameters) + { + dispatcherMethod.Parameters.Add(new ParameterDefinition(param.Name, param.Attributes, param.ParameterType)); + } + + var il = dispatcherMethod.Body.GetILProcessor(); + il.Emit(OpCodes.Ldarg_0); + foreach (var param in dispatcherMethod.Parameters.Skip(1)) // first parameter is "this" + { + il.Emit(OpCodes.Ldarg, param); + } + il.Emit(OpCodes.Ldarg_0); + il.Emit(OpCodes.Ldvirtftn, method); + var callsite = new Mono.Cecil.CallSite(method.ReturnType) { HasThis = true }; + foreach (var param in method.Parameters) + callsite.Parameters.Add(param); + il.Emit(OpCodes.Calli, callsite); + il.Emit(OpCodes.Ret); + + return dispatcherMethod; + } + public void ProcessSerializers(CecilSerializerContext context) { var references = new HashSet(); @@ -62,13 +110,7 @@ public void ProcessSerializers(CecilSerializerContext context) return; } - // Get or create method - var updateEngineType = GetOrCreateUpdateType(context.Assembly, true); - var mainPrepareMethod = new MethodDefinition("UpdateMain", MethodAttributes.HideBySig | MethodAttributes.Assembly | MethodAttributes.Static, context.Assembly.MainModule.TypeSystem.Void); - updateEngineType.Methods.Add(mainPrepareMethod); - // Get some useful Cecil objects from Xenko.Core - var xenkoCoreModule = context.Assembly.GetXenkoCoreModule(); var xenkoEngineAssembly = context.Assembly.Name.Name == "Xenko.Engine" ? context.Assembly @@ -109,10 +151,7 @@ public void ProcessSerializers(CecilSerializerContext context) var typeType = coreAssembly.MainModule.GetTypeResolved(typeof(Type).FullName); getTypeFromHandleMethod = context.Assembly.MainModule.ImportReference(typeType.Methods.First(x => x.Name == "GetTypeFromHandle")); - // Make sure it is called at module startup - var moduleInitializerAttribute = xenkoCoreModule.GetType("Xenko.Core.ModuleInitializerAttribute"); - var ctorMethod = moduleInitializerAttribute.GetConstructors().Single(x => !x.IsStatic && !x.HasParameters); - mainPrepareMethod.CustomAttributes.Add(new CustomAttribute(context.Assembly.MainModule.ImportReference(ctorMethod))); + var mainPrepareMethod = CreateUpdateMethod(context.Assembly); // Emit serialization code for all the types we care about var processedTypes = new HashSet(TypeReferenceEqualityComparer.Default); @@ -245,7 +284,9 @@ public void ProcessType(CecilSerializerContext context, TypeReference type, Meth } var il = updateCurrentMethod.Body.GetILProcessor(); - var emptyObjectField = updateMainMethod.DeclaringType.Fields.FirstOrDefault(x => x.Name == "emptyObject"); + var typeIsValueType = type.IsResolvedValueType(); + var emptyObjectField = typeIsValueType ? null : updateMainMethod.DeclaringType.Fields.FirstOrDefault(x => x.Name == "emptyObject"); + VariableDefinition emptyStruct = null; // Note: forcing fields and properties to be processed in all cases foreach (var serializableItem in ComplexSerializerRegistry.GetSerializableItems(type, true, ComplexTypeSerializerFlags.SerializePublicFields | ComplexTypeSerializerFlags.SerializePublicProperties | ComplexTypeSerializerFlags.Updatable)) @@ -254,32 +295,50 @@ public void ProcessType(CecilSerializerContext context, TypeReference type, Meth { var field = fieldReference.Resolve(); - // First time it is needed, let's create empty object: var emptyObject = new object(); - if (emptyObjectField == null) + // First time it is needed, let's create empty object in the class (var emptyObject = new object()) or empty local struct in the method + if (typeIsValueType) { - emptyObjectField = new FieldDefinition("emptyObject", FieldAttributes.Static | FieldAttributes.Private, context.Assembly.MainModule.TypeSystem.Object); - - // Create static ctor that will initialize this object - var staticConstructor = new MethodDefinition(".cctor", - MethodAttributes.Private | MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, - context.Assembly.MainModule.TypeSystem.Void); - var staticConstructorIL = staticConstructor.Body.GetILProcessor(); - staticConstructorIL.Emit(OpCodes.Newobj, context.Assembly.MainModule.ImportReference(emptyObjectField.FieldType.Resolve().GetConstructors().Single(x => !x.IsStatic && !x.HasParameters))); - staticConstructorIL.Emit(OpCodes.Stsfld, emptyObjectField); - staticConstructorIL.Emit(OpCodes.Ret); - - updateMainMethod.DeclaringType.Fields.Add(emptyObjectField); - updateMainMethod.DeclaringType.Methods.Add(staticConstructor); + if (emptyStruct == null) + { + emptyStruct = new VariableDefinition(type); + updateMainMethod.Body.Variables.Add(emptyStruct); + } } + else + { + if (emptyObjectField == null) + { + emptyObjectField = new FieldDefinition("emptyObject", FieldAttributes.Static | FieldAttributes.Private, context.Assembly.MainModule.TypeSystem.Object); + + // Create static ctor that will initialize this object + var staticConstructor = new MethodDefinition(".cctor", + MethodAttributes.Private | MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, + context.Assembly.MainModule.TypeSystem.Void); + var staticConstructorIL = staticConstructor.Body.GetILProcessor(); + staticConstructorIL.Emit(OpCodes.Newobj, context.Assembly.MainModule.ImportReference(emptyObjectField.FieldType.Resolve().GetConstructors().Single(x => !x.IsStatic && !x.HasParameters))); + staticConstructorIL.Emit(OpCodes.Stsfld, emptyObjectField); + staticConstructorIL.Emit(OpCodes.Ret); + + updateMainMethod.DeclaringType.Fields.Add(emptyObjectField); + updateMainMethod.DeclaringType.Methods.Add(staticConstructor); + } + } + il.Emit(OpCodes.Ldtoken, type); il.Emit(OpCodes.Call, getTypeFromHandleMethod); il.Emit(OpCodes.Ldstr, field.Name); - il.Emit(OpCodes.Ldsfld, emptyObjectField); + if (typeIsValueType) + il.Emit(OpCodes.Ldloca, emptyStruct); + else + il.Emit(OpCodes.Ldsfld, emptyObjectField); il.Emit(OpCodes.Ldflda, context.Assembly.MainModule.ImportReference(fieldReference)); il.Emit(OpCodes.Conv_I); - il.Emit(OpCodes.Ldsfld, emptyObjectField); + if (typeIsValueType) + il.Emit(OpCodes.Ldloca, emptyStruct); + else + il.Emit(OpCodes.Ldsfld, emptyObjectField); il.Emit(OpCodes.Conv_I); il.Emit(OpCodes.Sub); il.Emit(OpCodes.Conv_I4); @@ -300,12 +359,21 @@ public void ProcessType(CecilSerializerContext context, TypeReference type, Meth il.Emit(OpCodes.Call, getTypeFromHandleMethod); il.Emit(OpCodes.Ldstr, property.Name); + // If it's a virtual or interface call, we need to create a dispatcher using ldvirtftn + if (property.GetMethod.IsVirtual) + propertyGetMethod = CreateDispatcher(context.Assembly, propertyGetMethod); + il.Emit(OpCodes.Ldftn, propertyGetMethod); - // Only get setter if it exists and it's public + // Set whether getter method uses a VirtualDispatch (static call) or instance call + il.Emit(property.GetMethod.IsVirtual ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0); + + // Only uses setter if it exists and it's public if (property.SetMethod != null && property.SetMethod.IsPublic) { var propertySetMethod = context.Assembly.MainModule.ImportReference(property.SetMethod).MakeGeneric(updateCurrentMethod.GenericParameters.ToArray()); + if (property.SetMethod.IsVirtual) + propertySetMethod = CreateDispatcher(context.Assembly, propertySetMethod); il.Emit(OpCodes.Ldftn, propertySetMethod); } else @@ -315,6 +383,9 @@ public void ProcessType(CecilSerializerContext context, TypeReference type, Meth il.Emit(OpCodes.Conv_I); } + // Set whether setter method uses a VirtualDispatch (static call) or instance call + il.Emit((property.SetMethod?.IsVirtual ?? false) ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0); + var propertyType = context.Assembly.MainModule.ImportReference(replaceGenericsVisitor != null ? replaceGenericsVisitor.VisitDynamic(property.PropertyType) : property.PropertyType); var updatablePropertyInflatedCtor = GetOrCreateUpdatablePropertyCtor(context.Assembly, propertyType); @@ -338,7 +409,6 @@ public void ProcessType(CecilSerializerContext context, TypeReference type, Meth } } - private static string ComputeUpdateMethodName(TypeDefinition typeDefinition) { var typeName = ComputeTypeName(typeDefinition); diff --git a/sources/core/Xenko.Core.AssemblyProcessor/Utilities.cs b/sources/core/Xenko.Core.AssemblyProcessor/Utilities.cs index 9b48127e72..544dd93f89 100644 --- a/sources/core/Xenko.Core.AssemblyProcessor/Utilities.cs +++ b/sources/core/Xenko.Core.AssemblyProcessor/Utilities.cs @@ -37,6 +37,10 @@ public static string BuildValidClassName([NotNull] string originalName, char rep [NotNull] public static string BuildValidClassName([NotNull] string originalName, IEnumerable additionalReservedWords, char replacementCharacter = '_') { + // C# identifiers must start with a letter or underscore + if (char.IsLetter(originalName[0]) == false && originalName[0] != '_') + originalName = "_" + originalName; + if (ReservedNames.Contains(originalName)) return originalName + replacementCharacter; @@ -70,6 +74,10 @@ public static string BuildValidNamespaceName([NotNull] string originalName, char [NotNull] public static string BuildValidNamespaceName([NotNull] string originalName, IEnumerable additionalReservedWords, char replacementCharacter = '_') { + // C# identifiers must start with a letter or underscore + if (char.IsLetter(originalName[0]) == false && originalName[0] != '_') + originalName = "_" + originalName; + if (ReservedNames.Contains(originalName)) return originalName + replacementCharacter; diff --git a/sources/core/Xenko.Core.AssemblyProcessor/Xenko.Core.AssemblyProcessor.csproj b/sources/core/Xenko.Core.AssemblyProcessor/Xenko.Core.AssemblyProcessor.csproj index 8772ff8f55..bd7dec304b 100644 --- a/sources/core/Xenko.Core.AssemblyProcessor/Xenko.Core.AssemblyProcessor.csproj +++ b/sources/core/Xenko.Core.AssemblyProcessor/Xenko.Core.AssemblyProcessor.csproj @@ -3,7 +3,7 @@ 8.0.30703 2.0 Exe - net472 + net48 true @@ -24,19 +24,8 @@ + - - ..\..\..\deps\Mono.Cecil\Mono.Cecil.dll - - - ..\..\..\deps\Mono.Cecil\Mono.Cecil.Pdb.dll - - - ..\..\..\deps\Mono.Cecil\Mono.Cecil.Mdb.dll - - - ..\..\..\deps\Mono.Cecil\Mono.Cecil.Rocks.dll - @@ -84,13 +73,13 @@ - + xcopy /d /y $(TargetDir)*.* $(SolutionDir)..\deps\AssemblyProcessor cd $(SolutionDir)..\deps\AssemblyProcessor -$(ILRepack) Xenko.Core.AssemblyProcessor.exe Mono.Cecil.dll Mono.Cecil.Mdb.dll Mono.Cecil.Pdb.dll Mono.Cecil.Rocks.dll Mono.Options.dll System.ValueTuple.dll /out:Xenko.Core.AssemblyProcessor.Packed.exe +$(ILRepack) Xenko.Core.AssemblyProcessor.exe Mono.Cecil.dll Mono.Cecil.Mdb.dll Mono.Cecil.Pdb.dll Mono.Cecil.Rocks.dll Mono.Options.dll System.ValueTuple.dll /out:Xenko.Core.AssemblyProcessor.Packed2.exe - \ No newline at end of file + diff --git a/sources/core/Xenko.Core.Design.Tests/Xenko.Core.Design.Tests.csproj b/sources/core/Xenko.Core.Design.Tests/Xenko.Core.Design.Tests.csproj index 08db046cbc..586287d4ff 100644 --- a/sources/core/Xenko.Core.Design.Tests/Xenko.Core.Design.Tests.csproj +++ b/sources/core/Xenko.Core.Design.Tests/Xenko.Core.Design.Tests.csproj @@ -1,6 +1,6 @@ - + 8.0.30703 2.0 @@ -24,5 +24,5 @@ - + \ No newline at end of file diff --git a/sources/core/Xenko.Core.Design/AbsoluteId.cs b/sources/core/Xenko.Core.Design/AbsoluteId.cs index a9616ca855..c2e6d8b1e6 100644 --- a/sources/core/Xenko.Core.Design/AbsoluteId.cs +++ b/sources/core/Xenko.Core.Design/AbsoluteId.cs @@ -36,13 +36,11 @@ public AbsoluteId(AssetId assetId, Guid objectId) /// public Guid ObjectId { get; } - /// public static bool operator ==(AbsoluteId left, AbsoluteId right) { return left.Equals(right); } - /// public static bool operator !=(AbsoluteId left, AbsoluteId right) { return !left.Equals(right); @@ -57,8 +55,7 @@ public bool Equals(AbsoluteId other) /// public override bool Equals(object obj) { - if (ReferenceEquals(null, obj)) return false; - return obj is AbsoluteId && Equals((AbsoluteId)obj); + return obj is AbsoluteId id && Equals(id); } /// diff --git a/sources/core/Xenko.Core.Design/Extensions/TypeDescriptorExtensions.cs b/sources/core/Xenko.Core.Design/Extensions/TypeDescriptorExtensions.cs index dedec5a422..2fa5230449 100644 --- a/sources/core/Xenko.Core.Design/Extensions/TypeDescriptorExtensions.cs +++ b/sources/core/Xenko.Core.Design/Extensions/TypeDescriptorExtensions.cs @@ -43,7 +43,24 @@ public static IEnumerable GetInheritedInstantiableTypes([NotNull] this Typ { AllAssemblies.AddRange(AssemblyRegistry.Find(AssemblyCommonCategories.Assets)); } - AllInstantiableTypes.AddRange(AllAssemblies.SelectMany(x => x.GetTypes().Where(IsInstantiableType))); + for (int i = 0; i < AllAssemblies.Count; i++) + { + var assembly = AllAssemblies[i]; + try + { + var types = assembly.GetExportedTypes(); + for (int j=0; j x.GetTypes().Where(IsInstantiableType))); } result = AllInstantiableTypes.Where(type.IsAssignableFrom).ToList(); diff --git a/sources/core/Xenko.Core.Design/IO/UPath.cs b/sources/core/Xenko.Core.Design/IO/UPath.cs index e2a17d32cf..80e5fc8a53 100644 --- a/sources/core/Xenko.Core.Design/IO/UPath.cs +++ b/sources/core/Xenko.Core.Design/IO/UPath.cs @@ -363,7 +363,7 @@ public UPath MakeRelative([NotNull] UDirectory anchorDirectory) if (anchorDirectory.HasDrive != HasDrive) { - throw new InvalidOperationException("Path should have no drive information/or both drive information simultaneously"); + throw new InvalidOperationException("Path '" + this.ToString() + "' with anchor '" + anchorDirectory.ToString() + "' should have no drive information/or both drive information simultaneously"); } // Return a "." when the directory is the same diff --git a/sources/core/Xenko.Core.Design/Module.cs b/sources/core/Xenko.Core.Design/Module.cs index cf620f171e..4bdcd6932f 100644 --- a/sources/core/Xenko.Core.Design/Module.cs +++ b/sources/core/Xenko.Core.Design/Module.cs @@ -2,9 +2,9 @@ // Distributed under the MIT license. See the LICENSE.md file in the project root for more information. using System.ComponentModel; - using Xenko.Core.Mathematics; using Xenko.Core.Reflection; +using Xenko.Core.Serialization; using Xenko.Core.TypeConverters; namespace Xenko.Core @@ -16,6 +16,7 @@ public static void Initialize() { // Make sure that this assembly is registered AssemblyRegistry.Register(typeof(Module).Assembly, AssemblyCommonCategories.Assets); + TypeDescriptor.AddAttributes(typeof(Color), new TypeConverterAttribute(typeof(ColorConverter))); TypeDescriptor.AddAttributes(typeof(Color3), new TypeConverterAttribute(typeof(Color3Converter))); TypeDescriptor.AddAttributes(typeof(Color4), new TypeConverterAttribute(typeof(Color4Converter))); @@ -28,6 +29,7 @@ public static void Initialize() TypeDescriptor.AddAttributes(typeof(Vector2), new TypeConverterAttribute(typeof(Vector2Converter))); TypeDescriptor.AddAttributes(typeof(Vector3), new TypeConverterAttribute(typeof(Vector3Converter))); TypeDescriptor.AddAttributes(typeof(Vector4), new TypeConverterAttribute(typeof(Vector4Converter))); + TypeDescriptor.AddAttributes(typeof(IUrlReference), new TypeConverterAttribute(typeof(UrlReferenceConverter))); } } } diff --git a/sources/core/Xenko.Core.Design/Reflection/AssemblyContainer.cs b/sources/core/Xenko.Core.Design/Reflection/AssemblyContainer.cs index 9bd208dba3..1a4af6e46e 100644 --- a/sources/core/Xenko.Core.Design/Reflection/AssemblyContainer.cs +++ b/sources/core/Xenko.Core.Design/Reflection/AssemblyContainer.cs @@ -244,7 +244,7 @@ private Assembly LoadAssemblyFromPathInternal([NotNull] string assemblyFullPath) // - need to be fast (make sure to use NuGet caching mechanism) if (library.RuntimeAssemblyGroups.Count == 0) { - var runtimeFolder = new[] { "win-d3d11", "win", "any" } + var runtimeFolder = new[] { "win", "any" } .Select(runtime => Path.Combine(globalPackagesFolder, library.Path, "runtimes", runtime)) .Where(Directory.Exists) .SelectMany(folder => Directory.EnumerateDirectories(Path.Combine(folder, "lib"))) diff --git a/sources/core/Xenko.Core.Design/Reflection/DataVisitorBase.cs b/sources/core/Xenko.Core.Design/Reflection/DataVisitorBase.cs index 7dfa3294fb..e67fa8445b 100644 --- a/sources/core/Xenko.Core.Design/Reflection/DataVisitorBase.cs +++ b/sources/core/Xenko.Core.Design/Reflection/DataVisitorBase.cs @@ -191,12 +191,16 @@ public virtual void VisitObject(object obj, ObjectDescriptor descriptor, bool vi case DescriptorCategory.Array: VisitArray((Array)obj, (ArrayDescriptor)descriptor); break; + case DescriptorCategory.List: case DescriptorCategory.Collection: VisitCollection((IEnumerable)obj, (CollectionDescriptor)descriptor); break; case DescriptorCategory.Dictionary: VisitDictionary(obj, (DictionaryDescriptor)descriptor); break; + case DescriptorCategory.Set: + VisitSet((IEnumerable)obj, (SetDescriptor)descriptor); + break; } } @@ -227,6 +231,10 @@ public virtual void VisitArrayItem(Array array, ArrayDescriptor descriptor, int /// public virtual void VisitCollection(IEnumerable collection, CollectionDescriptor descriptor) { + if (descriptor.Category == DescriptorCategory.Set) + { + throw new ArgumentException("Shouldn't call VisitCollection() to visit a set"); + } var i = 0; // Make a copy in case VisitCollectionItem mutates something @@ -273,6 +281,26 @@ public virtual void VisitDictionaryKeyValue(object dictionary, DictionaryDescrip Visit(value, valueDescriptor); } + /// + public virtual void VisitSet(IEnumerable set, SetDescriptor descriptor) + { + // Make a copy in case VisitCollectionItem mutates something + IEnumerator enumerator = set.GetEnumerator(); + while (enumerator.MoveNext()) + { + object item = enumerator.Current; + CurrentPath.Push(descriptor, item); + VisitSetItem(set, descriptor, item, TypeDescriptorFactory.Find(item?.GetType() ?? descriptor.ElementType)); + CurrentPath.Pop(); + } + } + + /// + public virtual void VisitSetItem(IEnumerable set, SetDescriptor descriptor, object item, ITypeDescriptor itemDescriptor) + { + Visit(item, itemDescriptor); + } + protected virtual bool CanVisit([NotNull] object obj) { // Always visit valuetypes @@ -284,5 +312,13 @@ protected virtual bool CanVisit([NotNull] object obj) // true if not visited yet; otherwise, false return visitedObjects.Add(obj); } + + /// + /// Check if an array is of primtive types, these can be skipped in most processors + /// + /// + /// + protected bool IsArrayOfPrimitiveType(ArrayDescriptor descriptor) + => BlittableHelper.IsBlittable(descriptor.ElementType); } } diff --git a/sources/core/Xenko.Core.Design/Reflection/IDataVisitor.cs b/sources/core/Xenko.Core.Design/Reflection/IDataVisitor.cs index f1c96814e3..7913b1bbe2 100644 --- a/sources/core/Xenko.Core.Design/Reflection/IDataVisitor.cs +++ b/sources/core/Xenko.Core.Design/Reflection/IDataVisitor.cs @@ -91,5 +91,21 @@ public interface IDataVisitor /// The value. /// The value descriptor. void VisitDictionaryKeyValue([NotNull] object dictionary, [NotNull] DictionaryDescriptor descriptor, object key, ITypeDescriptor keyDescriptor, object value, ITypeDescriptor valueDescriptor); + + /// + /// Visits a set. + /// + /// The set. + /// The descriptor. + void VisitSet([NotNull] IEnumerable set, [NotNull] SetDescriptor descriptor); + + /// + /// Visits a set item. + /// + /// The set. + /// The descriptor. + /// The item. + /// The item descriptor. + void VisitSetItem([NotNull] IEnumerable set, [NotNull] SetDescriptor descriptor, object item, ITypeDescriptor itemDescriptor); } } diff --git a/sources/core/Xenko.Core.Design/TypeConverters/TypeConverterHelper.cs b/sources/core/Xenko.Core.Design/TypeConverters/TypeConverterHelper.cs index 89ee11194e..a6c4edf32b 100644 --- a/sources/core/Xenko.Core.Design/TypeConverters/TypeConverterHelper.cs +++ b/sources/core/Xenko.Core.Design/TypeConverters/TypeConverterHelper.cs @@ -20,12 +20,13 @@ public static bool CanConvert([NotNull] Type sourceType, [NotNull] Type destinat if (sourceType == null) throw new ArgumentNullException(nameof(sourceType)); if (destinationType == null) throw new ArgumentNullException(nameof(destinationType)); + var context = new DestinationTypeDescriptorContext(destinationType); // already same type or inherited (also works with interface), or // implements IConvertible, or // can convert from source type to target type return destinationType.IsAssignableFrom(sourceType) || (typeof(IConvertible).IsAssignableFrom(sourceType) && Type.GetTypeCode(destinationType) != TypeCode.Object) || - TypeDescriptor.GetConverter(sourceType).CanConvertTo(destinationType) || TypeDescriptor.GetConverter(destinationType).CanConvertFrom(sourceType); + TypeDescriptor.GetConverter(sourceType).CanConvertTo(destinationType) || TypeDescriptor.GetConverter(destinationType).CanConvertFrom(context, sourceType); } /// @@ -69,10 +70,11 @@ public static bool TryConvert(object source, [NotNull] Type destinationType, out return true; } // Try to convert using the target type converter + var context = new DestinationTypeDescriptorContext(destinationType); converter = TypeDescriptor.GetConverter(destinationType); - if (converter.CanConvertFrom(sourceType)) + if (converter.CanConvertFrom(context, sourceType)) { - target = converter.ConvertFrom(source); + target = converter.ConvertFrom(context, System.Globalization.CultureInfo.CurrentCulture, source); return true; } } @@ -92,5 +94,43 @@ public static bool TryConvert(object source, [NotNull] Type destinationType, out target = null; return false; } + + public static Type GetDestinationType(ITypeDescriptorContext context) + { + if (context is DestinationTypeDescriptorContext c) return c.DestinationType; + + return null; + } + + private class DestinationTypeDescriptorContext : ITypeDescriptorContext + { + public DestinationTypeDescriptorContext(Type destinationType) + { + DestinationType = destinationType; + } + + public Type DestinationType { get; } + + public IContainer Container => null; + + public object Instance => null; + + public PropertyDescriptor PropertyDescriptor => null; + + public object GetService(Type serviceType) + { + return null; + } + + public void OnComponentChanged() + { + + } + + public bool OnComponentChanging() + { + return true; + } + } } } diff --git a/sources/core/Xenko.Core.Design/TypeConverters/UrlReferenceConverter.cs b/sources/core/Xenko.Core.Design/TypeConverters/UrlReferenceConverter.cs new file mode 100644 index 0000000000..8a9b518675 --- /dev/null +++ b/sources/core/Xenko.Core.Design/TypeConverters/UrlReferenceConverter.cs @@ -0,0 +1,35 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using System.ComponentModel; +using System.Globalization; +using Xenko.Core.Serialization; + +namespace Xenko.Core.TypeConverters +{ + /// + /// Defines a type converter for . + /// + public class UrlReferenceConverter : BaseConverter + { + + public UrlReferenceConverter() + { + //TODO: PropertyDescriptor does not support Properties, only fields so can not currently Set Properties. Does not seem to impact usage. + } + + /// + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + return UrlReferenceHelper.IsUrlReferenceType(TypeConverterHelper.GetDestinationType(context)); + } + + /// + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + var attachedReference = AttachedReferenceManager.GetAttachedReference(value); + var destinationType = TypeConverterHelper.GetDestinationType(context); + return UrlReferenceHelper.CreateReference(destinationType, attachedReference.Id, attachedReference.Url); + } + } +} diff --git a/sources/core/Xenko.Core.Design/VisualStudio/VisualStudioVersions.cs b/sources/core/Xenko.Core.Design/VisualStudio/VisualStudioVersions.cs index 5bb776023f..70af7c825c 100644 --- a/sources/core/Xenko.Core.Design/VisualStudio/VisualStudioVersions.cs +++ b/sources/core/Xenko.Core.Design/VisualStudio/VisualStudioVersions.cs @@ -148,6 +148,17 @@ private static List BuildIDEInfos() var nickname = inst2.GetProperties().GetValue("nickname") as string; if (!string.IsNullOrEmpty(nickname)) displayName = $"{displayName} ({nickname})"; + else + { + var installationName = inst2.GetInstallationName(); + // In case of Preview, we have: + // "installationName": "VisualStudioPreview/16.4.0-pre.6.0+29519.161" + // "channelId": "VisualStudio.16.Preview" + if (installationName.Contains("Preview")) + { + displayName = displayName + " (Preview)"; + } + } } catch (COMException) { diff --git a/sources/core/Xenko.Core.Design/Xenko.Core.Design.csproj b/sources/core/Xenko.Core.Design/Xenko.Core.Design.csproj index 3d2af33d48..239d8510b1 100644 --- a/sources/core/Xenko.Core.Design/Xenko.Core.Design.csproj +++ b/sources/core/Xenko.Core.Design/Xenko.Core.Design.csproj @@ -1,6 +1,6 @@ - + - + 8.0.30703 2.0 @@ -32,14 +32,14 @@ - - - - + + + + - + \ No newline at end of file diff --git a/sources/core/Xenko.Core.IO/NativeLockFile.cs b/sources/core/Xenko.Core.IO/NativeLockFile.cs index c0ab13299e..03e8aff0e2 100644 --- a/sources/core/Xenko.Core.IO/NativeLockFile.cs +++ b/sources/core/Xenko.Core.IO/NativeLockFile.cs @@ -48,6 +48,10 @@ public static void LockFile(FileStream fileStream, long offset, long count, bool throw new IOException("Couldn't lock file."); } #else + // some OSes can't lock a file that can't be written too + // (looking at you, Linux) + if (fileStream.CanWrite == false) return; + bool tryAgain; do { @@ -89,6 +93,10 @@ public static void UnlockFile(FileStream fileStream, long offset, long count) throw new IOException("Couldn't unlock file."); } #else + // some OSes can't (un)lock a file that can't be written too + // (looking at you, Linux) + if (fileStream.CanWrite == false) return; + fileStream.Unlock(offset, count); #endif } diff --git a/sources/core/Xenko.Core.IO/Xenko.Core.IO.csproj b/sources/core/Xenko.Core.IO/Xenko.Core.IO.csproj index 5456ca2055..c8d732b828 100644 --- a/sources/core/Xenko.Core.IO/Xenko.Core.IO.csproj +++ b/sources/core/Xenko.Core.IO/Xenko.Core.IO.csproj @@ -3,7 +3,7 @@ true - + Xenko Core IO assembly. @@ -12,32 +12,28 @@ - true true --auto-module-initializer true * - - - - Properties\SharedAssemblyInfo.cs - + contentfiles;analyzers - - - + + + + \ No newline at end of file diff --git a/sources/core/Xenko.Core.Mathematics.Tests/Xenko.Core.Mathematics.Tests.csproj b/sources/core/Xenko.Core.Mathematics.Tests/Xenko.Core.Mathematics.Tests.csproj index 0a70bce174..43446395e7 100644 --- a/sources/core/Xenko.Core.Mathematics.Tests/Xenko.Core.Mathematics.Tests.csproj +++ b/sources/core/Xenko.Core.Mathematics.Tests/Xenko.Core.Mathematics.Tests.csproj @@ -3,7 +3,7 @@ true - + 8.0.30703 2.0 @@ -29,5 +29,5 @@ - + \ No newline at end of file diff --git a/sources/core/Xenko.Core.Mathematics/BoundingFrustum.cs b/sources/core/Xenko.Core.Mathematics/BoundingFrustum.cs index b1f5ec19b5..8755b637f6 100644 --- a/sources/core/Xenko.Core.Mathematics/BoundingFrustum.cs +++ b/sources/core/Xenko.Core.Mathematics/BoundingFrustum.cs @@ -47,46 +47,52 @@ public struct BoundingFrustum public BoundingFrustum(ref Matrix matrix) { // Left - LeftPlane = Plane.Normalize(new Plane( + Plane.Normalize( matrix.M14 + matrix.M11, matrix.M24 + matrix.M21, matrix.M34 + matrix.M31, - matrix.M44 + matrix.M41)); + matrix.M44 + matrix.M41, + out LeftPlane); // Right - RightPlane = Plane.Normalize(new Plane( + Plane.Normalize( matrix.M14 - matrix.M11, matrix.M24 - matrix.M21, matrix.M34 - matrix.M31, - matrix.M44 - matrix.M41)); + matrix.M44 - matrix.M41, + out RightPlane); // Top - TopPlane = Plane.Normalize(new Plane( + Plane.Normalize( matrix.M14 - matrix.M12, matrix.M24 - matrix.M22, matrix.M34 - matrix.M32, - matrix.M44 - matrix.M42)); + matrix.M44 - matrix.M42, + out TopPlane); // Bottom - BottomPlane = Plane.Normalize(new Plane( + Plane.Normalize( matrix.M14 + matrix.M12, matrix.M24 + matrix.M22, matrix.M34 + matrix.M32, - matrix.M44 + matrix.M42)); + matrix.M44 + matrix.M42, + out BottomPlane); // Near - NearPlane = Plane.Normalize(new Plane( - matrix.M13, - matrix.M23, - matrix.M33, - matrix.M43)); + Plane.Normalize( + matrix.M14 + matrix.M13, + matrix.M24 + matrix.M23, + matrix.M34 + matrix.M33, + matrix.M44 + matrix.M43, + out NearPlane); // Far - FarPlane = Plane.Normalize(new Plane( + Plane.Normalize( matrix.M14 - matrix.M13, matrix.M24 - matrix.M23, matrix.M34 - matrix.M33, - matrix.M44 - matrix.M43)); + matrix.M44 - matrix.M43, + out FarPlane); } /// @@ -99,5 +105,16 @@ public bool Contains(ref BoundingBoxExt boundingBoxExt) { return CollisionHelper.FrustumContainsBox(ref this, ref boundingBoxExt); } + + /// + /// Check whether this frustum contains the specified . + /// + /// The bounding box. + /// true if this frustum contains the specified bounding box. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Contains(ref BoundingBox boundingBox) + { + return CollisionHelper.FrustumContainsBox(ref this, ref boundingBox); + } } } diff --git a/sources/core/Xenko.Core.Mathematics/BoundingSphere.cs b/sources/core/Xenko.Core.Mathematics/BoundingSphere.cs index ea38aed873..cad17a02f7 100644 --- a/sources/core/Xenko.Core.Mathematics/BoundingSphere.cs +++ b/sources/core/Xenko.Core.Mathematics/BoundingSphere.cs @@ -50,7 +50,7 @@ public struct BoundingSphere : IEquatable, IFormattable public Vector3 Center; /// - /// The radious of the sphere. + /// The radius of the sphere. /// public float Radius; diff --git a/sources/core/Xenko.Core.Mathematics/CollisionHelper.cs b/sources/core/Xenko.Core.Mathematics/CollisionHelper.cs index 65ed64d160..eadca9a26e 100644 --- a/sources/core/Xenko.Core.Mathematics/CollisionHelper.cs +++ b/sources/core/Xenko.Core.Mathematics/CollisionHelper.cs @@ -1503,49 +1503,37 @@ public static bool FrustumContainsBox(ref BoundingFrustum frustum, ref BoundingB return true; } -/* + } + + /// + /// Determines whether a intersects or contains an AABB determined by its center and extent. + /// Faster variant specific for frustum culling. Takes a BoundingBox instead of BoundingBoxExt + /// + /// Camera frustum + /// Bounding box + /// + public static bool FrustumContainsBox(ref BoundingFrustum frustum, ref BoundingBox boundingBox) + { unsafe { fixed (Plane* planeStart = &frustum.LeftPlane) - fixed (Vector3* pExtent = &boundingBoxExt.Extent) { var plane = planeStart; for (int i = 0; i < 6; ++i) { // Previous code: - //if (Vector3.Dot(boundingBoxExt.Center, plane->Normal) - // + boundingBoxExt.Extent.X * Math.Abs(plane->Normal.X) - // + boundingBoxExt.Extent.Y * Math.Abs(plane->Normal.Y) - // + boundingBoxExt.Extent.Z * Math.Abs(plane->Normal.Z) - // <= -plane->D) - - // Optimized version (only 1 dot and cheaper Math.Abs) - // https://fgiesen.wordpress.com/2010/10/17/view-frustum-culling/ - // return dot3(center, plane) + dot3(extent, absPlane) <= -plane.w; - // or - // vector4 signFlip = componentwise_and(plane, 0x80000000); - // vector3 centerOffset = xor(extent, signFlip) - // dot3(center + centerOffset, plane) <= -plane.w; - - uint val = (((uint*)&plane->Normal)[0] & 0x80000000) ^ ((uint*)pExtent)[0]; - var dist = plane->Normal.X * ((*(float*)(&val)) + boundingBoxExt.Center.X); - - val = (((uint*)&plane->Normal)[1] & 0x80000000) ^ ((uint*)pExtent)[1]; - dist += plane->Normal.Y * ((*(float*)(&val)) + boundingBoxExt.Center.Y); - - val = (((uint*)&plane->Normal)[2] & 0x80000000) ^ ((uint*)pExtent)[2]; - dist += plane->Normal.Z * ((*(float*)(&val)) + boundingBoxExt.Center.Z); - - if (dist <= -plane->D) + if (Vector3.Dot(boundingBox.Center, plane->Normal) + + boundingBox.Extent.X * Math.Abs(plane->Normal.X) + + boundingBox.Extent.Y * Math.Abs(plane->Normal.Y) + + boundingBox.Extent.Z * Math.Abs(plane->Normal.Z) + <= -plane->D) return false; - plane++; } } return true; } - */ } } } diff --git a/sources/core/Xenko.Core.Mathematics/Color.cs b/sources/core/Xenko.Core.Mathematics/Color.cs index 60c8b0f506..e80d3e5d7c 100644 --- a/sources/core/Xenko.Core.Mathematics/Color.cs +++ b/sources/core/Xenko.Core.Mathematics/Color.cs @@ -44,16 +44,18 @@ public partial struct Color : IEquatable /// The value that will be assigned to all components. public Color(byte value) { - A = R = G = B = value; + R = value; + G = value; + B = value; + A = value; } /// /// Initializes a new instance of the struct. /// /// The value that will be assigned to all components. - public Color(float value) + public Color(float value) : this(ToByte(value)) { - A = R = G = B = ToByte(value); } /// diff --git a/sources/core/Xenko.Core.Mathematics/Color3.cs b/sources/core/Xenko.Core.Mathematics/Color3.cs index ce04091e2f..38868e0ed4 100644 --- a/sources/core/Xenko.Core.Mathematics/Color3.cs +++ b/sources/core/Xenko.Core.Mathematics/Color3.cs @@ -28,6 +28,7 @@ */ using System; using System.Globalization; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Xenko.Core.Mathematics @@ -42,6 +43,16 @@ public struct Color3 : IEquatable, IFormattable { private const string ToStringFormat = "R:{0} G:{1} B:{2}"; + /// + /// The Black color (0, 0, 0). + /// + public static readonly Color3 Black = new Color3(0.0f); + + /// + /// The White color (1, 1, 1). + /// + public static readonly Color3 White = new Color3(1.0f); + /// /// The red component of the color. /// @@ -66,7 +77,9 @@ public struct Color3 : IEquatable, IFormattable /// The value that will be assigned to all components. public Color3(float value) { - R = G = B = value; + R = value; + G = value; + B = value; } /// @@ -168,6 +181,30 @@ public float this[int index] } } + /// + /// Normalizes the RGB channels. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Normalize() + { + float length = (float)Math.Sqrt((R * R) + (G * G) + (B * B)); + if (length > MathUtil.ZeroTolerance) + { + float inverse = 1.0f / length; + R *= inverse; + G *= inverse; + B *= inverse; + } + } + + /// + /// Gets a value indicting whether this instance is normalized. + /// + public bool IsNormalized + { + get { return Math.Abs((R * R) + (G * G) + (B * B) - 1f) < MathUtil.ZeroTolerance; } + } + /// /// Converts the color into a packed integer. /// diff --git a/sources/core/Xenko.Core.Mathematics/Color4.cs b/sources/core/Xenko.Core.Mathematics/Color4.cs index 1480b00000..2421c707fb 100644 --- a/sources/core/Xenko.Core.Mathematics/Color4.cs +++ b/sources/core/Xenko.Core.Mathematics/Color4.cs @@ -28,6 +28,7 @@ */ using System; using System.Globalization; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Xenko.Core.Mathematics @@ -82,7 +83,10 @@ public struct Color4 : IEquatable, IFormattable /// The value that will be assigned to all components. public Color4(float value) { - A = R = G = B = value; + R = value; + G = value; + B = value; + A = value; } /// @@ -159,8 +163,8 @@ public Color4(float[] values) { if (values == null) throw new ArgumentNullException(nameof(values)); - if (values.Length != 3 && values.Length != 4) - throw new ArgumentOutOfRangeException(nameof(values), "There must be 3 or 4 float[] values for Color4."); + if (values.Length < 3) + throw new ArgumentOutOfRangeException(nameof(values), "There must be at least 3 float[] values for Color4."); R = values[0]; G = values[1]; @@ -301,6 +305,44 @@ public int ToRgba() return (int)value; } + /// + /// Converts the color into a byte Color + /// + /// A Color object + public Color ToColor() + { + byte a = (byte)(A * 255.0f); + byte r = (byte)(R * 255.0f); + byte g = (byte)(G * 255.0f); + byte b = (byte)(B * 255.0f); + + return new Color(r, g, b, a); + } + + /// + /// Normalizes the RGB channels. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Normalize() + { + float length = (float)Math.Sqrt((R * R) + (G * G) + (B * B)); + if (length > MathUtil.ZeroTolerance) + { + float inverse = 1.0f / length; + R *= inverse; + G *= inverse; + B *= inverse; + } + } + + /// + /// Gets a value indicting whether this instance is normalized. + /// + public bool IsNormalized + { + get { return Math.Abs((R * R) + (G * G) + (B * B) - 1f) < MathUtil.ZeroTolerance; } + } + /// /// Converts the color into a three component vector. /// @@ -446,6 +488,17 @@ public static Color4 Scale(Color4 value, float scale) return new Color4(value.R * scale, value.G * scale, value.B * scale, value.A * scale); } + /// + /// Scales a color's RGB channels. + /// + /// The color to scale. + /// The amount by which to scale. + /// The scaled color. + public static Color4 ScaleRGB(Color4 value, float scale) + { + return new Color4(value.R * scale, value.G * scale, value.B * scale, value.A); + } + /// /// Negates a color. /// diff --git a/sources/core/Xenko.Core.Mathematics/ColorBGRA.cs b/sources/core/Xenko.Core.Mathematics/ColorBGRA.cs index 02ffd94d26..17a17d6b53 100644 --- a/sources/core/Xenko.Core.Mathematics/ColorBGRA.cs +++ b/sources/core/Xenko.Core.Mathematics/ColorBGRA.cs @@ -46,16 +46,18 @@ public partial struct ColorBGRA : IEquatable, IFormattable /// The value that will be assigned to all components. public ColorBGRA(byte value) { - A = R = G = B = value; + B = value; + G = value; + R = value; + A = value; } /// /// Initializes a new instance of the struct. /// /// The value that will be assigned to all components. - public ColorBGRA(float value) + public ColorBGRA(float value) : this(ToByte(value)) { - A = R = G = B = ToByte(value); } /// diff --git a/sources/core/Xenko.Core.Mathematics/Half2.cs b/sources/core/Xenko.Core.Mathematics/Half2.cs index ebb11a64f9..374e4b501c 100644 --- a/sources/core/Xenko.Core.Mathematics/Half2.cs +++ b/sources/core/Xenko.Core.Mathematics/Half2.cs @@ -35,6 +35,32 @@ namespace Xenko.Core.Mathematics [StructLayout(LayoutKind.Sequential, Pack = 2)] public struct Half2 : IEquatable { + /// + /// The size of the type, in bytes. + /// + public static readonly int SizeInBytes = Utilities.SizeOf(); + + + /// + /// A with all of its components set to zero. + /// + public static readonly Half2 Zero = new Half2(); + + /// + /// The X unit (1, 0). + /// + public static readonly Half2 UnitX = new Half2(1.0f, 0.0f); + + /// + /// The Y unit (0, 1). + /// + public static readonly Half2 UnitY = new Half2(0.0f, 1.0f); + + /// + /// A with all of its components set to one. + /// + public static readonly Half2 One = new Half2(1.0f, 1.0f); + /// /// Gets or sets the X component of the vector. /// @@ -68,6 +94,23 @@ public Half2(Half value) this.Y = value; } + /// + /// Initializes a new instance of the struct. + /// + /// The values to assign to the X and Y components of the vector. This must be an array with two elements. + /// Thrown when is null. + /// Thrown when contains more or less than two elements. + public Half2(Half[] values) + { + if (values == null) + throw new ArgumentNullException("values"); + if (values.Length != 2) + throw new ArgumentOutOfRangeException("values", "There must be two and only two input values for Half2."); + + X = values[0]; + Y = values[1]; + } + /// /// Initializes a new instance of the structure. /// diff --git a/sources/core/Xenko.Core.Mathematics/Half3.cs b/sources/core/Xenko.Core.Mathematics/Half3.cs index aa1f162563..df1eb2f269 100644 --- a/sources/core/Xenko.Core.Mathematics/Half3.cs +++ b/sources/core/Xenko.Core.Mathematics/Half3.cs @@ -35,6 +35,36 @@ namespace Xenko.Core.Mathematics [StructLayout(LayoutKind.Sequential, Pack = 2)] public struct Half3 : IEquatable { + /// + /// The size of the type, in bytes. + /// + public static readonly int SizeInBytes = Utilities.SizeOf(); + + /// + /// A with all of its components set to zero. + /// + public static readonly Half3 Zero = new Half3(); + + /// + /// The X unit (1, 0, 0). + /// + public static readonly Half3 UnitX = new Half3(1.0f, 0.0f, 0.0f); + + /// + /// The Y unit (0, 1, 0). + /// + public static readonly Half3 UnitY = new Half3(0.0f, 1.0f, 0.0f); + + /// + /// The Z unit (0, 0, 1). + /// + public static readonly Half3 UnitZ = new Half3(0.0f, 0.0f, 1.0f); + + /// + /// A with all of its components set to one. + /// + public static readonly Half3 One = new Half3(1.0f, 1.0f, 1.0f); + /// /// Gets or sets the X component of the vector. /// @@ -77,6 +107,24 @@ public Half3(Half value) this.Z = value; } + /// + /// Initializes a new instance of the struct. + /// + /// The values to assign to the X, Y, and Z components of the vector. This must be an array with three elements. + /// Thrown when is null. + /// Thrown when contains more or less than three elements. + public Half3(Half[] values) + { + if (values == null) + throw new ArgumentNullException("values"); + if (values.Length != 3) + throw new ArgumentOutOfRangeException("values", "There must be three and only three input values for Half3."); + + X = values[0]; + Y = values[1]; + Z = values[2]; + } + /// /// Initializes a new instance of the structure. /// diff --git a/sources/core/Xenko.Core.Mathematics/Half4.cs b/sources/core/Xenko.Core.Mathematics/Half4.cs index ab8bca96ba..0fbf03c38e 100644 --- a/sources/core/Xenko.Core.Mathematics/Half4.cs +++ b/sources/core/Xenko.Core.Mathematics/Half4.cs @@ -35,6 +35,41 @@ namespace Xenko.Core.Mathematics [StructLayout(LayoutKind.Sequential, Pack = 2)] public struct Half4 : IEquatable { + /// + /// The size of the type, in bytes. + /// + public static readonly int SizeInBytes = Utilities.SizeOf(); + + /// + /// A with all of its components set to zero. + /// + public static readonly Half4 Zero = new Half4(); + + /// + /// The X unit (1, 0, 0, 0). + /// + public static readonly Half4 UnitX = new Half4(1.0f, 0.0f, 0.0f, 0.0f); + + /// + /// The Y unit (0, 1, 0, 0). + /// + public static readonly Half4 UnitY = new Half4(0.0f, 1.0f, 0.0f, 0.0f); + + /// + /// The Z unit (0, 0, 1, 0). + /// + public static readonly Half4 UnitZ = new Half4(0.0f, 0.0f, 1.0f, 0.0f); + + /// + /// The W unit (0, 0, 0, 1). + /// + public static readonly Half4 UnitW = new Half4(0.0f, 0.0f, 0.0f, 1.0f); + + /// + /// A with all of its components set to one. + /// + public static readonly Half4 One = new Half4(1.0f, 1.0f, 1.0f, 1.0f); + /// /// Gets or sets the X component of the vector. /// @@ -86,6 +121,52 @@ public Half4(Half value) this.W = value; } + /// + /// Initializes a new instance of the struct. + /// + /// The values to assign to the X, Y, Z, and W components of the vector. This must be an array with four elements. + /// Thrown when is null. + /// Thrown when contains more or less than four elements. + public Half4(Half[] values) + { + if (values == null) + throw new ArgumentNullException("values"); + if (values.Length != 4) + throw new ArgumentOutOfRangeException("values", "There must be four and only four input values for Half4."); + + X = values[0]; + Y = values[1]; + Z = values[2]; + W = values[3]; + } + + /// + /// Initializes a new instance of the structure. + /// + /// The X component. + /// The Y component. + /// The Z component. + /// The W component. + public Half4(float x, float y, float z, float w) + { + this.X = (Half)x; + this.Y = (Half)y; + this.Z = (Half)z; + this.W = (Half)w; + } + + /// + /// Initializes a new instance of the structure. + /// + /// The value to set for the X, Y, Z, and W components. + public Half4(float value) + { + this.X = (Half)value; + this.Y = (Half)value; + this.Z = (Half)value; + this.W = (Half)value; + } + /// /// Tests for equality between two objects. /// diff --git a/sources/core/Xenko.Core.Mathematics/MathUtil.cs b/sources/core/Xenko.Core.Mathematics/MathUtil.cs index cd0e7ebfce..868000fafa 100644 --- a/sources/core/Xenko.Core.Mathematics/MathUtil.cs +++ b/sources/core/Xenko.Core.Mathematics/MathUtil.cs @@ -107,6 +107,7 @@ public static unsafe bool NearEqual(float a, float b) /// /// The floating value. /// true if the specified value is close to zero (0.0f); otherwise, false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsZero(float a) { return Math.Abs(a) < ZeroTolerance; @@ -117,6 +118,7 @@ public static bool IsZero(float a) /// /// The floating value. /// true if the specified value is close to zero (0.0f); otherwise, false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsZero(double a) { return Math.Abs(a) < ZeroToleranceDouble; @@ -127,6 +129,7 @@ public static bool IsZero(double a) /// /// The floating value. /// true if the specified value is close to one (1.0f); otherwise, false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsOne(float a) { return IsZero(a - 1.0f); @@ -166,6 +169,7 @@ public static T[] Array(T value, int length) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RevolutionsToDegrees(float revolution) { return revolution * 360.0f; @@ -176,6 +180,7 @@ public static float RevolutionsToDegrees(float revolution) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RevolutionsToRadians(float revolution) { return revolution * TwoPi; @@ -186,6 +191,7 @@ public static float RevolutionsToRadians(float revolution) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RevolutionsToGradians(float revolution) { return revolution * 400.0f; @@ -196,6 +202,7 @@ public static float RevolutionsToGradians(float revolution) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float DegreesToRevolutions(float degree) { return degree / 360.0f; @@ -206,6 +213,7 @@ public static float DegreesToRevolutions(float degree) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float DegreesToRadians(float degree) { return degree * (Pi / 180.0f); @@ -216,6 +224,7 @@ public static float DegreesToRadians(float degree) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RadiansToRevolutions(float radian) { return radian / TwoPi; @@ -226,6 +235,7 @@ public static float RadiansToRevolutions(float radian) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RadiansToGradians(float radian) { return radian * (200.0f / Pi); @@ -236,6 +246,7 @@ public static float RadiansToGradians(float radian) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float GradiansToRevolutions(float gradian) { return gradian / 400.0f; @@ -246,6 +257,7 @@ public static float GradiansToRevolutions(float gradian) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float GradiansToDegrees(float gradian) { return gradian * (9.0f / 10.0f); @@ -256,6 +268,7 @@ public static float GradiansToDegrees(float gradian) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float GradiansToRadians(float gradian) { return gradian * (Pi / 200.0f); @@ -266,6 +279,7 @@ public static float GradiansToRadians(float gradian) /// /// The value to convert. /// The converted value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RadiansToDegrees(float radian) { return radian * (180.0f / Pi); @@ -278,6 +292,7 @@ public static float RadiansToDegrees(float radian) /// The min. /// The max. /// The result of clamping a value between min and max + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float Clamp(float value, float min, float max) { return value < min ? min : value > max ? max : value; @@ -290,6 +305,7 @@ public static float Clamp(float value, float min, float max) /// The min. /// The max. /// The result of clamping a value between min and max + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double Clamp(double value, double min, double max) { return value < min ? min : value > max ? max : value; @@ -302,6 +318,7 @@ public static double Clamp(double value, double min, double max) /// The min. /// The max. /// The result of clamping a value between min and max + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int Clamp(int value, int min, int max) { return value < min ? min : value > max ? max : value; @@ -314,6 +331,7 @@ public static int Clamp(int value, int min, int max) /// Maximum value that takes place in inverse-interpolation. /// Value to get inverse interpolation. /// Returns an inverse-linearly interpolated coeficient. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float InverseLerp(float min, float max, float value) { if (IsZero(Math.Abs(max - min))) @@ -328,6 +346,7 @@ public static float InverseLerp(float min, float max, float value) /// Maximum value that takes place in inverse-interpolation. /// Value to get inverse interpolation. /// Returns an inverse-linearly interpolated coeficient. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double InverseLerp(double min, double max, double value) { if (IsZero(Math.Abs(max - min))) @@ -346,6 +365,7 @@ public static double InverseLerp(double min, double max, double value) /// Value to interpolate to. /// Interpolation amount. /// The result of linear interpolation of values based on the amount. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double Lerp(double from, double to, double amount) { return (1 - amount) * from + amount * to; @@ -362,6 +382,7 @@ public static double Lerp(double from, double to, double amount) /// Value to interpolate to. /// Interpolation amount. /// The result of linear interpolation of values based on the amount. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float Lerp(float from, float to, float amount) { return (1 - amount) * from + amount * to; @@ -378,6 +399,7 @@ public static float Lerp(float from, float to, float amount) /// Value to interpolate to. /// Interpolation amount. /// The result of linear interpolation of values based on the amount. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static byte Lerp(byte from, byte to, float amount) { return (byte)Lerp((float)from, (float)to, amount); @@ -390,6 +412,7 @@ public static byte Lerp(byte from, byte to, float amount) /// See https://en.wikipedia.org/wiki/Smoothstep /// /// Value between 0 and 1 indicating interpolation amount. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float SmoothStep(float amount) { return (amount <= 0) ? 0 @@ -404,6 +427,7 @@ public static float SmoothStep(float amount) /// See https://en.wikipedia.org/wiki/Smoothstep /// /// Value between 0 and 1 indicating interpolation amount. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float SmootherStep(float amount) { return (amount <= 0) ? 0 @@ -418,6 +442,7 @@ public static float SmootherStep(float amount) /// The minimum value of the range. /// The maximum value of the range. /// true if value is inside the specified range; otherwise, false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsInRange(float value, float min, float max) { return min <= value && value <= max; @@ -430,6 +455,7 @@ public static bool IsInRange(float value, float min, float max) /// The minimum value of the range. /// The maximum value of the range. /// true if value is inside the specified range; otherwise, false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsInRange(int value, int min, int max) { return min <= value && value <= max; @@ -440,6 +466,7 @@ public static bool IsInRange(int value, int min, int max) /// /// The x. /// true if the specified x is pow2; otherwise, false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsPow2(int x) { return ((x != 0) && (x & (x - 1)) == 0); @@ -450,6 +477,7 @@ public static bool IsPow2(int x) /// /// The sRGB value. /// A linear value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float SRgbToLinear(float sRgbValue) { if (sRgbValue < 0.04045f) return sRgbValue / 12.92f; @@ -461,6 +489,7 @@ public static float SRgbToLinear(float sRgbValue) /// /// The linear value. /// The encoded sRGB value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float LinearToSRgb(float linearValue) { if (linearValue < 0.0031308f) return linearValue * 12.92f; @@ -472,6 +501,7 @@ public static float LinearToSRgb(float linearValue) /// /// The input float /// Log2(x) + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float Log2(float x) { return (float)Math.Log(x) / 0.6931471805599453f; @@ -651,5 +681,16 @@ public static Vector4 Snap(Vector4 value, float gap) (float)Math.Round((value.Z / gap), MidpointRounding.AwayFromZero) * gap, (float)Math.Round((value.W / gap), MidpointRounding.AwayFromZero) * gap); } + + /// + /// Computes standard mathematical modulo (as opposed to remainder). + /// + /// The value. + /// The divisor. + /// A value between 0 and divisor. The result will have the same sign as divisor. + public static float Mod(float value, float divisor) + { + return ((value % divisor) + divisor) % divisor; + } } } diff --git a/sources/core/Xenko.Core.Mathematics/Matrix.cs b/sources/core/Xenko.Core.Mathematics/Matrix.cs index acf461b9bb..390546d5d4 100644 --- a/sources/core/Xenko.Core.Mathematics/Matrix.cs +++ b/sources/core/Xenko.Core.Mathematics/Matrix.cs @@ -7,17 +7,17 @@ // ----------------------------------------------------------------------------- /* * Copyright (c) 2007-2011 SlimDX Group -* +* * 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 @@ -77,7 +77,7 @@ public struct Matrix : IEquatable, IFormattable /// Value at row 4 column 1 of the matrix. /// public float M41; - + /// /// Value at row 1 column 2 of the matrix. /// @@ -102,7 +102,7 @@ public struct Matrix : IEquatable, IFormattable /// Value at row 1 column 3 of the matrix. /// public float M13; - + /// /// Value at row 2 column 3 of the matrix. /// @@ -117,7 +117,7 @@ public struct Matrix : IEquatable, IFormattable /// Value at row 4 column 3 of the matrix. /// public float M43; - + /// /// Value at row 1 column 4 of the matrix. /// @@ -598,14 +598,14 @@ public void DecomposeLQ(out Matrix L, out Matrix Q) L = new Matrix(); L.M11 = Vector4.Dot(Q.Row1, Row1); - + L.M21 = Vector4.Dot(Q.Row1, Row2); L.M22 = Vector4.Dot(Q.Row2, Row2); - + L.M31 = Vector4.Dot(Q.Row1, Row3); L.M32 = Vector4.Dot(Q.Row2, Row3); L.M33 = Vector4.Dot(Q.Row3, Row3); - + L.M41 = Vector4.Dot(Q.Row1, Row4); L.M42 = Vector4.Dot(Q.Row2, Row4); L.M43 = Vector4.Dot(Q.Row3, Row4); @@ -622,7 +622,7 @@ public void Decompose(out float yaw, out float pitch, out float roll) { pitch = (float)Math.Asin(-M32); // Hardcoded constant - burn him, he's a witch - // double threshold = 0.001; + // double threshold = 0.001; double test = Math.Cos(pitch); if (test > MathUtil.ZeroTolerance) { @@ -694,7 +694,7 @@ public bool Decompose(out Vector3 scale, out Vector3 translation) /// Decomposes a matrix into a scale, rotation, and translation. /// /// When the method completes, contains the scaling component of the decomposed matrix. - /// When the method completes, contains the rtoation component of the decomposed matrix. + /// When the method completes, contains the rotation component of the decomposed matrix. /// When the method completes, contains the translation component of the decomposed matrix. /// /// This method is designed to decompose an SRT transformation matrix only. @@ -707,11 +707,98 @@ public bool Decompose(out Vector3 scale, out Quaternion rotation, out Vector3 tr return true; } + /// + /// Decomposes a matrix into a rotation. + /// + /// When the method completes, contains the rotation component of the decomposed matrix. + /// + /// This method is designed to decompose an SRT transformation matrix only. + /// + public bool GetRotationMatrix(out Matrix matrix) + { + Vector3 scale; + + //Scaling is the length of the rows. + scale.X = (float)Math.Sqrt((M11 * M11) + (M12 * M12) + (M13 * M13)); + scale.Y = (float)Math.Sqrt((M21 * M21) + (M22 * M22) + (M23 * M23)); + scale.Z = (float)Math.Sqrt((M31 * M31) + (M32 * M32) + (M33 * M33)); + + //If any of the scaling factors are zero, than the rotation matrix can not exist. + if (Math.Abs(scale.X) < MathUtil.ZeroTolerance || + Math.Abs(scale.Y) < MathUtil.ZeroTolerance || + Math.Abs(scale.Z) < MathUtil.ZeroTolerance) + { + matrix = Matrix.Identity; + return false; + } + + // Calculate an perfect orthonormal matrix (no reflections) + var at = new Vector3(M31 / scale.Z, M32 / scale.Z, M33 / scale.Z); + var up = Vector3.Cross(at, new Vector3(M11 / scale.X, M12 / scale.X, M13 / scale.X)); + var right = Vector3.Cross(up, at); + + matrix = Identity; + matrix.Right = right; + matrix.Up = up; + matrix.Backward = at; + + return true; + } + + /// + /// Decomposes a matrix into a scale. + /// + /// When the method completes, contains the scale component of the decomposed matrix. + public void GetScale(out Vector3 scale) { + //Scaling is the length of the rows. + scale.X = (float)Math.Sqrt((M11 * M11) + (M12 * M12) + (M13 * M13)); + scale.Y = (float)Math.Sqrt((M21 * M21) + (M22 * M22) + (M23 * M23)); + scale.Z = (float)Math.Sqrt((M31 * M31) + (M32 * M32) + (M33 * M33)); + } + + /// + /// Decomposes a matrix into a rotation. + /// + /// When the method completes, contains the rotation component of the decomposed matrix. + /// + /// This method is designed to decompose an SRT transformation matrix only. + /// + public bool GetRotationQuaternion(out Quaternion q) + { + Vector3 scale; + + //Scaling is the length of the rows. + scale.X = (float)Math.Sqrt((M11 * M11) + (M12 * M12) + (M13 * M13)); + scale.Y = (float)Math.Sqrt((M21 * M21) + (M22 * M22) + (M23 * M23)); + scale.Z = (float)Math.Sqrt((M31 * M31) + (M32 * M32) + (M33 * M33)); + + //If any of the scaling factors are zero, than the rotation matrix can not exist. + if (Math.Abs(scale.X) < MathUtil.ZeroTolerance || + Math.Abs(scale.Y) < MathUtil.ZeroTolerance || + Math.Abs(scale.Z) < MathUtil.ZeroTolerance) { + q = Quaternion.Identity; + return false; + } + + // Calculate an perfect orthonormal matrix (no reflections) + var at = new Vector3(M31 / scale.Z, M32 / scale.Z, M33 / scale.Z); + var up = Vector3.Cross(at, new Vector3(M11 / scale.X, M12 / scale.X, M13 / scale.X)); + var right = Vector3.Cross(up, at); + + Matrix matrix = Identity; + matrix.Right = right; + matrix.Up = up; + matrix.Backward = at; + Quaternion.RotationMatrix(ref matrix, out q); + + return true; + } + /// /// Decomposes a matrix into a scale, rotation, and translation. /// /// When the method completes, contains the scaling component of the decomposed matrix. - /// When the method completes, contains the rtoation component of the decomposed matrix. + /// When the method completes, contains the rotation component of the decomposed matrix. /// When the method completes, contains the translation component of the decomposed matrix. /// /// This method is designed to decompose an SRT transformation matrix only. @@ -956,6 +1043,8 @@ public static Matrix Multiply(Matrix left, float right) /// /// Determines the product of two matrices. + /// Variables passed as or must not be used as the out parameter + /// , because is calculated in-place. /// /// The first matrix to multiply. /// The second matrix to multiply. @@ -982,6 +1071,8 @@ public static void MultiplyTo(ref Matrix left, ref Matrix right, out Matrix resu /// /// Determines the product of two matrices. + /// Variables passed as or must not be used as the out parameter + /// , because is calculated in-place. /// /// The first matrix to multiply. /// The second matrix to multiply. @@ -1008,6 +1099,8 @@ public static void Multiply(ref Matrix left, ref Matrix right, out Matrix result /// /// Determines the product of two matrices. + /// Variables passed as or must not be used as the out parameter + /// , because is calculated in-place. /// /// The first matrix to multiply. /// The second matrix to multiply. @@ -1223,16 +1316,16 @@ public static Matrix Negate(Matrix value) } /// - /// Performs a linear interpolation between two matricies. + /// Performs a linear interpolation between two matrices. /// /// Start matrix. /// End matrix. /// Value between 0 and 1 indicating the weight of . - /// When the method completes, contains the linear interpolation of the two matricies. + /// When the method completes, contains the linear interpolation of the two matrices. /// /// This method performs the linear interpolation based on the following formula. /// start + (end - start) * amount - /// Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + /// Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. /// public static void Lerp(ref Matrix start, ref Matrix end, float amount, out Matrix result) { @@ -1255,7 +1348,7 @@ public static void Lerp(ref Matrix start, ref Matrix end, float amount, out Matr } /// - /// Performs a linear interpolation between two matricies. + /// Performs a linear interpolation between two matrices. /// /// Start matrix. /// End matrix. @@ -1264,7 +1357,7 @@ public static void Lerp(ref Matrix start, ref Matrix end, float amount, out Matr /// /// This method performs the linear interpolation based on the following formula. /// start + (end - start) * amount - /// Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + /// Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. /// public static Matrix Lerp(Matrix start, Matrix end, float amount) { @@ -1274,7 +1367,7 @@ public static Matrix Lerp(Matrix start, Matrix end, float amount) } /// - /// Performs a cubic interpolation between two matricies. + /// Performs a cubic interpolation between two matrices. /// /// Start matrix. /// End matrix. @@ -1448,14 +1541,23 @@ public static void Orthogonalize(ref Matrix value, out Matrix result) //By separating the above algorithm into multiple lines, we actually increase accuracy. result = value; - result.Row2 = result.Row2 - (Vector4.Dot(result.Row1, result.Row2) / Vector4.Dot(result.Row1, result.Row1)) * result.Row1; + var row1 = result.Row1; + var row2 = result.Row2; + var row3 = result.Row3; + var row4 = result.Row4; - result.Row3 = result.Row3 - (Vector4.Dot(result.Row1, result.Row3) / Vector4.Dot(result.Row1, result.Row1)) * result.Row1; - result.Row3 = result.Row3 - (Vector4.Dot(result.Row2, result.Row3) / Vector4.Dot(result.Row2, result.Row2)) * result.Row2; + row2 = row2 - (Vector4.Dot(row1, row2) / Vector4.Dot(row1, row1)) * row1; - result.Row4 = result.Row4 - (Vector4.Dot(result.Row1, result.Row4) / Vector4.Dot(result.Row1, result.Row1)) * result.Row1; - result.Row4 = result.Row4 - (Vector4.Dot(result.Row2, result.Row4) / Vector4.Dot(result.Row2, result.Row2)) * result.Row2; - result.Row4 = result.Row4 - (Vector4.Dot(result.Row3, result.Row4) / Vector4.Dot(result.Row3, result.Row3)) * result.Row3; + row3 = row3 - (Vector4.Dot(row1, row3) / Vector4.Dot(row1, row1)) * row1; + row3 = row3 - (Vector4.Dot(row2, row3) / Vector4.Dot(row2, row2)) * row2; + + row4 = row4 - (Vector4.Dot(row1, row4) / Vector4.Dot(row1, row1)) * row1; + row4 = row4 - (Vector4.Dot(row2, row4) / Vector4.Dot(row2, row2)) * row2; + row4 = row4 - (Vector4.Dot(row3, row4) / Vector4.Dot(row3, row3)) * row3; + + result.Row2 = row2; + result.Row3 = row3; + result.Row4 = row4; } /// @@ -1510,21 +1612,30 @@ public static void Orthonormalize(ref Matrix value, out Matrix result) //q4 = (m4 - (q1 ⋅ m4) * q1 - (q2 ⋅ m4) * q2 - (q3 ⋅ m4) * q3) / |m4 - (q1 ⋅ m4) * q1 - (q2 ⋅ m4) * q2 - (q3 ⋅ m4) * q3| //By separating the above algorithm into multiple lines, we actually increase accuracy. - result = value; + var row1 = value.Row1; + var row2 = value.Row2; + var row3 = value.Row3; + var row4 = value.Row4; + + row1.Normalize(); - result.Row1 = Vector4.Normalize(result.Row1); + row2 = row2 - Vector4.Dot(row1, row2) * row1; + row2.Normalize(); - result.Row2 = result.Row2 - Vector4.Dot(result.Row1, result.Row2) * result.Row1; - result.Row2 = Vector4.Normalize(result.Row2); + row3 = row3 - Vector4.Dot(row1, row3) * row1; + row3 = row3 - Vector4.Dot(row2, row3) * row2; + row3.Normalize(); - result.Row3 = result.Row3 - Vector4.Dot(result.Row1, result.Row3) * result.Row1; - result.Row3 = result.Row3 - Vector4.Dot(result.Row2, result.Row3) * result.Row2; - result.Row3 = Vector4.Normalize(result.Row3); + row4 = row4 - Vector4.Dot(row1, row4) * row1; + row4 = row4 - Vector4.Dot(row2, row4) * row2; + row4 = row4 - Vector4.Dot(row3, row4) * row3; + row4.Normalize(); - result.Row4 = result.Row4 - Vector4.Dot(result.Row1, result.Row4) * result.Row1; - result.Row4 = result.Row4 - Vector4.Dot(result.Row2, result.Row4) * result.Row2; - result.Row4 = result.Row4 - Vector4.Dot(result.Row3, result.Row4) * result.Row3; - result.Row4 = Vector4.Normalize(result.Row4); + result = default; + result.Row1 = row1; + result.Row2 = row2; + result.Row3 = row3; + result.Row4 = row4; } /// @@ -2450,13 +2561,13 @@ public static Matrix Reflection(Plane plane) /// The plane onto which to project the geometry as a shadow. This parameter is assumed to be normalized. /// When the method completes, contains the shadow matrix. public static void Shadow(ref Vector4 light, ref Plane plane, out Matrix result) - { + { float dot = (plane.Normal.X * light.X) + (plane.Normal.Y * light.Y) + (plane.Normal.Z * light.Z) + (plane.D * light.W); float x = -plane.Normal.X; float y = -plane.Normal.Y; float z = -plane.Normal.Z; float d = -plane.D; - + result.M11 = (x * light.X) + dot; result.M21 = y * light.X; result.M31 = z * light.X; @@ -2474,7 +2585,7 @@ public static void Shadow(ref Vector4 light, ref Plane plane, out Matrix result) result.M34 = z * light.W; result.M44 = (d * light.W) + dot; } - + /// /// Creates a matrix that flattens geometry into a shadow. /// @@ -2724,6 +2835,78 @@ public static void RotationQuaternion(ref Quaternion rotation, out Matrix result result.M33 = 1.0f - (2.0f * (yy + xx)); } + /// + /// Creates a matrix that contains both the X, Y and Z rotation, as well as scaling and translation. Note: This function is NOT thead safe. + /// + /// The scaling. + /// Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + /// The translation. + /// Computed transformation matrix + public static Matrix Transformation(Vector3 scaling, Quaternion rotation, Vector3 translation) + { + // Equivalent to: + //result = + // Matrix.Scaling(scaling) + // *Matrix.RotationX(rotation.X) + // *Matrix.RotationY(rotation.Y) + // *Matrix.RotationZ(rotation.Z) + // *Matrix.Position(translation); + + // Rotation + float xx = rotation.X * rotation.X; + float yy = rotation.Y * rotation.Y; + float zz = rotation.Z * rotation.Z; + float xy = rotation.X * rotation.Y; + float zw = rotation.Z * rotation.W; + float zx = rotation.Z * rotation.X; + float yw = rotation.Y * rotation.W; + float yz = rotation.Y * rotation.Z; + float xw = rotation.X * rotation.W; + + Matrix result; + result.M11 = 1.0f - (2.0f * (yy + zz)); + result.M12 = 2.0f * (xy + zw); + result.M13 = 2.0f * (zx - yw); + result.M21 = 2.0f * (xy - zw); + result.M22 = 1.0f - (2.0f * (zz + xx)); + result.M23 = 2.0f * (yz + xw); + result.M31 = 2.0f * (zx + yw); + result.M32 = 2.0f * (yz - xw); + result.M33 = 1.0f - (2.0f * (yy + xx)); + + // Position + result.M41 = translation.X; + result.M42 = translation.Y; + result.M43 = translation.Z; + + // Scale + if (scaling.X != 1.0f) + { + result.M11 *= scaling.X; + result.M12 *= scaling.X; + result.M13 *= scaling.X; + } + if (scaling.Y != 1.0f) + { + result.M21 *= scaling.Y; + result.M22 *= scaling.Y; + result.M23 *= scaling.Y; + } + if (scaling.Z != 1.0f) + { + result.M31 *= scaling.Z; + result.M32 *= scaling.Z; + result.M33 *= scaling.Z; + } + + result.M14 = 0.0f; + result.M24 = 0.0f; + result.M34 = 0.0f; + result.M44 = 1.0f; + + return result; + } + /// /// Creates a matrix that contains both the X, Y and Z rotation, as well as scaling and translation. Note: This function is NOT thead safe. /// @@ -2814,7 +2997,7 @@ public static Matrix RotationQuaternion(Quaternion rotation) /// When the method completes, contains the created rotation matrix. public static void RotationYawPitchRoll(float yaw, float pitch, float roll, out Matrix result) { - Quaternion quaternion = new Quaternion(); + Quaternion quaternion; Quaternion.RotationYawPitchRoll(yaw, pitch, roll, out quaternion); RotationQuaternion(ref quaternion, out result); } @@ -3009,7 +3192,7 @@ public static void Transformation(ref Vector3 scalingCenter, ref Quaternion scal Matrix sr = RotationQuaternion(scalingRotation); result = Translation(-scalingCenter) * Transpose(sr) * Scaling(scaling) * sr * Translation(scalingCenter) * Translation(-rotationCenter) * - RotationQuaternion(rotation) * Translation(rotationCenter) * Translation(translation); + RotationQuaternion(rotation) * Translation(rotationCenter) * Translation(translation); } /// @@ -3041,7 +3224,7 @@ public static Matrix Transformation(Vector3 scalingCenter, Quaternion scalingRot /// When the method completes, contains the created transformation matrix. public static void Transformation2D(ref Vector2 scalingCenter, float scalingRotation, ref Vector2 scaling, ref Vector2 rotationCenter, float rotation, ref Vector2 translation, out Matrix result) { - result = Translation((Vector3)(-scalingCenter)) * RotationZ(-scalingRotation) * Scaling((Vector3)scaling) * RotationZ(scalingRotation) * Translation((Vector3)scalingCenter) * + result = Translation((Vector3)(-scalingCenter)) * RotationZ(-scalingRotation) * Scaling((Vector3)scaling) * RotationZ(scalingRotation) * Translation((Vector3)scalingCenter) * Translation((Vector3)(-rotationCenter)) * RotationZ(rotation) * Translation((Vector3)rotationCenter) * Translation((Vector3)translation); result.M33 = 1f; @@ -3113,11 +3296,11 @@ public unsafe void TransposeMatrixFrom(float* src, int columns, int rows) } /// - /// Adds two matricies. + /// Adds two matrices. /// /// The first matrix to add. /// The second matrix to add. - /// The sum of the two matricies. + /// The sum of the two matrices. public static Matrix operator +(Matrix left, Matrix right) { Matrix result; @@ -3136,11 +3319,11 @@ public unsafe void TransposeMatrixFrom(float* src, int columns, int rows) } /// - /// Subtracts two matricies. + /// Subtracts two matrices. /// /// The first matrix to subtract. /// The second matrix to subtract. - /// The difference between the two matricies. + /// The difference between the two matrices. public static Matrix operator -(Matrix left, Matrix right) { Matrix result; @@ -3191,7 +3374,7 @@ public unsafe void TransposeMatrixFrom(float* src, int columns, int rows) /// /// The first matrix to multiply. /// The second matrix to multiply. - /// The product of the two matricies. + /// The product of the two matrices. public static Matrix operator *(Matrix left, Matrix right) { Matrix result; @@ -3213,11 +3396,11 @@ public unsafe void TransposeMatrixFrom(float* src, int columns, int rows) } /// - /// Divides two matricies. + /// Divides two matrices. /// /// The first matrix to divide. /// The second matrix to divide. - /// The quotient of the two matricies. + /// The quotient of the two matrices. public static Matrix operator /(Matrix left, Matrix right) { Matrix result; @@ -3318,7 +3501,7 @@ public string ToString(string format, IFormatProvider formatProvider) /// Returns a hash code for this instance. /// /// - /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. /// public override int GetHashCode() { diff --git a/sources/core/Xenko.Core.Mathematics/OrientedBoundingBox.cs b/sources/core/Xenko.Core.Mathematics/OrientedBoundingBox.cs new file mode 100644 index 0000000000..57d53004c8 --- /dev/null +++ b/sources/core/Xenko.Core.Mathematics/OrientedBoundingBox.cs @@ -0,0 +1,904 @@ +// Copyright (c) 2010-2014 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. + +using System; +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace Xenko.Core.Mathematics +{ + /// + /// OrientedBoundingBox (OBB) is a rectangular block, much like an AABB (BoundingBox) but with an arbitrary orientation. + /// + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct OrientedBoundingBox : IEquatable, IFormattable + { + /// + /// Half lengths of the box along each axis. + /// + public Vector3 Extents; + + /// + /// The matrix which aligns and scales the box, and its translation vector represents the center of the box. + /// + public Matrix Transformation; + + /// + /// Creates an from a BoundingBox. + /// + /// The BoundingBox to create from. + /// + /// Initially, the OBB is axis-aligned box, but it can be rotated and transformed later. + /// + public OrientedBoundingBox(BoundingBox bb) + { + var Center = bb.Minimum + (bb.Maximum - bb.Minimum) / 2f; + Extents = bb.Maximum - Center; + Transformation = Matrix.Translation(Center); + } + + /// + /// Creates an which contained between two minimum and maximum points. + /// + /// The minimum vertex of the bounding box. + /// The maximum vertex of the bounding box. + /// + /// Initially, the OrientedBoundingBox is axis-aligned box, but it can be rotated and transformed later. + /// + public OrientedBoundingBox(Vector3 minimum, Vector3 maximum) + { + var Center = minimum + (maximum - minimum) / 2f; + Extents = maximum - Center; + Transformation = Matrix.Translation(Center); + } + + /// + /// Creates an that fully contains the given points. + /// + /// The points that will be contained by the box. + /// + /// This method is not for computing the best tight-fitting OrientedBoundingBox. + /// And initially, the OrientedBoundingBox is axis-aligned box, but it can be rotated and transformed later. + /// + public OrientedBoundingBox(Vector3[] points) + { + if (points == null || points.Length == 0) + throw new ArgumentNullException("points"); + + Vector3 minimum = new Vector3(float.MaxValue); + Vector3 maximum = new Vector3(float.MinValue); + + for (int i = 0; i < points.Length; ++i) + { + Vector3.Min(ref minimum, ref points[i], out minimum); + Vector3.Max(ref maximum, ref points[i], out maximum); + } + + var Center = minimum + (maximum - minimum) / 2f; + Extents = maximum - Center; + Transformation = Matrix.Translation(Center); + } + + /// + /// Retrieves the eight corners of the bounding box. + /// + /// An array of points representing the eight corners of the bounding box. + public Vector3[] GetCorners() + { + var xv = new Vector3(Extents.X, 0, 0); + var yv = new Vector3(0, Extents.Y, 0); + var zv = new Vector3(0, 0, Extents.Z); + Vector3.TransformNormal(ref xv, ref Transformation, out xv); + Vector3.TransformNormal(ref yv, ref Transformation, out yv); + Vector3.TransformNormal(ref zv, ref Transformation, out zv); + + var center = Transformation.TranslationVector; + + var corners = new Vector3[8]; + corners[0] = center + xv + yv + zv; + corners[1] = center + xv + yv - zv; + corners[2] = center - xv + yv - zv; + corners[3] = center - xv + yv + zv; + corners[4] = center + xv - yv + zv; + corners[5] = center + xv - yv - zv; + corners[6] = center - xv - yv - zv; + corners[7] = center - xv - yv + zv; + + return corners; + } + + /// + /// Transforms this box using a transformation matrix. + /// + /// The transformation matrix. + /// + /// While any kind of transformation can be applied, it is recommended to apply scaling using scale method instead, which + /// scales the Extents and keeps the Transformation matrix for rotation only, and that preserves collision detection accuracy. + /// + public void Transform(ref Matrix mat) + { + Transformation *= mat; + } + + /// + /// Transforms this box using a transformation matrix. + /// + /// The transformation matrix. + /// + /// While any kind of transformation can be applied, it is recommended to apply scaling using scale method instead, which + /// scales the Extents and keeps the Transformation matrix for rotation only, and that preserves collision detection accuracy. + /// + public void Transform(Matrix mat) + { + Transformation *= mat; + } + + /// + /// Scales the by scaling its Extents without affecting the Transformation matrix, + /// By keeping Transformation matrix scaling-free, the collision detection methods will be more accurate. + /// + /// + public void Scale(ref Vector3 scaling) + { + Extents *= scaling; + } + + /// + /// Scales the by scaling its Extents without affecting the Transformation matrix, + /// By keeping Transformation matrix scaling-free, the collision detection methods will be more accurate. + /// + /// + public void Scale(Vector3 scaling) + { + Extents *= scaling; + } + + /// + /// Scales the by scaling its Extents without affecting the Transformation matrix, + /// By keeping Transformation matrix scaling-free, the collision detection methods will be more accurate. + /// + /// + public void Scale(float scaling) + { + Extents *= scaling; + } + + /// + /// Translates the to a new position using a translation vector; + /// + /// the translation vector. + public void Translate(ref Vector3 translation) + { + Transformation.TranslationVector += translation; + } + + /// + /// Translates the to a new position using a translation vector; + /// + /// the translation vector. + public void Translate(Vector3 translation) + { + Transformation.TranslationVector += translation; + } + + /// + /// The size of the if no scaling is applied to the transformation matrix. + /// + /// + /// The property will return the actual size even if the scaling is applied using Scale method, + /// but if the scaling is applied to transformation matrix, use GetSize Function instead. + /// + public Vector3 Size + { + get + { + return Extents * 2; + } + } + + /// + /// Returns the size of the taking into consideration the scaling applied to the transformation matrix. + /// + /// The size of the consideration + /// + /// This method is computationally expensive, so if no scale is applied to the transformation matrix + /// use property instead. + /// + public Vector3 GetSize() + { + var xv = new Vector3(Extents.X * 2, 0, 0); + var yv = new Vector3(0, Extents.Y * 2, 0); + var zv = new Vector3(0, 0, Extents.Z * 2); + Vector3.TransformNormal(ref xv, ref Transformation, out xv); + Vector3.TransformNormal(ref yv, ref Transformation, out yv); + Vector3.TransformNormal(ref zv, ref Transformation, out zv); + + return new Vector3(xv.Length(), yv.Length(), zv.Length()); + } + + /// + /// Returns the square size of the taking into consideration the scaling applied to the transformation matrix. + /// + /// The size of the consideration + public Vector3 GetSizeSquared() + { + var xv = new Vector3(Extents.X * 2, 0, 0); + var yv = new Vector3(0, Extents.Y * 2, 0); + var zv = new Vector3(0, 0, Extents.Z * 2); + Vector3.TransformNormal(ref xv, ref Transformation, out xv); + Vector3.TransformNormal(ref yv, ref Transformation, out yv); + Vector3.TransformNormal(ref zv, ref Transformation, out zv); + + return new Vector3(xv.LengthSquared(), yv.LengthSquared(), zv.LengthSquared()); + } + + /// + /// Returns the center of the . + /// + public Vector3 Center + { + get + { + return Transformation.TranslationVector; + } + } + + /// + /// Determines whether a contains a point. + /// + /// The point to test. + /// The type of containment the two objects have. + public ContainmentType Contains(ref Vector3 point) + { + // Transform the point into the obb coordinates + Matrix invTrans; + Matrix.Invert(ref Transformation, out invTrans); + + Vector3 locPoint; + Vector3.TransformCoordinate(ref point, ref invTrans, out locPoint); + + locPoint.X = Math.Abs(locPoint.X); + locPoint.Y = Math.Abs(locPoint.Y); + locPoint.Z = Math.Abs(locPoint.Z); + + //Simple axes-aligned BB check + if (MathUtil.NearEqual(locPoint.X, Extents.X) && MathUtil.NearEqual(locPoint.Y, Extents.Y) && MathUtil.NearEqual(locPoint.Z, Extents.Z)) + return ContainmentType.Intersects; + if (locPoint.X < Extents.X && locPoint.Y < Extents.Y && locPoint.Z < Extents.Z) + return ContainmentType.Contains; + else + return ContainmentType.Disjoint; + } + + /// + /// Determines whether a contains a point. + /// + /// The point to test. + /// The type of containment the two objects have. + public ContainmentType Contains(Vector3 point) + { + return Contains(ref point); + } + + /// + /// Determines whether a contains an array of points>. + /// + /// The points array to test. + /// The type of containment. + public ContainmentType Contains(Vector3[] points) + { + Matrix invTrans; + Matrix.Invert(ref Transformation, out invTrans); + + var containsAll = true; + var containsAny = false; + + for (int i = 0; i < points.Length; i++) + { + Vector3 locPoint; + Vector3.TransformCoordinate(ref points[i], ref invTrans, out locPoint); + + locPoint.X = Math.Abs(locPoint.X); + locPoint.Y = Math.Abs(locPoint.Y); + locPoint.Z = Math.Abs(locPoint.Z); + + //Simple axes-aligned BB check + if (MathUtil.NearEqual(locPoint.X, Extents.X) && + MathUtil.NearEqual(locPoint.Y, Extents.Y) && + MathUtil.NearEqual(locPoint.Z, Extents.Z)) + containsAny = true; + if (locPoint.X < Extents.X && locPoint.Y < Extents.Y && locPoint.Z < Extents.Z) + containsAny = true; + else + containsAll = false; + } + + if (containsAll) + return ContainmentType.Contains; + else if (containsAny) + return ContainmentType.Intersects; + else + return ContainmentType.Disjoint; + } + + /// + /// Determines whether a contains a . + /// + /// The sphere to test. + /// Optimize the check operation by assuming that has no scaling applied + /// The type of containment the two objects have. + /// + /// This method is not designed for which has a non-uniform scaling applied to its transformation matrix. + /// But any type of scaling applied using Scale method will keep this method accurate. + /// + public ContainmentType Contains(BoundingSphere sphere, bool IgnoreScale = false) + { + Matrix invTrans; + Matrix.Invert(ref Transformation, out invTrans); + + // Transform sphere center into the obb coordinates + Vector3 locCenter; + Vector3.TransformCoordinate(ref sphere.Center, ref invTrans, out locCenter); + + float locRadius; + if (IgnoreScale) + locRadius = sphere.Radius; + else + { + // Transform sphere radius into the obb coordinates + Vector3 vRadius = Vector3.UnitX * sphere.Radius; + Vector3.TransformNormal(ref vRadius, ref invTrans, out vRadius); + locRadius = vRadius.Length(); + } + + //Perform regular BoundingBox to BoundingSphere containment check + Vector3 minusExtens = -Extents; + Vector3 vector; + Vector3.Clamp(ref locCenter, ref minusExtens, ref Extents, out vector); + float distance = Vector3.DistanceSquared(locCenter, vector); + + if (distance > locRadius * locRadius) + return ContainmentType.Disjoint; + + if ((((minusExtens.X + locRadius <= locCenter.X) && (locCenter.X <= Extents.X - locRadius)) && ((Extents.X - minusExtens.X > locRadius) && + (minusExtens.Y + locRadius <= locCenter.Y))) && (((locCenter.Y <= Extents.Y - locRadius) && (Extents.Y - minusExtens.Y > locRadius)) && + (((minusExtens.Z + locRadius <= locCenter.Z) && (locCenter.Z <= Extents.Z - locRadius)) && (Extents.Z - minusExtens.Z > locRadius)))) + { + return ContainmentType.Contains; + } + + return ContainmentType.Intersects; + } + + private static Vector3[] GetRows(ref Matrix mat) + { + return new Vector3[] { + new Vector3(mat.M11,mat.M12,mat.M13), + new Vector3(mat.M21,mat.M22,mat.M23), + new Vector3(mat.M31,mat.M32,mat.M33) + }; + } + + /// + /// Check the intersection between two + /// + /// The OrientedBoundingBoxs to test. + /// The type of containment the two objects have. + /// + /// For accuracy, The transformation matrix for both must not have any scaling applied to it. + /// Anyway, scaling using Scale method will keep this method accurate. + /// + public ContainmentType Contains(ref OrientedBoundingBox obb) + { + var cornersCheck = Contains(obb.GetCorners()); + if (cornersCheck != ContainmentType.Disjoint) + return cornersCheck; + + //http://www.3dkingdoms.com/weekly/bbox.cpp + var SizeA = Extents; + var SizeB = obb.Extents; + var RotA = GetRows(ref Transformation); + var RotB = GetRows(ref obb.Transformation); + + var R = new Matrix(); // Rotation from B to A + var AR = new Matrix(); // absolute values of R matrix, to use with box extents + + float ExtentA, ExtentB, Separation; + int i, k; + + // Calculate B to A rotation matrix + for (i = 0; i < 3; i++) + for (k = 0; k < 3; k++) + { + R[i, k] = Vector3.Dot(RotA[i], RotB[k]); + AR[i, k] = Math.Abs(R[i, k]); + } + + + // Vector separating the centers of Box B and of Box A + var vSepWS = obb.Center - Center; + // Rotated into Box A's coordinates + var vSepA = new Vector3(Vector3.Dot(vSepWS, RotA[0]), Vector3.Dot(vSepWS, RotA[1]), Vector3.Dot(vSepWS, RotA[2])); + + // Test if any of A's basis vectors separate the box + for (i = 0; i < 3; i++) + { + ExtentA = SizeA[i]; + ExtentB = Vector3.Dot(SizeB, new Vector3(AR[i, 0], AR[i, 1], AR[i, 2])); + Separation = Math.Abs(vSepA[i]); + + if (Separation > ExtentA + ExtentB) + return ContainmentType.Disjoint; + } + + // Test if any of B's basis vectors separate the box + for (k = 0; k < 3; k++) + { + ExtentA = Vector3.Dot(SizeA, new Vector3(AR[0, k], AR[1, k], AR[2, k])); + ExtentB = SizeB[k]; + Separation = Math.Abs(Vector3.Dot(vSepA, new Vector3(R[0, k], R[1, k], R[2, k]))); + + if (Separation > ExtentA + ExtentB) + return ContainmentType.Disjoint; + } + + // Now test Cross Products of each basis vector combination ( A[i], B[k] ) + for (i = 0; i < 3; i++) + for (k = 0; k < 3; k++) + { + int i1 = (i + 1) % 3, i2 = (i + 2) % 3; + int k1 = (k + 1) % 3, k2 = (k + 2) % 3; + ExtentA = SizeA[i1] * AR[i2, k] + SizeA[i2] * AR[i1, k]; + ExtentB = SizeB[k1] * AR[i, k2] + SizeB[k2] * AR[i, k1]; + Separation = Math.Abs(vSepA[i2] * R[i1, k] - vSepA[i1] * R[i2, k]); + if (Separation > ExtentA + ExtentB) + return ContainmentType.Disjoint; + } + + // No separating axis found, the boxes overlap + return ContainmentType.Intersects; + } + + /// + /// Check the intersection between an and a line defined by two points + /// + /// The first point in the line. + /// The second point in the line. + /// The type of containment the two objects have. + /// + /// For accuracy, The transformation matrix for the must not have any scaling applied to it. + /// Anyway, scaling using Scale method will keep this method accurate. + /// + public ContainmentType ContainsLine(ref Vector3 L1, ref Vector3 L2) + { + var cornersCheck = Contains(new Vector3[] { L1, L2 }); + if (cornersCheck != ContainmentType.Disjoint) + return cornersCheck; + + //http://www.3dkingdoms.com/weekly/bbox.cpp + // Put line in box space + Matrix invTrans; + Matrix.Invert(ref Transformation, out invTrans); + + Vector3 LB1; + Vector3.TransformCoordinate(ref L1, ref invTrans, out LB1); + Vector3 LB2; + Vector3.TransformCoordinate(ref L1, ref invTrans, out LB2); + + // Get line midpoint and extent + var LMid = (LB1 + LB2) * 0.5f; + var L = (LB1 - LMid); + var LExt = new Vector3(Math.Abs(L.X), Math.Abs(L.Y), Math.Abs(L.Z)); + + // Use Separating Axis Test + // Separation vector from box center to line center is LMid, since the line is in box space + if (Math.Abs(LMid.X) > Extents.X + LExt.X) return ContainmentType.Disjoint; + if (Math.Abs(LMid.Y) > Extents.Y + LExt.Y) return ContainmentType.Disjoint; + if (Math.Abs(LMid.Z) > Extents.Z + LExt.Z) return ContainmentType.Disjoint; + // Cross products of line and each axis + if (Math.Abs(LMid.Y * L.Z - LMid.Z * L.Y) > (Extents.Y * LExt.Z + Extents.Z * LExt.Y)) return ContainmentType.Disjoint; + if (Math.Abs(LMid.X * L.Z - LMid.Z * L.X) > (Extents.X * LExt.Z + Extents.Z * LExt.X)) return ContainmentType.Disjoint; + if (Math.Abs(LMid.X * L.Y - LMid.Y * L.X) > (Extents.X * LExt.Y + Extents.Y * LExt.X)) return ContainmentType.Disjoint; + // No separating axis, the line intersects + return ContainmentType.Intersects; + } + + /// + /// Check the intersection between an and + /// + /// The BoundingBox to test. + /// The type of containment the two objects have. + /// + /// For accuracy, The transformation matrix for the must not have any scaling applied to it. + /// Anyway, scaling using Scale method will keep this method accurate. + /// + public ContainmentType Contains(ref BoundingBox box) + { + var cornersCheck = Contains(box.GetCorners()); + if (cornersCheck != ContainmentType.Disjoint) + return cornersCheck; + + var boxCenter = box.Minimum + (box.Maximum - box.Minimum) / 2f; + var boxExtents = box.Maximum - boxCenter; + + var SizeA = Extents; + var SizeB = boxExtents; + var RotA = GetRows(ref Transformation); + + float ExtentA, ExtentB, Separation; + int i, k; + + Matrix R; // Rotation from B to A + Matrix.Invert(ref Transformation, out R); + var AR = new Matrix(); // absolute values of R matrix, to use with box extents + + for (i = 0; i < 3; i++) + for (k = 0; k < 3; k++) + { + AR[i, k] = Math.Abs(R[i, k]); + } + + + // Vector separating the centers of Box B and of Box A + var vSepWS = boxCenter - Center; + // Rotated into Box A's coordinates + var vSepA = new Vector3(Vector3.Dot(vSepWS, RotA[0]), Vector3.Dot(vSepWS, RotA[1]), Vector3.Dot(vSepWS, RotA[2])); + + // Test if any of A's basis vectors separate the box + for (i = 0; i < 3; i++) + { + ExtentA = SizeA[i]; + ExtentB = Vector3.Dot(SizeB, new Vector3(AR[i, 0], AR[i, 1], AR[i, 2])); + Separation = Math.Abs(vSepA[i]); + + if (Separation > ExtentA + ExtentB) + return ContainmentType.Disjoint; + } + + // Test if any of B's basis vectors separate the box + for (k = 0; k < 3; k++) + { + ExtentA = Vector3.Dot(SizeA, new Vector3(AR[0, k], AR[1, k], AR[2, k])); + ExtentB = SizeB[k]; + Separation = Math.Abs(Vector3.Dot(vSepA, new Vector3(R[0, k], R[1, k], R[2, k]))); + + if (Separation > ExtentA + ExtentB) + return ContainmentType.Disjoint; + } + + // Now test Cross Products of each basis vector combination ( A[i], B[k] ) + for (i = 0; i < 3; i++) + for (k = 0; k < 3; k++) + { + int i1 = (i + 1) % 3, i2 = (i + 2) % 3; + int k1 = (k + 1) % 3, k2 = (k + 2) % 3; + ExtentA = SizeA[i1] * AR[i2, k] + SizeA[i2] * AR[i1, k]; + ExtentB = SizeB[k1] * AR[i, k2] + SizeB[k2] * AR[i, k1]; + Separation = Math.Abs(vSepA[i2] * R[i1, k] - vSepA[i1] * R[i2, k]); + if (Separation > ExtentA + ExtentB) + return ContainmentType.Disjoint; + } + + // No separating axis found, the boxes overlap + return ContainmentType.Intersects; + } + + /// + /// Determines whether there is an intersection between a and a . + /// + /// The ray to test. + /// When the method completes, contains the point of intersection, + /// or if there was no intersection. + /// Whether the two objects intersected. + public bool Intersects(ref Ray ray, out Vector3 point) + { + // Put ray in box space + Matrix invTrans; + Matrix.Invert(ref Transformation, out invTrans); + + Ray bRay; + Vector3.TransformNormal(ref ray.Direction, ref invTrans, out bRay.Direction); + Vector3.TransformCoordinate(ref ray.Position, ref invTrans, out bRay.Position); + + //Perform a regular ray to BoundingBox check + var bb = new BoundingBox(-Extents, Extents); + var intersects = CollisionHelper.RayIntersectsBox(ref bRay, ref bb, out point); + + //Put the result intersection back to world + if (intersects) + Vector3.TransformCoordinate(ref point, ref Transformation, out point); + + return intersects; + } + + /// + /// Determines whether there is an intersection between a and a . + /// + /// The ray to test. + /// Whether the two objects intersected. + public bool Intersects(ref Ray ray) + { + Vector3 point; + return Intersects(ref ray, out point); + } + + private Vector3[] GetLocalCorners() + { + var xv = new Vector3(Extents.X, 0, 0); + var yv = new Vector3(0, Extents.Y, 0); + var zv = new Vector3(0, 0, Extents.Z); + + var corners = new Vector3[8]; + corners[0] = +xv + yv + zv; + corners[1] = +xv + yv - zv; + corners[2] = -xv + yv - zv; + corners[3] = -xv + yv + zv; + corners[4] = +xv - yv + zv; + corners[5] = +xv - yv - zv; + corners[6] = -xv - yv - zv; + corners[7] = -xv - yv + zv; + + return corners; + } + + /// + /// Get the axis-aligned which contains all corners. + /// + /// The axis-aligned BoundingBox of this OrientedBoundingBox. + public BoundingBox GetBoundingBox() + { + return BoundingBox.FromPoints(GetCorners()); + } + + /// + /// Calculates the matrix required to transfer any point from one local coordinates to another. + /// + /// The source OrientedBoundingBox. + /// The target OrientedBoundingBox. + /// + /// If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + /// + /// + public static Matrix GetBoxToBoxMatrix(ref OrientedBoundingBox A, ref OrientedBoundingBox B, bool NoMatrixScaleApplied = false) + { + Matrix AtoB_Matrix; + + // Calculate B to A transformation matrix + if (NoMatrixScaleApplied) + { + var RotA = GetRows(ref A.Transformation); + var RotB = GetRows(ref B.Transformation); + AtoB_Matrix = new Matrix(); + int i, k; + for (i = 0; i < 3; i++) + for (k = 0; k < 3; k++) + AtoB_Matrix[i, k] = Vector3.Dot(RotB[i], RotA[k]); + var v = B.Center - A.Center; + AtoB_Matrix.M41 = Vector3.Dot(v, RotA[0]); + AtoB_Matrix.M42 = Vector3.Dot(v, RotA[1]); + AtoB_Matrix.M43 = Vector3.Dot(v, RotA[2]); + AtoB_Matrix.M44 = 1; + } + else + { + Matrix AInvMat; + Matrix.Invert(ref A.Transformation, out AInvMat); + AtoB_Matrix = B.Transformation * AInvMat; + } + + return AtoB_Matrix; + } + + /// + /// Merge an OrientedBoundingBox B into another OrientedBoundingBox A, by expanding A to contain B and keeping A orientation. + /// + /// The to merge into it. + /// The to be merged + /// + /// If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + /// + /// + /// Unlike merging axis aligned boxes, The operation is not interchangeable, because it keeps A orientation and merge B into it. + /// + public static void Merge(ref OrientedBoundingBox A, ref OrientedBoundingBox B, bool NoMatrixScaleApplied = false) + { + Matrix AtoB_Matrix = GetBoxToBoxMatrix(ref A, ref B, NoMatrixScaleApplied); + + //Get B corners in A Space + var bCorners = B.GetLocalCorners(); + Vector3.TransformCoordinate(bCorners, ref AtoB_Matrix, bCorners); + + //Get A local Bounding Box + var A_LocalBB = new BoundingBox(-A.Extents, A.Extents); + + //Find B BoundingBox in A Space + var B_LocalBB = BoundingBox.FromPoints(bCorners); + + //Merger A and B local Bounding Boxes + BoundingBox mergedBB; + BoundingBox.Merge(ref B_LocalBB, ref A_LocalBB, out mergedBB); + + //Find the new Extents and Center, Transform Center back to world + var newCenter = mergedBB.Minimum + (mergedBB.Maximum - mergedBB.Minimum) / 2f; + A.Extents = mergedBB.Maximum - newCenter; + Vector3.TransformCoordinate(ref newCenter, ref A.Transformation, out newCenter); + A.Transformation.TranslationVector = newCenter; + } + + /// + /// Merge this OrientedBoundingBox into another OrientedBoundingBox, keeping the other OrientedBoundingBox orientation. + /// + /// The other to merge into. + /// + /// If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + /// + public void MergeInto(ref OrientedBoundingBox OBB, bool NoMatrixScaleApplied = false) + { + Merge(ref OBB, ref this, NoMatrixScaleApplied); + } + + /// + /// Merge another OrientedBoundingBox into this OrientedBoundingBox. + /// + /// The other to merge into this OrientedBoundingBox. + /// + /// If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + /// + public void Add(ref OrientedBoundingBox OBB, bool NoMatrixScaleApplied = false) + { + Merge(ref this, ref OBB, NoMatrixScaleApplied); + } + + /// + /// Determines whether the specified is equal to this instance. + /// + /// The to compare with this instance. + /// + /// true if the specified is equal to this instance; otherwise, false. + /// + [MethodImpl((MethodImplOptions)0x100)] // MethodImplOptions.AggressiveInlining + public bool Equals(ref OrientedBoundingBox value) + { + return Extents == value.Extents && Transformation == value.Transformation; + } + + /// + /// Determines whether the specified is equal to this instance. + /// + /// The to compare with this instance. + /// + /// true if the specified is equal to this instance; otherwise, false. + /// + [MethodImpl((MethodImplOptions)0x100)] // MethodImplOptions.AggressiveInlining + public bool Equals(OrientedBoundingBox value) + { + return Equals(ref value); + } + + /// + /// Determines whether the specified is equal to this instance. + /// + /// The to compare with this instance. + /// + /// true if the specified is equal to this instance; otherwise, false. + /// + public override bool Equals(object value) + { + if (!(value is OrientedBoundingBox)) + return false; + + var strongValue = (OrientedBoundingBox)value; + return Equals(ref strongValue); + } + + /// + /// Tests for equality between two objects. + /// + /// The first value to compare. + /// The second value to compare. + /// true if has the same value as ; otherwise, false. + [MethodImpl((MethodImplOptions)0x100)] // MethodImplOptions.AggressiveInlining + public static bool operator ==(OrientedBoundingBox left, OrientedBoundingBox right) + { + return left.Equals(ref right); + } + + /// + /// Tests for inequality between two objects. + /// + /// The first value to compare. + /// The second value to compare. + /// true if has a different value than ; otherwise, false. + [MethodImpl((MethodImplOptions)0x100)] // MethodImplOptions.AggressiveInlining + public static bool operator !=(OrientedBoundingBox left, OrientedBoundingBox right) + { + return !left.Equals(ref right); + } + + /// + /// Returns a hash code for this instance. + /// + /// + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + /// + public override int GetHashCode() + { + return Extents.GetHashCode() + Transformation.GetHashCode(); + } + + /// + /// Returns a that represents this instance. + /// + /// + /// A that represents this instance. + /// + public override string ToString() + { + return String.Format(CultureInfo.CurrentCulture, "Center: {0}, Extents: {1}", Center, Extents); + } + + /// + /// Returns a that represents this instance. + /// + /// The format. + /// + /// A that represents this instance. + /// + public string ToString(string format) + { + if (format == null) + return ToString(); + + return string.Format(CultureInfo.CurrentCulture, "Center: {0}, Extents: {1}", Center.ToString(format, CultureInfo.CurrentCulture), + Extents.ToString(format, CultureInfo.CurrentCulture)); + } + + /// + /// Returns a that represents this instance. + /// + /// The format provider. + /// + /// A that represents this instance. + /// + public string ToString(IFormatProvider formatProvider) + { + return string.Format(formatProvider, "Center: {0}, Extents: {1}", Center.ToString(), Extents.ToString()); + } + + /// + /// Returns a that represents this instance. + /// + /// The format. + /// The format provider. + /// + /// A that represents this instance. + /// + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == null) + return ToString(formatProvider); + + return string.Format(formatProvider, "Center: {0}, Extents: {1}", Center.ToString(format, formatProvider), + Extents.ToString(format, formatProvider)); + } + } +} + diff --git a/sources/core/Xenko.Core.Mathematics/Plane.cs b/sources/core/Xenko.Core.Mathematics/Plane.cs index 9e6e27ec5c..e685dc34a2 100644 --- a/sources/core/Xenko.Core.Mathematics/Plane.cs +++ b/sources/core/Xenko.Core.Mathematics/Plane.cs @@ -80,8 +80,8 @@ public Plane(float a, float b, float c, float d) /// The normal vector to the plane. public Plane(Vector3 point, Vector3 normal) { - this.Normal = normal; - this.D = Vector3.Dot(normal, point); + Normal = normal; + Vector3.Dot(ref normal, ref point, out D); } /// @@ -426,6 +426,24 @@ public static Vector3 Project(Plane plane, Vector3 point) return result; } + /// + /// Creates a plane of unit length. + /// + /// The X component of the normal. + /// The Y component of the normal. + /// The Z component of the normal. + /// The distance of the plane along its normal from the origin. + /// When the method completes, contains the normalized plane. + public static void Normalize(float normalX, float normalY, float normalZ, float planeD, out Plane result) + { + float magnitude = 1.0f / (float)(Math.Sqrt((normalX * normalX) + (normalY * normalY) + (normalZ * normalZ))); + + result.Normal.X = normalX * magnitude; + result.Normal.Y = normalY * magnitude; + result.Normal.Z = normalZ * magnitude; + result.D = planeD * magnitude; + } + /// /// Changes the coefficients of the normal vector of the plane to make it of unit length. /// @@ -753,7 +771,7 @@ public string ToString(string format, IFormatProvider formatProvider) /// Returns a hash code for this instance. /// /// - /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. /// public override int GetHashCode() { diff --git a/sources/core/Xenko.Core.Mathematics/Quaternion.cs b/sources/core/Xenko.Core.Mathematics/Quaternion.cs index 864fe1f1e9..6e4855898e 100644 --- a/sources/core/Xenko.Core.Mathematics/Quaternion.cs +++ b/sources/core/Xenko.Core.Mathematics/Quaternion.cs @@ -749,7 +749,7 @@ public static Quaternion Normalize(Quaternion value) /// Rotates a Vector3 by the specified quaternion rotation. /// /// The vector to rotate. - public void Rotate(ref Vector3 vector) + public void RotateVector(ref Vector3 vector) { var pureQuaternion = new Quaternion(vector, 0); pureQuaternion = Conjugate(this) * pureQuaternion * this; @@ -759,6 +759,59 @@ public void Rotate(ref Vector3 vector) vector.Z = pureQuaternion.Z; } + /// + /// Rotate myself by yaw, pitch, roll angles in radians + /// + /// Returns myself + public Quaternion Rotate(float yaw, float pitch, float roll) + { + MultiplyMyself(Quaternion.RotationYawPitchRoll(yaw, pitch, roll)); + return this; + } + + /// + /// Rotate myself by another quaternion with the option to scale the rotation. This is faster than rotating by individual yaw, pitch and roll values. + /// + /// Other quaternion to rotate by + /// Shortcut to scale how much of the rotation is applied + /// Returns myself + public Quaternion Rotate(Quaternion other, float scale = 1f) + { + if (scale == 1f) + MultiplyMyself(other); + else + MultiplyMyself(Quaternion.Lerp(Quaternion.Identity, other, scale)); + + return this; + } + + /// + /// Rotate myself by yaw, pitch, roll angles in degrees + /// + /// Returns myself + public Quaternion RotateDeg(float yaw, float pitch, float roll) + { + MultiplyMyself(Quaternion.RotationYawPitchRollDeg(yaw, pitch, roll)); + return this; + } + + private void MultiplyMyself(Quaternion left) + { + float lx = left.X; + float ly = left.Y; + float lz = left.Z; + float lw = left.W; + float rx = X; + float ry = Y; + float rz = Z; + float rw = W; + + X = (rx * lw + lx * rw + ry * lz) - (rz * ly); + Y = (ry * lw + ly * rw + rz * lx) - (rx * lz); + Z = (rz * lw + lz * rw + rx * ly) - (ry * lx); + W = (rw * lw) - (rx * lx + ry * ly + rz * lz); + } + /// /// Creates a quaternion given a rotation and an axis. /// @@ -881,6 +934,27 @@ public static Quaternion RotationX(float angle) return result; } + /// + /// Creates a quaternion that rotates around the x-axis. + /// + /// Angle of rotation in degrees. + /// The created rotation quaternion. + public static Quaternion RotationXDeg(float angle) { + Quaternion result; + RotationX(MathUtil.DegreesToRadians(angle), out result); + return result; + } + + /// + /// Creates a quaternion that rotates around the x-axis. + /// + /// Angle of rotation in degrees. + /// The created rotation quaternion. + public static Quaternion RotationXDeg(float angle, out Quaternion result) { + RotationX(MathUtil.DegreesToRadians(angle), out result); + return result; + } + /// /// Creates a quaternion that rotates around the y-axis. /// @@ -904,6 +978,27 @@ public static Quaternion RotationY(float angle) return result; } + /// + /// Creates a quaternion that rotates around the y-axis. + /// + /// Angle of rotation in degrees. + /// The created rotation quaternion. + public static Quaternion RotationYDeg(float angle) { + Quaternion result; + RotationY(MathUtil.DegreesToRadians(angle), out result); + return result; + } + + /// + /// Creates a quaternion that rotates around the y-axis. + /// + /// Angle of rotation in degrees. + /// The created rotation quaternion. + public static Quaternion RotationYDeg(float angle, out Quaternion result) { + RotationY(MathUtil.DegreesToRadians(angle), out result); + return result; + } + /// /// Creates a quaternion that rotates around the z-axis. /// @@ -927,6 +1022,27 @@ public static Quaternion RotationZ(float angle) return result; } + /// + /// Creates a quaternion that rotates around the z-axis. + /// + /// Angle of rotation in degrees. + /// The created rotation quaternion. + public static Quaternion RotationZDeg(float angle) { + Quaternion result; + RotationZ(MathUtil.DegreesToRadians(angle), out result); + return result; + } + + /// + /// Creates a quaternion that rotates around the z-axis. + /// + /// Angle of rotation in degrees. + /// The created rotation quaternion. + public static Quaternion RotationZDeg(float angle, out Quaternion result) { + RotationZ(MathUtil.DegreesToRadians(angle), out result); + return result; + } + /// /// Calculate the yaw/pitch/roll rotation equivalent to the provided quaternion. /// @@ -1008,6 +1124,152 @@ public static Quaternion RotationYawPitchRoll(float yaw, float pitch, float roll return result; } + /// + /// Creates a quaternion given a yaw, pitch, and roll value. + /// + /// The yaw of rotation. + /// The pitch of rotation. + /// The roll of rotation. + /// The newly created quaternion. + public static Quaternion RotationYawPitchRollDeg(float yaw, float pitch, float roll) { + Quaternion result; + RotationYawPitchRoll(MathUtil.DegreesToRadians(yaw), + MathUtil.DegreesToRadians(pitch), + MathUtil.DegreesToRadians(roll), out result); + return result; + } + + /// + /// Creates a quaternion given a yaw, pitch, and roll value. + /// + /// The yaw of rotation. + /// The pitch of rotation. + /// The roll of rotation. + /// The newly created quaternion. + public static Quaternion RotationYawPitchRollDeg(float yaw, float pitch, float roll, out Quaternion result) { + RotationYawPitchRoll(MathUtil.DegreesToRadians(yaw), + MathUtil.DegreesToRadians(pitch), + MathUtil.DegreesToRadians(roll), out result); + return result; + } + + /// + /// Generates a Quaternion that "looks at" the direction. Uses (0,1,0) as up. + /// + /// Quaternion to store the result + /// Direction to look in + /// Returns the referenced use quaternion + public static Quaternion LookAt(ref Quaternion use, Vector3 direction) + { + // inline normalize (also flip for handedness) + float length = direction.X * direction.X + direction.Y * direction.Y + direction.Z * direction.Z; + if (length != 1f && length != 0f) + { + length = 1.0f / (float)Math.Sqrt(length); + direction.X *= -length; + direction.Y *= -length; + direction.Z *= -length; + } + else + { + direction.X = -direction.X; + direction.Y = -direction.Y; + direction.Z = -direction.Z; + } + Vector3 fla_vect1; + fla_vect1.X = 0; + fla_vect1.Y = 1; + fla_vect1.Z = 0; + float tempx = (fla_vect1.Y * direction.Z) - (fla_vect1.Z * direction.Y); + float tempy = (fla_vect1.Z * direction.X) - (fla_vect1.X * direction.Z); + fla_vect1.Z = (fla_vect1.X * direction.Y) - (fla_vect1.Y * direction.X); + fla_vect1.X = tempx; + fla_vect1.Y = tempy; + // inline normalize + length = fla_vect1.X * fla_vect1.X + fla_vect1.Y * fla_vect1.Y + fla_vect1.Z * fla_vect1.Z; + if (length != 1f && length != 0f) + { + length = 1.0f / (float)Math.Sqrt(length); + fla_vect1.X *= length; + fla_vect1.Y *= length; + fla_vect1.Z *= length; + } + Vector3 fla_vect2; + fla_vect2.X = direction.X; + fla_vect2.Y = direction.Y; + fla_vect2.Z = direction.Z; + //vect2.crossLocal(vect1); + tempx = (fla_vect2.Y * fla_vect1.Z) - (fla_vect2.Z * fla_vect1.Y); + tempy = (fla_vect2.Z * fla_vect1.X) - (fla_vect2.X * fla_vect1.Z); + fla_vect2.Z = (fla_vect2.X * fla_vect1.Y) - (fla_vect2.Y * fla_vect1.X); + fla_vect2.X = tempx; + fla_vect2.Y = tempy; + // inline normalize + length = fla_vect2.X * fla_vect2.X + fla_vect2.Y * fla_vect2.Y + fla_vect2.Z * fla_vect2.Z; + if (length != 1f && length != 0f) + { + length = 1.0f / (float)Math.Sqrt(length); + fla_vect2.X *= length; + fla_vect2.Y *= length; + fla_vect2.Z *= length; + } + //use.fromRotationMatrix(vect1.X, vect2.X, vect3.X, vect1.Y, vect2.Y, + // vect3.Y, vect1.Z, vect2.Z, vect3.Z).normalizeLocal(); + //float m00, float m01, float m02, + // float m10, float m11, float m12, + // float m20, float m21, float m22 + + float t = fla_vect1.X + fla_vect2.Y + direction.Z, w, x, y, z; + // we protect the division by s by ensuring that s>=1 + if (t >= 0) + { // |w| >= .5 + float s = (float)Math.Sqrt(t + 1); // |s|>=1 ... + w = 0.5f * s; + s = 0.5f / s; // so this division isn't bad + x = (fla_vect2.Z - direction.Y) * s; + y = (direction.X - fla_vect1.Z) * s; + z = (fla_vect1.Y - fla_vect2.X) * s; + } + else if ((fla_vect1.X > fla_vect2.Y) && (fla_vect1.X > direction.Z)) + { + float s = (float)Math.Sqrt(1.0f + fla_vect1.X - fla_vect2.Y - direction.Z); // |s|>=1 + x = s * 0.5f; // |x| >= .5 + s = 0.5f / s; + y = (fla_vect1.Y + fla_vect2.X) * s; + z = (direction.X + fla_vect1.Z) * s; + w = (fla_vect2.Z - direction.Y) * s; + } + else if (fla_vect2.Y > direction.Z) + { + float s = (float)Math.Sqrt(1.0f + fla_vect2.Y - fla_vect1.X - direction.Z); // |s|>=1 + y = s * 0.5f; // |y| >= .5 + s = 0.5f / s; + x = (fla_vect1.Y + fla_vect2.X) * s; + z = (fla_vect2.Z + direction.Y) * s; + w = (direction.X - fla_vect1.Z) * s; + } + else + { + float s = (float)Math.Sqrt(1.0f + direction.Z - fla_vect1.X - fla_vect2.Y); // |s|>=1 + z = s * 0.5f; // |z| >= .5 + s = 0.5f / s; + x = (direction.X + fla_vect1.Z) * s; + y = (fla_vect2.Z + direction.Y) * s; + w = (fla_vect1.Y - fla_vect2.X) * s; + } + float norm = w * w + x * x + y * y + z * z; + float n = (float)(1.0f / Math.Sqrt(norm)); + w *= n; + x *= n; + y *= n; + z *= n; + use.X = x; + use.Y = y; + use.Z = z; + use.W = w; + return use; + } + /// /// Computes a quaternion corresponding to the rotation transforming the vector to the vector . /// diff --git a/sources/core/Xenko.Core.Mathematics/RandomSeed.cs b/sources/core/Xenko.Core.Mathematics/RandomSeed.cs index 3f3f8a3249..fdd7b9f362 100644 --- a/sources/core/Xenko.Core.Mathematics/RandomSeed.cs +++ b/sources/core/Xenko.Core.Mathematics/RandomSeed.cs @@ -25,7 +25,7 @@ public struct RandomSeed // We want to limit the maximum settable value to prevent such errors. private const uint UnderflowGuard = 0xFFFF; - private readonly uint seed; + public readonly uint seed; /// /// Initializes a new instance of the struct from a target uint. diff --git a/sources/core/Xenko.Core.Mathematics/RectangleF.cs b/sources/core/Xenko.Core.Mathematics/RectangleF.cs index efe87f72e1..2b8b4c27a5 100644 --- a/sources/core/Xenko.Core.Mathematics/RectangleF.cs +++ b/sources/core/Xenko.Core.Mathematics/RectangleF.cs @@ -269,7 +269,7 @@ public void Inflate(float horizontalAmount, float verticalAmount) /// [OutAttribute] true if the specified Point is contained within this rectangle; false otherwise. public void Contains(ref Vector2 value, out bool result) { - result = (X <= value.X) && (value.X < Right) && (Y <= value.Y) && (value.Y < Bottom); + result = value.X >= this.X && value.X <= Right && value.Y >= this.Y && value.Y <= Bottom; } /// Determines whether this rectangle entirely contains a specified rectangle. @@ -295,7 +295,7 @@ public void Contains(ref RectangleF value, out bool result) /// true if point is inside , otherwise false. public bool Contains(float x, float y) { - return (x >= this.X && x <= Right && y >= this.Y && y <= Bottom); + return x >= this.X && x <= Right && y >= this.Y && y <= Bottom; } /// diff --git a/sources/core/Xenko.Core.Mathematics/SimpleSaver.cs b/sources/core/Xenko.Core.Mathematics/SimpleSaver.cs new file mode 100644 index 0000000000..4b4c9c5b21 --- /dev/null +++ b/sources/core/Xenko.Core.Mathematics/SimpleSaver.cs @@ -0,0 +1,327 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Text; + +namespace Xenko.Core.Mathematics +{ + /// + /// Simple helper class to handle saving and loading simple data to a file. Automatically compresses data and handles basic C# signed datatypes (long, int, string, bool etc.). + /// Also supports basic Focus Engine types, like Vector3, Quaternions and Color4s (and arrays of them) + /// + public class SimpleSaver + { + public Dictionary Data = new Dictionary(); + + /// + /// Gets a simple path to use from ApplicationData, includes '/' at the end + /// + /// subfolder to use (game name etc.) + public static string GetGoodPath(string tag) + { + string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "/" + tag + "/"; + if (Directory.Exists(path) == false) Directory.CreateDirectory(path); + return path; + } + + public string Filename; + + private static BinaryWriter CompressedStream(Stream output) + { + GZipStream cmp = new GZipStream(output, CompressionMode.Compress); + BufferedStream buffStrm = new BufferedStream(cmp, 65536); + return new BinaryWriter(buffStrm); + } + + private static BinaryReader UncompressedStream(Stream input) + { + GZipStream cmp = new GZipStream(input, CompressionMode.Decompress); + return new BinaryReader(cmp); + } + + /// + /// Returns what the boolean was toggled to + /// + public bool ToggleBoolean(string name, bool defaultIfNew = true) + { + if (Data.TryGetValue(name, out object o) && o is bool b) + { + Data[name] = !b; + return !b; + } + + Data[name] = defaultIfNew; + return defaultIfNew; + } + + public T Get(string name, T defaultValue = default) + { + if (Data.TryGetValue(name, out object o) && o is T t) + return t; + + return defaultValue; + } + + public void Set(string name, object value) + { + Data[name] = value; + } + + public SimpleSaver(string filename = null, bool tryLoading = true) + { + if (filename != null) + { + Filename = filename; + if (tryLoading) LoadFromFile(); + } + } + + public void SaveToFile() + { + if (Filename == null) throw new InvalidOperationException("Can't save to file if Filename is not set!"); + using (BinaryWriter bw = CompressedStream(File.Open(Filename, FileMode.Create))) + { + Write(bw); + } + } + + public bool LoadFromFile() + { + if (Filename == null) throw new InvalidOperationException("Can't load from a file if Filename is not set!"); + if (!File.Exists(Filename)) return false; + Data.Clear(); + using (BinaryReader br = UncompressedStream(File.Open(Filename, FileMode.Open))) + { + Read(br); + } + return true; + } + + public void Read(BinaryReader reader) + { + int cnt = reader.ReadInt32(); + int len, i; + for (int j=0; j kvp in Data) + { + if (kvp.Value is string s) + { + output.Write("S" + kvp.Key); + output.Write(s); + } + else if (kvp.Value is int[] ia) + { + output.Write("1" + kvp.Key); + output.Write(ia.Length); + for (int i = 0; i < ia.Length; i++) + output.Write(ia[i]); + } + else if (kvp.Value is float[] fa) + { + output.Write("2" + kvp.Key); + output.Write(fa.Length); + for (int i = 0; i < fa.Length; i++) + output.Write(fa[i]); + } + else if (kvp.Value is string[] sa) + { + output.Write("3" + kvp.Key); + output.Write(sa.Length); + for (int i = 0; i < sa.Length; i++) + output.Write(sa[i]); + } + else if (kvp.Value is bool[] ba) + { + output.Write("4" + kvp.Key); + output.Write(ba.Length); + for (int i = 0; i < ba.Length; i++) + output.Write(ba[i]); + } + else if (kvp.Value is Vector3 v3) + { + output.Write("5" + kvp.Key); + output.Write(v3.X); + output.Write(v3.Y); + output.Write(v3.Z); + } + else if (kvp.Value is Vector3[] v3a) + { + output.Write("6" + kvp.Key); + output.Write(v3a.Length); + for (int i = 0; i < v3a.Length; i++) + { + output.Write(v3a[i].X); + output.Write(v3a[i].Y); + output.Write(v3a[i].Z); + } + } + else if (kvp.Value is Quaternion q) + { + output.Write("Q" + kvp.Key); + output.Write(q.X); + output.Write(q.Y); + output.Write(q.Z); + output.Write(q.W); + } + else if (kvp.Value is Quaternion[] qa) + { + output.Write("7" + kvp.Key); + output.Write(qa.Length); + for (int i = 0; i < qa.Length; i++) + { + output.Write(qa[i].X); + output.Write(qa[i].Y); + output.Write(qa[i].Z); + output.Write(qa[i].W); + } + } + else if (kvp.Value is Color4 c) + { + output.Write("C" + kvp.Key); + output.Write(c.R); + output.Write(c.G); + output.Write(c.B); + output.Write(c.A); + } + else if (kvp.Value is Color4[] ca) + { + output.Write("8" + kvp.Key); + output.Write(ca.Length); + for (int i = 0; i < ca.Length; i++) + { + output.Write(ca[i].R); + output.Write(ca[i].G); + output.Write(ca[i].B); + output.Write(ca[i].A); + } + } + else if (kvp.Value is float f) + { + output.Write("F" + kvp.Key); + output.Write(f); + } + else if (kvp.Value is int i) + { + output.Write("I" + kvp.Key); + output.Write(i); + } + else if (kvp.Value is short ss) + { + output.Write("s" + kvp.Key); + output.Write(ss); + } + else if (kvp.Value is byte b) + { + output.Write("b" + kvp.Key); + output.Write(b); + } + else if (kvp.Value is bool bb) + { + output.Write("B" + kvp.Key); + output.Write(bb); + } + else if (kvp.Value is double d) + { + output.Write("D" + kvp.Key); + output.Write(d); + } + else if (kvp.Value is long l) + { + output.Write("L" + kvp.Key); + output.Write(l); + } + else throw new InvalidDataException("Can't process type: " + (kvp.Value?.GetType()?.Name ?? "null")); + } + } + } +} diff --git a/sources/core/Xenko.Core.Mathematics/Vector2.cs b/sources/core/Xenko.Core.Mathematics/Vector2.cs index c14dd60c23..308a72db2a 100644 --- a/sources/core/Xenko.Core.Mathematics/Vector2.cs +++ b/sources/core/Xenko.Core.Mathematics/Vector2.cs @@ -169,6 +169,16 @@ public float Length() return (float)Math.Sqrt((X * X) + (Y * Y)); } + /// + /// Calculates the area of the Vector2 + /// + /// X * Y + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float Area() + { + return X * Y; + } + /// /// Calculates the squared length of the vector. /// diff --git a/sources/core/Xenko.Core.Mathematics/Vector3.cs b/sources/core/Xenko.Core.Mathematics/Vector3.cs index d4eca4943f..fed8175de9 100644 --- a/sources/core/Xenko.Core.Mathematics/Vector3.cs +++ b/sources/core/Xenko.Core.Mathematics/Vector3.cs @@ -27,7 +27,6 @@ * THE SOFTWARE. */ using System; -using System.ComponentModel; using System.Globalization; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -199,6 +198,16 @@ public float Length() return (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z)); } + /// + /// Returns the volume of the Vector3 + /// + /// X * Y * Z + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float Volume() + { + return X * Y * Z; + } + /// /// Calculates the squared length of the vector. /// @@ -217,7 +226,7 @@ public float LengthSquared() /// Converts the vector into a unit vector. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Normalize() + public Vector3 Normalize() { float length = Length(); if (length > MathUtil.ZeroTolerance) @@ -227,6 +236,22 @@ public void Normalize() Y *= inv; Z *= inv; } + return this; + } + + /// + /// Generates a new Vector3 with the normalized value + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Vector3 Normalized() + { + float length = Length(); + if (length > MathUtil.ZeroTolerance) + { + float inv = 1.0f / length; + return new Vector3(X * inv, Y * inv, Z * inv); + } + return Vector3.Zero; } /// @@ -240,6 +265,48 @@ public void Pow(float exponent) Z = (float)Math.Pow(Z, exponent); } + /// + /// Rotates the vector around the origin by the angle using the given axis of rotation. + /// + /// The axis of rotation. + /// The angle of rotation. + public void RotateAround(Vector3 axis, float angle) + { + RotateAround(Zero, axis, angle); + } + + /// + /// Rotates the vector around the target by the angle using the given axis of rotation. + /// + /// The position vector of the target to rotate around. + /// The axis of rotation. + /// The angle of rotation. + public void RotateAround(Vector3 target, Vector3 axis, float angle) + { + Vector3 local = this - target; + Quaternion q = Quaternion.RotationAxis(axis, angle); + q.RotateVector(ref local); + var result = target + local; + + X = result.X; + Y = result.Y; + Z = result.Z; + } + + /// + /// Rotates around a 3D point with the given Quaternion + /// + public void RotateAround(Vector3 target, Quaternion q) + { + Vector3 local = this - target; + Transform(ref local, ref q, out local); + var result = target + local; + + X = result.X; + Y = result.Y; + Z = result.Z; + } + /// /// Creates an array containing the elements of the vector. /// @@ -320,7 +387,7 @@ public static Vector3 Multiply(Vector3 value, float scale) { return new Vector3(value.X * scale, value.Y * scale, value.Z * scale); } - + /// /// Modulates a vector with another by performing component-wise multiplication. /// @@ -368,7 +435,7 @@ public static Vector3 Divide(Vector3 value, float scale) { return new Vector3(value.X / scale, value.Y / scale, value.Z / scale); } - + /// /// Demodulates a vector with another by performing component-wise division. /// @@ -794,6 +861,34 @@ public static Vector3 CatmullRom(Vector3 value1, Vector3 value2, Vector3 value3, return result; } + /// + /// Performs mathematical modulo component-wise (see MathUtil.Mod). + /// + /// The first source vector. + /// The second source vector. + /// When the method completes, contains an new vector composed of each component's modulo. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Mod(ref Vector3 left, ref Vector3 right, out Vector3 result) + { + result.X = MathUtil.Mod(left.X, right.X); + result.Y = MathUtil.Mod(left.Y, right.Y); + result.Z = MathUtil.Mod(left.Z, right.Z); + } + + /// + /// Performs mathematical modulo component-wise (see MathUtil.Mod). + /// + /// The first source vector. + /// The second source vector. + /// When the method completes, contains an new vector composed of each component's modulo. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Mod(Vector3 left, Vector3 right) + { + Vector3 result; + Mod(ref left, ref right, out result); + return result; + } + /// /// Returns a vector containing the smallest components of the specified vectors. /// @@ -1380,6 +1475,23 @@ public static void RotationYawPitchRoll(ref Quaternion quaternion, out Vector3 y Quaternion.RotationYawPitchRoll(ref quaternion, out yawPitchRoll.X, out yawPitchRoll.Y, out yawPitchRoll.Z); } + + /// + /// Rotates the source around the target by the rotation angle around the supplied axis. + /// + /// The position to rotate. + /// The point to rotate around. + /// The axis of rotation. + /// The angle to rotate by in radians. + /// The rotated vector. + public static Vector3 RotateAround(in Vector3 source, in Vector3 target, in Vector3 axis, float angle) + { + Vector3 local = source - target; + Quaternion q = Quaternion.RotationAxis(axis, angle); + q.RotateVector(ref local); + return target + local; + } + /// /// Adds two vectors. /// @@ -1462,6 +1574,19 @@ public static void RotationYawPitchRoll(ref Quaternion quaternion, out Vector3 y return new Vector3(left.X * right.X, left.Y * right.Y, left.Z * right.Z); } + /// + /// Return the vector rotated by the quaternion. + /// + /// + /// Shorthand for + /// + public static Vector3 operator *(in Vector3 left, in Quaternion right) + { + var pureQuaternion = new Quaternion(left, 0); + pureQuaternion = Quaternion.Conjugate(right) * pureQuaternion * right; + return new Vector3(pureQuaternion.X, pureQuaternion.Y, pureQuaternion.Z); + } + /// /// Adds a vector with the given value. /// @@ -1564,6 +1689,16 @@ public static explicit operator Vector4(Vector3 value) return new Vector4(value, 0.0f); } + /// + /// Performs an explicit conversion from to . + /// + /// The value. + /// The result of the conversion. + public static explicit operator Int3(Vector3 value) + { + return new Int3((int)value.X, (int)value.Y, (int)value.Z); + } + /// /// Tests whether one 3D vector is near another 3D vector. /// @@ -1613,7 +1748,7 @@ public string ToString(string format) if (format == null) return ToString(); - return string.Format(CultureInfo.CurrentCulture, "X:{0} Y:{1} Z:{2}", X.ToString(format, CultureInfo.CurrentCulture), + return string.Format(CultureInfo.CurrentCulture, "X:{0} Y:{1} Z:{2}", X.ToString(format, CultureInfo.CurrentCulture), Y.ToString(format, CultureInfo.CurrentCulture), Z.ToString(format, CultureInfo.CurrentCulture)); } diff --git a/sources/core/Xenko.Core.Mathematics/Xenko.Core.Mathematics.csproj b/sources/core/Xenko.Core.Mathematics/Xenko.Core.Mathematics.csproj index 63fecc3627..778a20e94c 100644 --- a/sources/core/Xenko.Core.Mathematics/Xenko.Core.Mathematics.csproj +++ b/sources/core/Xenko.Core.Mathematics/Xenko.Core.Mathematics.csproj @@ -1,6 +1,5 @@ - + - true true true @@ -16,10 +15,6 @@ true true - - - - Properties\SharedAssemblyInfo.cs @@ -30,4 +25,7 @@ + + + \ No newline at end of file diff --git a/sources/core/Xenko.Core.MicroThreading/ChannelMicroThreadAwaiter.cs b/sources/core/Xenko.Core.MicroThreading/ChannelMicroThreadAwaiter.cs index 68d792c5be..eb06203dc0 100644 --- a/sources/core/Xenko.Core.MicroThreading/ChannelMicroThreadAwaiter.cs +++ b/sources/core/Xenko.Core.MicroThreading/ChannelMicroThreadAwaiter.cs @@ -16,6 +16,8 @@ public class ChannelMicroThreadAwaiter : ICriticalNotifyCompletion internal Action Continuation; internal T Result; + public bool SuppressCancellationExceptions = false; + public static ChannelMicroThreadAwaiter New(MicroThread microThread) { lock (pool) @@ -58,7 +60,8 @@ public void UnsafeOnCompleted(Action continuation) public T GetResult() { // Check Task Result (exception, etc...) - MicroThread.CancellationToken.ThrowIfCancellationRequested(); + if (SuppressCancellationExceptions == false) + MicroThread.CancellationToken.ThrowIfCancellationRequested(); var result = Result; @@ -69,6 +72,7 @@ public T GetResult() if (pool.Count < 4096) { isCompleted = false; + SuppressCancellationExceptions = false; MicroThread = null; Continuation = null; Result = default(T); diff --git a/sources/core/Xenko.Core.MicroThreading/Xenko.Core.MicroThreading.csproj b/sources/core/Xenko.Core.MicroThreading/Xenko.Core.MicroThreading.csproj index e749ea3934..b79e2fedee 100644 --- a/sources/core/Xenko.Core.MicroThreading/Xenko.Core.MicroThreading.csproj +++ b/sources/core/Xenko.Core.MicroThreading/Xenko.Core.MicroThreading.csproj @@ -1,6 +1,5 @@ - + - true true true @@ -15,10 +14,6 @@ --auto-module-initializer true - - - - Properties\SharedAssemblyInfo.cs @@ -29,4 +24,7 @@ + + + \ No newline at end of file diff --git a/sources/core/Xenko.Core.Reflection/MemberDescriptors/IMemberDescriptor.cs b/sources/core/Xenko.Core.Reflection/MemberDescriptors/IMemberDescriptor.cs index 64af374e62..d9ff06ca4f 100644 --- a/sources/core/Xenko.Core.Reflection/MemberDescriptors/IMemberDescriptor.cs +++ b/sources/core/Xenko.Core.Reflection/MemberDescriptors/IMemberDescriptor.cs @@ -6,6 +6,8 @@ namespace Xenko.Core.Reflection { + public delegate bool ShouldSerializePredicate(object value, IMemberDescriptor parentTypeMemberDescriptor); + /// /// Describe a member of an object. /// @@ -47,8 +49,8 @@ public interface IMemberDescriptor ITypeDescriptor TypeDescriptor { get; } /// - /// Gets the order of this member. - /// Default is -1, meaning that it is using the alphabetical order + /// Gets the order of this member. + /// Default is -1, meaning that it is using the alphabetical order /// based on the name of this property. /// /// The order. @@ -75,7 +77,10 @@ public interface IMemberDescriptor /// /// Gets a value indicating whether this member should be serialized. /// - Func ShouldSerialize { get; } + ShouldSerializePredicate ShouldSerialize { get; } + + bool HasDefaultValue { get; } + object DefaultValue { get; } /// /// Gets the alternative names that will map back to this member (may be null). diff --git a/sources/core/Xenko.Core.Reflection/MemberDescriptors/MemberDescriptorBase.cs b/sources/core/Xenko.Core.Reflection/MemberDescriptors/MemberDescriptorBase.cs index 8cce17194a..e6671cfad8 100644 --- a/sources/core/Xenko.Core.Reflection/MemberDescriptors/MemberDescriptorBase.cs +++ b/sources/core/Xenko.Core.Reflection/MemberDescriptors/MemberDescriptorBase.cs @@ -77,7 +77,11 @@ protected MemberDescriptorBase(MemberInfo memberInfo, StringComparer defaultName /// The member information. public MemberInfo MemberInfo { get; } - public Func ShouldSerialize { get; set; } + public ShouldSerializePredicate ShouldSerialize { get; set; } + + public System.ComponentModel.DefaultValueAttribute DefaultValueAttribute { get; set; } + public bool HasDefaultValue => DefaultValueAttribute != null; + public object DefaultValue => DefaultValueAttribute.Value; public List AlternativeNames { get; set; } diff --git a/sources/core/Xenko.Core.Reflection/MemberPath.cs b/sources/core/Xenko.Core.Reflection/MemberPath.cs index f291307844..c847e31408 100644 --- a/sources/core/Xenko.Core.Reflection/MemberPath.cs +++ b/sources/core/Xenko.Core.Reflection/MemberPath.cs @@ -142,18 +142,22 @@ public void Push(IMemberDescriptor descriptor) public void Push(ITypeDescriptor descriptor, object key) { - var arrayDescriptor = descriptor as ArrayDescriptor; - var collectionDescriptor = descriptor as CollectionDescriptor; - var dictionaryDescriptor = descriptor as DictionaryDescriptor; - if (arrayDescriptor != null) + if (descriptor is ArrayDescriptor arrayDescriptor) { Push(arrayDescriptor, (int)key); } - if (collectionDescriptor != null) + else if (descriptor is CollectionDescriptor collectionDescriptor) { - Push(collectionDescriptor, (int)key); + if (descriptor.Category == DescriptorCategory.Set) + { + Push(collectionDescriptor as SetDescriptor, key); + } + else + { + Push(collectionDescriptor, (int)key); + } } - if (dictionaryDescriptor != null) + else if (descriptor is DictionaryDescriptor dictionaryDescriptor) { Push(dictionaryDescriptor, key); } @@ -195,6 +199,18 @@ public void Push(DictionaryDescriptor descriptor, object key) AddItem(new DictionaryPathItem(descriptor, key)); } + /// + /// Pushes an collection access on the path. + /// + /// The descriptor of the set. + /// The index in the set. + /// descriptor + public void Push(SetDescriptor descriptor, object index) + { + if (descriptor == null) throw new ArgumentNullException(nameof(descriptor)); + AddItem(new SetPathItem(descriptor, index)); + } + /// /// Pops the last item from the current path. /// @@ -230,7 +246,7 @@ public bool Apply([NotNull] object rootObject, MemberPathAction actionType, obje } break; case MemberPathAction.CollectionRemove: - if (!(lastItem is CollectionPathItem) && !(lastItem is ArrayPathItem)) + if (!(lastItem is CollectionPathItem || lastItem is ArrayPathItem)) { throw new ArgumentException("Invalid path [{0}] for action [{1}]. Expecting last path to be a collection/array item".ToFormat(this, actionType)); } @@ -270,7 +286,11 @@ public bool Apply([NotNull] object rootObject, MemberPathAction actionType, obje if (actionType == MemberPathAction.ValueClear) { if (lastItem is CollectionPathItem) - actionType = MemberPathAction.CollectionRemove; + { + actionType = lastItem.TypeDescriptor.Category == DescriptorCategory.Set + ? MemberPathAction.ValueSet + : MemberPathAction.CollectionRemove; + } else if (lastItem is DictionaryPathItem) actionType = MemberPathAction.DictionaryRemove; else @@ -292,7 +312,7 @@ public bool Apply([NotNull] object rootObject, MemberPathAction actionType, obje break; case MemberPathAction.CollectionRemove: - ((CollectionPathItem)lastItem).Descriptor.RemoveAt(nextObject, ((CollectionPathItem)lastItem).Index); + ((CollectionPathItem)lastItem).Descriptor.RemoveAt(nextObject, (int)((CollectionPathItem)lastItem).Index); break; } } @@ -712,7 +732,7 @@ public override int GetHashCode() { unchecked { - return (Descriptor.GetHashCode()*397) ^ Index; + return (Descriptor.GetHashCode() * 397) ^ ((int)Index); } } } @@ -781,5 +801,65 @@ public override int GetHashCode() } } } + + public sealed class SetPathItem : SpecialMemberPathItemBase, IEquatable + { + public readonly SetDescriptor Descriptor; + public readonly object Index; + + public SetPathItem(SetDescriptor descriptor, object index) + { + if (descriptor == null) throw new ArgumentNullException(nameof(descriptor)); + Descriptor = descriptor; + Index = index; + } + + public override ITypeDescriptor TypeDescriptor => Descriptor; + + public override object GetValue(object thisObj) + { + return Descriptor.GetValue(thisObj, Index); + } + + public override void SetValue(List stack, int objectIndex, object thisObject, object value) + { + Descriptor.SetValue(thisObject, Index, value); + } + + public override string GetName(bool isFirst) + { + return "[" + Index + "]"; + } + + public override object GetIndex() + { + return Index; + } + + public override MemberPathItem Clone(MemberPathItem parent) + { + return new SetPathItem(Descriptor, Index) { Parent = parent }; + } + + public bool Equals(SetPathItem other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Equals(Descriptor, other.Descriptor) && Index == other.Index; + } + + public override bool Equals(object obj) + { + return obj is SetPathItem spi && Equals(spi); + } + + public override int GetHashCode() + { + unchecked + { + return (Descriptor.GetHashCode() * 397) ^ (Index?.GetHashCode() ?? 0); + } + } + } } } diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptorFactory.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptorFactory.cs index 2df4828ab3..713ea14942 100644 --- a/sources/core/Xenko.Core.Reflection/TypeDescriptorFactory.cs +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptorFactory.cs @@ -59,6 +59,9 @@ public ITypeDescriptor Find(Type type) { descriptor = Create(type); + // if this descriptor failed for some reason, just return null + if (descriptor == null) return null; + // Register this descriptor (before initializing!) registeredDescriptors.Add(type, descriptor); @@ -77,7 +80,7 @@ public ITypeDescriptor Find(Type type) /// An instance of type descriptor. protected virtual ITypeDescriptor Create(Type type) { - ITypeDescriptor descriptor; + ITypeDescriptor descriptor = null; // The order of the descriptors here is important if (PrimitiveDescriptor.IsPrimitive(type)) @@ -89,15 +92,33 @@ protected virtual ITypeDescriptor Create(Type type) // IDictionary descriptor = new DictionaryDescriptor(this, type, emitDefaultValues, namingConvention); } - else if (CollectionDescriptor.IsCollection(type)) + else if (ListDescriptor.IsList(type)) + { + // IList + descriptor = new ListDescriptor(this, type, emitDefaultValues, namingConvention); + } + else if (SetDescriptor.IsSet(type)) + { + // ISet + descriptor = new SetDescriptor(this, type, emitDefaultValues, namingConvention); + } + else if (OldCollectionDescriptor.IsCollection(type)) { // ICollection - descriptor = new CollectionDescriptor(this, type, emitDefaultValues, namingConvention); + descriptor = new OldCollectionDescriptor(this, type, emitDefaultValues, namingConvention); } else if (type.IsArray) { - // array[] - descriptor = new ArrayDescriptor(this, type, emitDefaultValues, namingConvention); + if (type.GetArrayRank() == 1 && !type.GetElementType().IsArray) + { + // array[] - only single dimension array is supported + descriptor = new ArrayDescriptor(this, type, emitDefaultValues, namingConvention); + } + else + { + // multi-dimension array to be treated as a 'standard' object + descriptor = new NotSupportedObjectDescriptor(this, type, emitDefaultValues, namingConvention); + } } else if (NullableDescriptor.IsNullable(type)) { diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/ArrayDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/ArrayDescriptor.cs index a8569d69b1..b2c64aee4b 100644 --- a/sources/core/Xenko.Core.Reflection/TypeDescriptors/ArrayDescriptor.cs +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/ArrayDescriptor.cs @@ -50,5 +50,20 @@ public object GetValue(object array, int index) { return ((Array)array).GetValue(index); } + + public void SetValue(object array, int index, object value) + { + ((Array)array).SetValue(value, index); + } + + /// + /// Determines the number of elements of an array, -1 if it cannot determine the number of elements. + /// + /// The array. + /// The number of elements of an array, -1 if it cannot determine the number of elements. + public int GetLength(object array) + { + return ((Array)array).Length; + } } } diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/CollectionDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/CollectionDescriptor.cs index a96be73afc..bb5a76f144 100644 --- a/sources/core/Xenko.Core.Reflection/TypeDescriptors/CollectionDescriptor.cs +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/CollectionDescriptor.cs @@ -3,6 +3,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Reflection; using Xenko.Core.Yaml.Serialization; namespace Xenko.Core.Reflection @@ -10,224 +11,94 @@ namespace Xenko.Core.Reflection /// /// Provides a descriptor for a . /// - public class CollectionDescriptor : ObjectDescriptor + public abstract class CollectionDescriptor : ObjectDescriptor { - private static readonly object[] EmptyObjects = new object[0]; - private static readonly List ListOfMembersToRemove = new List { "Capacity", "Count", "IsReadOnly", "IsFixedSize", "IsSynchronized", "SyncRoot", "Comparer" }; - - private readonly Func IsReadOnlyFunction; - private readonly Func GetCollectionCountFunction; - private readonly Func GetIndexedItem; - private readonly Action SetIndexedItem; - private readonly Action CollectionAddFunction; - private readonly Action CollectionInsertFunction; - private readonly Action CollectionRemoveAtFunction; - private readonly Action CollectionRemoveFunction; - private readonly Action CollectionClearFunction; + public CollectionDescriptor(ITypeDescriptorFactory factory, Type type, bool emitDefaultValues, IMemberNamingConvention namingConvention) + : base(factory, type, emitDefaultValues, namingConvention) + { } /// - /// Initializes a new instance of the class. + /// Determines whether the specified type is collection. /// - /// The factory. /// The type. - /// Expecting a type inheriting from System.Collections.ICollection;type - public CollectionDescriptor(ITypeDescriptorFactory factory, Type type, bool emitDefaultValues, IMemberNamingConvention namingConvention) - : base(factory, type, emitDefaultValues, namingConvention) - { - if (!IsCollection(type)) - throw new ArgumentException(@"Expecting a type inheriting from System.Collections.ICollection", nameof(type)); - - // Gets the element type - var collectionType = type.GetInterface(typeof(IEnumerable<>)); - ElementType = (collectionType != null) ? collectionType.GetGenericArguments()[0] : typeof(object); - var typeSupported = false; - - // implements IList - if (typeof(IList).IsAssignableFrom(type)) - { - CollectionAddFunction = (obj, value) => ((IList)obj).Add(value); - CollectionClearFunction = obj => ((IList)obj).Clear(); - CollectionInsertFunction = (obj, index, value) => ((IList)obj).Insert(index, value); - CollectionRemoveAtFunction = (obj, index) => ((IList)obj).RemoveAt(index); - GetCollectionCountFunction = o => ((IList)o).Count; - GetIndexedItem = (obj, index) => ((IList)obj)[index]; - SetIndexedItem = (obj, index, value) => ((IList)obj)[index] = value; - IsReadOnlyFunction = obj => ((IList)obj).IsReadOnly; - HasIndexerAccessors = true; - typeSupported = true; - IsList = true; - } - var itype = type.GetInterface(typeof(ICollection<>)); - - // implements ICollection - if (!typeSupported && itype != null) - { - var remove = itype.GetMethod(nameof(ICollection.Remove), new[] { ElementType }); - CollectionRemoveFunction = (obj, value) => remove.Invoke(obj, new[] { value }); - var add = itype.GetMethod(nameof(ICollection.Add), new[] {ElementType}); - CollectionAddFunction = (obj, value) => add.Invoke(obj, new[] {value}); - var clear = itype.GetMethod(nameof(ICollection.Clear), Type.EmptyTypes); - CollectionClearFunction = obj => clear.Invoke(obj, EmptyObjects); - var countMethod = itype.GetProperty(nameof(ICollection.Count)).GetGetMethod(); - GetCollectionCountFunction = o => (int)countMethod.Invoke(o, null); - var isReadOnly = itype.GetProperty(nameof(ICollection.IsReadOnly)).GetGetMethod(); - IsReadOnlyFunction = obj => (bool)isReadOnly.Invoke(obj, null); - typeSupported = true; - // implements IList - itype = type.GetInterface(typeof(IList<>)); - if (itype != null) - { - var insert = itype.GetMethod(nameof(IList.Insert), new[] { typeof(int), ElementType }); - CollectionInsertFunction = (obj, index, value) => insert.Invoke(obj, new[] { index, value }); - var removeAt = itype.GetMethod(nameof(IList.RemoveAt), new[] { typeof(int) }); - CollectionRemoveAtFunction = (obj, index) => removeAt.Invoke(obj, new object[] { index }); - var getItem = itype.GetMethod("get_Item", new[] { typeof(int) }); - GetIndexedItem = (obj, index) => getItem.Invoke(obj, new object[] { index }); - var setItem = itype.GetMethod("set_Item", new[] { typeof(int), ElementType }); - SetIndexedItem = (obj, index, value) => setItem.Invoke(obj, new[] { index, value }); - HasIndexerAccessors = true; - IsList = true; - } - else - { - // Attempt to retrieve IList<> accessors from ICollection. - var insert = type.GetMethod(nameof(IList.Insert), new[] { typeof(int), ElementType }); - if (insert != null) - CollectionInsertFunction = (obj, index, value) => insert.Invoke(obj, new[] { index, value }); - - var removeAt = type.GetMethod(nameof(IList.RemoveAt), new[] { typeof(int) }); - if (removeAt != null) - CollectionRemoveAtFunction = (obj, index) => removeAt.Invoke(obj, new object[] { index }); - - var getItem = type.GetMethod("get_Item", new[] { typeof(int) }); - if (getItem != null) - GetIndexedItem = (obj, index) => getItem.Invoke(obj, new object[] { index }); - - var setItem = type.GetMethod("set_Item", new[] { typeof(int), ElementType }); - if (setItem != null) - SetIndexedItem = (obj, index, value) => setItem.Invoke(obj, new[] { index, value }); - - HasIndexerAccessors = getItem != null && setItem != null; - } - } - - if (!typeSupported) - { - throw new ArgumentException($"Type [{(type)}] is not supported as a modifiable collection"); - } - } - - public override void Initialize(IComparer keyComparer) + /// true if the specified type is collection; otherwise, false. + public static bool IsCollection(Type type) { - base.Initialize(keyComparer); - - IsPureCollection = Count == 0; + return TypeHelper.IsCollection(type); } - public override DescriptorCategory Category => DescriptorCategory.Collection; - /// /// Gets or sets the type of the element. /// /// The type of the element. - public Type ElementType { get; } + public Type ElementType { get; protected set; } /// /// Gets a value indicating whether this instance is a pure collection (no public property/field) /// /// true if this instance is pure collection; otherwise, false. - public bool IsPureCollection { get; private set; } + public bool IsPureCollection { get; protected set; } /// /// Gets a value indicating whether this collection type has add method. /// /// true if this instance has add; otherwise, false. - public bool HasAdd => CollectionAddFunction != null; + public bool HasAdd { get; protected set; } + + /// + /// Gets a value indicating whether this collection type has Remove method. + /// + /// true if this instance has Remove; otherwise, false. + public bool HasRemove { get; protected set; } /// /// Gets a value indicating whether this collection type has insert method. /// /// true if this instance has insert; otherwise, false. - public bool HasInsert => CollectionInsertFunction != null; + public bool HasInsert { get; protected set; } /// /// Gets a value indicating whether this collection type has RemoveAt method. /// /// true if this instance has RemoveAt; otherwise, false. - public bool HasRemoveAt => CollectionRemoveAtFunction != null; - - /// - /// Gets a value indicating whether this collection type has Remove method. - /// - /// true if this instance has Remove; otherwise, false. - public bool HasRemove => CollectionRemoveFunction != null; + public bool HasRemoveAt { get; protected set; } /// /// Gets a value indicating whether this collection type has valid indexer accessors. /// If so, and can be invoked. /// /// true if this instance has a valid indexer setter; otherwise, false. - public bool HasIndexerAccessors { get; } + public virtual bool HasIndexerAccessors { get; protected set; } /// - /// Gets a value indicating whether this collection implements or . + /// Determines whether the specified collection is read only. /// - public bool IsList { get; } + /// The collection. + /// true if the specified collection is read only; otherwise, false. + public abstract bool IsReadOnly(object collection); /// /// Returns the value matching the given index in the collection. /// - /// The list. + /// The collection. /// The index. - public object GetValue(object list, object index) - { - if (list == null) throw new ArgumentNullException(nameof(list)); - if (!(index is int)) throw new ArgumentException("The index must be an int."); - return GetValue(list, (int)index); - } + public abstract object GetValue(object collection, object index); /// /// Returns the value matching the given index in the collection. /// - /// The list. + /// The collection. /// The index. - public object GetValue(object list, int index) - { - if (list == null) throw new ArgumentNullException(nameof(list)); - return GetIndexedItem(list, index); - } - - public void SetValue(object list, object index, object value) - { - if (list == null) throw new ArgumentNullException(nameof(list)); - if (!(index is int)) throw new ArgumentException("The index must be an int."); - SetValue(list, (int)index, value); - } - - public void SetValue(object list, int index, object value) - { - if (list == null) throw new ArgumentNullException(nameof(list)); - SetIndexedItem(list, index, value); - } + public abstract object GetValue(object collection, int index); - /// - /// Clears the specified collection. - /// - /// The collection. - public void Clear(object collection) - { - CollectionClearFunction(collection); - } + public abstract void SetValue(object list, object index, object value); /// /// Add to the collections of the same type than this descriptor. /// /// The collection. /// The value to add to this collection. - public void Add(object collection, object value) - { - CollectionAddFunction(collection, value); - } + public abstract void Add(object collection, object value); /// /// Insert to the collections of the same type than this descriptor. @@ -235,71 +106,33 @@ public void Add(object collection, object value) /// The collection. /// The index of the insertion. /// The value to insert to this collection. - public void Insert(object collection, int index, object value) - { - CollectionInsertFunction(collection, index, value); - } + public abstract void Insert(object collection, int index, object value); /// - /// Remove item at the given index from the collections of the same type. + /// Removes the item from the collections of the same type. /// /// The collection. - /// The index of the item to remove from this collection. - public void RemoveAt(object collection, int index) - { - CollectionRemoveAtFunction(collection, index); - } + /// + public abstract void Remove(object collection, object item); /// - /// Removes the item from the collections of the same type. + /// Remove item at the given index from the collections of the same type. /// /// The collection. - /// - public void Remove(object collection, object item) - { - CollectionRemoveFunction(collection, item); - } + /// The index of the item to remove from this collection. + public abstract void RemoveAt(object collection, int index); /// - /// Determines whether the specified collection is read only. + /// Clears the specified collection. /// /// The collection. - /// true if the specified collection is read only; otherwise, false. - public bool IsReadOnly(object collection) - { - return collection == null || IsReadOnlyFunction == null || IsReadOnlyFunction(collection); - } + public abstract void Clear(object collection); /// /// Determines the number of elements of a collection, -1 if it cannot determine the number of elements. /// /// The collection. /// The number of elements of a collection, -1 if it cannot determine the number of elements. - public int GetCollectionCount(object collection) - { - return collection == null || GetCollectionCountFunction == null ? -1 : GetCollectionCountFunction(collection); - } - - /// - /// Determines whether the specified type is collection. - /// - /// The type. - /// true if the specified type is collection; otherwise, false. - public static bool IsCollection(Type type) - { - return TypeHelper.IsCollection(type); - } - - protected override bool PrepareMember(MemberDescriptorBase member) - { - // Filter members - if (member is PropertyDescriptor && ListOfMembersToRemove.Contains(member.OriginalName)) - //if (member is PropertyDescriptor && (member.DeclaringType.Namespace ?? string.Empty).StartsWith(SystemCollectionsNamespace) && ListOfMembersToRemove.Contains(member.Name)) - { - return false; - } - - return !IsCompilerGenerated && base.PrepareMember(member); - } + public abstract int GetCollectionCount(object collection); } } diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/DescriptorCategory.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/DescriptorCategory.cs index 8a5a27f25b..1590b7b58f 100644 --- a/sources/core/Xenko.Core.Reflection/TypeDescriptors/DescriptorCategory.cs +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/DescriptorCategory.cs @@ -22,11 +22,21 @@ public enum DescriptorCategory /// Array, + /// + /// A list + /// + List, + /// /// A dictionary /// Dictionary, + /// + /// A set + /// + Set, + /// /// An object /// @@ -37,6 +47,11 @@ public enum DescriptorCategory /// Nullable, + /// + /// A nullable value + /// + NotSupportedObject, + /// /// A custom descriptor. /// diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/DictionaryDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/DictionaryDescriptor.cs index 4a109cded0..acf4bd17cf 100644 --- a/sources/core/Xenko.Core.Reflection/TypeDescriptors/DictionaryDescriptor.cs +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/DictionaryDescriptor.cs @@ -211,6 +211,18 @@ public void Remove(object dictionary, object key) } + /// + /// clear the dictionary + /// + public bool Clear(object dictionary) { + if (dictionary == null) throw new ArgumentNullException(nameof(dictionary)); + var simpleDictionary = dictionary as IDictionary; + if (simpleDictionary != null) { + simpleDictionary.Clear(); + return true; + } else return false; + } + /// /// Indicate whether the dictionary contains the given key /// @@ -280,7 +292,7 @@ public static IEnumerable> GetGenericEnumerable new KeyValuePair(keyValue.Key, keyValue.Value)); } - protected override bool PrepareMember(MemberDescriptorBase member) + protected override bool PrepareMember(MemberDescriptorBase member, MemberInfo metadataClassMemberInfo) { // Filter members if (member is PropertyDescriptor && ListOfMembersToRemove.Contains(member.OriginalName)) @@ -289,7 +301,7 @@ protected override bool PrepareMember(MemberDescriptorBase member) return false; } - return base.PrepareMember(member); + return base.PrepareMember(member, metadataClassMemberInfo); } } } diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/ListDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/ListDescriptor.cs new file mode 100644 index 0000000000..1a024f95a0 --- /dev/null +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/ListDescriptor.cs @@ -0,0 +1,256 @@ +// 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. +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Xenko.Core.Yaml.Serialization; + +namespace Xenko.Core.Reflection +{ + /// + /// Provides a descriptor for a . + /// + public class ListDescriptor : CollectionDescriptor + { + private static readonly object[] EmptyObjects = new object[0]; + private static readonly List ListOfMembersToRemove = new List { "Capacity", "Count", "IsReadOnly", "IsFixedSize", "IsSynchronized", "SyncRoot", "Comparer" }; + + private readonly Func IsReadOnlyFunction; + private readonly Func GetListCountFunction; + private readonly Func GetIndexedItem; + private readonly Action SetIndexedItem; + private readonly Action ListAddFunction; + private readonly Action ListInsertFunction; + private readonly Action ListRemoveAtFunction; + private readonly Action ListRemoveFunction; + private readonly Action ListClearFunction; + + /// + /// Initializes a new instance of the class. + /// + /// The factory. + /// The type. + /// Expecting a type inheriting from System.Collections.IList;type + public ListDescriptor(ITypeDescriptorFactory factory, Type type, bool emitDefaultValues, IMemberNamingConvention namingConvention) + : base(factory, type, emitDefaultValues, namingConvention) + { + if (!IsList(type)) + throw new ArgumentException(@"Expecting a type inheriting from System.Collections.IList", nameof(type)); + + // Gets the element type + ElementType = type.GetInterface(typeof(IEnumerable<>))?.GetGenericArguments()[0] ?? typeof(object); + + // implements IList + if (typeof(IList).IsAssignableFrom(type)) + { + // implements IList + ListAddFunction = (obj, value) => ((IList)obj).Add(value); + ListClearFunction = obj => ((IList)obj).Clear(); + ListInsertFunction = (obj, index, value) => ((IList)obj).Insert(index, value); + ListRemoveAtFunction = (obj, index) => ((IList)obj).RemoveAt(index); + GetListCountFunction = o => ((IList)o).Count; + GetIndexedItem = (obj, index) => ((IList)obj)[index]; + SetIndexedItem = (obj, index, value) => ((IList)obj)[index] = value; + IsReadOnlyFunction = obj => ((IList)obj).IsReadOnly; + } + else // implements IList + { + var add = type.GetMethod(nameof(IList.Add), new[] { ElementType }); + ListAddFunction = (obj, value) => add.Invoke(obj, new[] { value }); + var remove = type.GetMethod(nameof(IList.Remove), new[] { ElementType }); + ListRemoveFunction = (obj, value) => remove.Invoke(obj, new[] { value }); + var clear = type.GetMethod(nameof(IList.Clear), Type.EmptyTypes); + ListClearFunction = obj => clear.Invoke(obj, EmptyObjects); + var countMethod = type.GetProperty(nameof(IList.Count)).GetGetMethod(); + GetListCountFunction = o => (int)countMethod.Invoke(o, null); + var isReadOnly = type.GetInterface(typeof(ICollection<>)).GetProperty(nameof(IList.IsReadOnly)).GetGetMethod(); + IsReadOnlyFunction = obj => (bool)isReadOnly.Invoke(obj, null); + var insert = type.GetMethod(nameof(IList.Insert), new[] { typeof(int), ElementType }); + ListInsertFunction = (obj, index, value) => insert.Invoke(obj, new[] { index, value }); + var removeAt = type.GetMethod(nameof(IList.RemoveAt), new[] { typeof(int) }); + ListRemoveAtFunction = (obj, index) => removeAt.Invoke(obj, new object[] { index }); + var getItem = type.GetMethod("get_Item", new[] { typeof(int) }); + GetIndexedItem = (obj, index) => getItem.Invoke(obj, new object[] { index }); + var setItem = type.GetMethod("set_Item", new[] { typeof(int), ElementType }); + SetIndexedItem = (obj, index, value) => setItem.Invoke(obj, new[] { index, value }); + } + + HasAdd = true; + HasRemove = true; + HasInsert = true; + HasRemoveAt = true; + HasIndexerAccessors = true; + } + + public override void Initialize(IComparer keyComparer) + { + base.Initialize(keyComparer); + + IsPureCollection = Count == 0; + } + + public override DescriptorCategory Category => DescriptorCategory.List; + + /// + /// Determines whether the specified list is read only. + /// + /// The list. + /// true if the specified list is read only; otherwise, false. + public override bool IsReadOnly(object list) + { + return list == null || IsReadOnlyFunction == null || IsReadOnlyFunction(list); + } + + /// + /// Gets a generic enumerator for a list. + /// + /// The list. + /// A generic enumerator. + /// dictionary + public IEnumerable GetEnumerator(object list) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + return ((IEnumerable)list).Cast(); + } + + /// + /// Returns the value matching the given index in the list. + /// + /// The list. + /// The index. + public override object GetValue(object list, object index) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + if (!(index is int)) throw new ArgumentException("The index must be an int."); + return GetValue(list, (int)index); + } + + /// + /// Returns the value matching the given index in the list. + /// + /// The list. + /// The index. + public override object GetValue(object list, int index) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + return GetIndexedItem(list, index); + } + + public override void SetValue(object list, object index, object value) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + if (!(index is int)) throw new ArgumentException("The index must be an int."); + SetValue(list, (int)index, value); + } + + public void SetValue(object list, int index, object value) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + SetIndexedItem(list, index, value); + } + + /// + /// Clears the specified list. + /// + /// The list. + public override void Clear(object list) + { + ListClearFunction(list); + } + + /// + /// Add to the lists of the same type than this descriptor. + /// + /// The list. + /// The value to add to this list. + public override void Add(object list, object value) + { + ListAddFunction(list, value); + } + + /// + /// Insert to the list of the same type than this descriptor. + /// + /// The list. + /// The index of the insertion. + /// The value to insert to this list. + public override void Insert(object list, int index, object value) + { + ListInsertFunction(list, index, value); + } + + /// + /// Removes the item from the lists of the same type. + /// + /// The list. + /// + public override void Remove(object list, object item) + { + ListRemoveFunction(list, item); + } + + /// + /// Remove item at the given index from the lists of the same type. + /// + /// The list. + /// The index of the item to remove from this list. + public override void RemoveAt(object list, int index) + { + ListRemoveAtFunction(list, index); + } + + /// + /// Determines the number of elements of a list, -1 if it cannot determine the number of elements. + /// + /// The list. + /// The number of elements of a list, -1 if it cannot determine the number of elements. + public override int GetCollectionCount(object List) + { + return List == null || GetListCountFunction == null ? -1 : GetListCountFunction(List); + } + + /// + /// Determines whether the specified type is a .NET list. + /// + /// The type. + /// true if the specified type is list; otherwise, false. + public static bool IsList(Type type) + { + if (type == null) throw new ArgumentNullException(nameof(type)); + var typeInfo = type.GetTypeInfo(); + if (typeInfo.IsArray) + { + return false; + } + + if (typeof(IList).GetTypeInfo().IsAssignableFrom(typeInfo)) + { + return true; + } + + foreach (var iType in typeInfo.ImplementedInterfaces) + { + var iTypeInfo = iType.GetTypeInfo(); + if (iTypeInfo.IsGenericType && iTypeInfo.GetGenericTypeDefinition() == typeof(IList<>)) + { + return true; + } + } + + return false; + } + + protected override bool PrepareMember(MemberDescriptorBase member, MemberInfo metadataClassMemberInfo) + { + // Filter members + if (member is PropertyDescriptor && ListOfMembersToRemove.Contains(member.OriginalName)) + { + return false; + } + + return !IsCompilerGenerated && base.PrepareMember(member, metadataClassMemberInfo); + } + } +} diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/NotSupportedObjectDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/NotSupportedObjectDescriptor.cs new file mode 100644 index 0000000000..b8b6cd3746 --- /dev/null +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/NotSupportedObjectDescriptor.cs @@ -0,0 +1,27 @@ +// 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. +using System; +using Xenko.Core.Yaml.Serialization; + +namespace Xenko.Core.Reflection +{ + /// + /// Describes a descriptor for an unsupported object type. + /// This will be treated as an + /// + public class NotSupportedObjectDescriptor : ObjectDescriptor + { + /// + /// Initializes a new instance of the class. + /// + /// The factory. + /// The type. + /// Type [{0}] is not a primitive + public NotSupportedObjectDescriptor(ITypeDescriptorFactory factory, Type type, bool emitDefaultValues, IMemberNamingConvention namingConvention) + : base(factory, type, emitDefaultValues, namingConvention) + { + } + + public override DescriptorCategory Category => DescriptorCategory.NotSupportedObject; + } +} diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/ObjectDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/ObjectDescriptor.cs index bfe246378b..b688a6c133 100644 --- a/sources/core/Xenko.Core.Reflection/TypeDescriptors/ObjectDescriptor.cs +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/ObjectDescriptor.cs @@ -17,7 +17,7 @@ namespace Xenko.Core.Reflection public class ObjectDescriptor : ITypeDescriptor { protected static readonly string SystemCollectionsNamespace = typeof(int).Namespace; - public static readonly Func ShouldSerializeDefault = o => true; + public static readonly ShouldSerializePredicate ShouldSerializeDefault = (obj, parentTypeMemberDesc) => true; private static readonly List EmptyMembers = new List(); private readonly ITypeDescriptorFactory factory; @@ -136,7 +136,7 @@ public virtual void Initialize(IComparer keyComparer) var memberList = PrepareMembers(); // Sort members by name - // This is to make sure that properties/fields for an object + // This is to make sure that properties/fields for an object // are always displayed in the same order if (keyComparer != null) { @@ -196,6 +196,22 @@ protected virtual List PrepareMembers() } var bindingFlags = BindingFlags.Instance | BindingFlags.Public; + + var metadataTypeAttributes = Type.GetCustomAttributes(inherit: true); + var metadataClassMemberInfos = metadataTypeAttributes.Any() ? new List<(MemberInfo MemberInfo, Type MemberType)>() : null; + foreach (var metadataTypeAttr in metadataTypeAttributes) + { + var metadataType = metadataTypeAttr.MetadataClassType; + metadataClassMemberInfos.AddRange(from propertyInfo in metadataType.GetProperties(bindingFlags) + where propertyInfo.CanRead && propertyInfo.GetIndexParameters().Length == 0 && IsMemberToVisit(propertyInfo) + select (propertyInfo as MemberInfo, propertyInfo.PropertyType)); + + // Add all public fields + metadataClassMemberInfos.AddRange(from fieldInfo in metadataType.GetFields(bindingFlags) + where fieldInfo.IsPublic && IsMemberToVisit(fieldInfo) + select (fieldInfo as MemberInfo, fieldInfo.FieldType)); + } + // TODO: we might want an option to disable non-public. if (Category == DescriptorCategory.Object) bindingFlags |= BindingFlags.NonPublic; @@ -204,15 +220,15 @@ protected virtual List PrepareMembers() where propertyInfo.CanRead && propertyInfo.GetIndexParameters().Length == 0 && IsMemberToVisit(propertyInfo) select new PropertyDescriptor(factory.Find(propertyInfo.PropertyType), propertyInfo, NamingConvention.Comparer) into member - where PrepareMember(member) - select member).Cast().ToList(); + where PrepareMember(member, metadataClassMemberInfos?.FirstOrDefault(x => x.MemberInfo.Name == member.OriginalName && x.MemberType == member.Type).MemberInfo) + select member as IMemberDescriptor).ToList(); // Add all public fields memberList.AddRange(from fieldInfo in Type.GetFields(bindingFlags) where fieldInfo.IsPublic && IsMemberToVisit(fieldInfo) select new FieldDescriptor(factory.Find(fieldInfo.FieldType), fieldInfo, NamingConvention.Comparer) into member - where PrepareMember(member) + where PrepareMember(member, metadataClassMemberInfos?.FirstOrDefault(x => x.MemberInfo.Name == member.OriginalName && x.MemberType == member.Type).MemberInfo) select member); // Allows adding dynamic members per type @@ -221,7 +237,7 @@ where PrepareMember(member) return memberList; } - protected virtual bool PrepareMember(MemberDescriptorBase member) + protected virtual bool PrepareMember(MemberDescriptorBase member, MemberInfo metadataClassMemberInfo) { var memberType = member.Type; @@ -229,9 +245,15 @@ protected virtual bool PrepareMember(MemberDescriptorBase member) member.Mode = DefaultMemberMode; member.Mask = 1; + var attributes = AttributeRegistry.GetAttributes(member.MemberInfo); + if (metadataClassMemberInfo != null) + { + var metadataAttributes = AttributeRegistry.GetAttributes(metadataClassMemberInfo); + attributes.InsertRange(0, metadataAttributes); + } // Gets the style - var styleAttribute = AttributeRegistry.GetAttribute(member.MemberInfo); + var styleAttribute = attributes.FirstOrDefault(x => x is DataStyleAttribute) as DataStyleAttribute; if (styleAttribute != null) { member.Style = styleAttribute.Style; @@ -239,7 +261,7 @@ protected virtual bool PrepareMember(MemberDescriptorBase member) } // Handle member attribute - var memberAttribute = AttributeRegistry.GetAttribute(member.MemberInfo); + var memberAttribute = attributes.FirstOrDefault(x => x is DataMemberAttribute) as DataMemberAttribute; if (memberAttribute != null) { ((IMemberDescriptor)member).Mask = memberAttribute.Mask; @@ -267,14 +289,14 @@ protected virtual bool PrepareMember(MemberDescriptorBase member) } // Process all attributes just once instead of getting them one by one - var attributes = AttributeRegistry.GetAttributes(member.MemberInfo); DefaultValueAttribute defaultValueAttribute = null; foreach (var attribute in attributes) { var valueAttribute = attribute as DefaultValueAttribute; if (valueAttribute != null) { - defaultValueAttribute = valueAttribute; + // If we've already found one, don't overwrite it + defaultValueAttribute = defaultValueAttribute ?? valueAttribute; continue; } @@ -292,7 +314,6 @@ protected virtual bool PrepareMember(MemberDescriptorBase member) } } - // If it's a private member, check it has a YamlMemberAttribute on it if (!member.IsPublic) { @@ -321,10 +342,11 @@ protected virtual bool PrepareMember(MemberDescriptorBase member) // otherwise => true var shouldSerialize = Type.GetMethod("ShouldSerialize" + member.OriginalName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (shouldSerialize != null && shouldSerialize.ReturnType == typeof(bool) && member.ShouldSerialize == null) - member.ShouldSerialize = obj => (bool)shouldSerialize.Invoke(obj, EmptyObjectArray); + member.ShouldSerialize = (obj, parentTypeMemberDesc) => (bool)shouldSerialize.Invoke(obj, EmptyObjectArray); if (defaultValueAttribute != null && member.ShouldSerialize == null && !emitDefaultValues) { + member.DefaultValueAttribute = defaultValueAttribute; object defaultValue = defaultValueAttribute.Value; Type defaultType = defaultValue?.GetType(); if (defaultType != null && defaultType.IsNumeric() && defaultType != memberType) @@ -337,7 +359,20 @@ protected virtual bool PrepareMember(MemberDescriptorBase member) { } } - member.ShouldSerialize = obj => !Equals(defaultValue, member.Get(obj)); + member.ShouldSerialize = (obj, parentTypeMemberDesc) => + { + if (parentTypeMemberDesc?.HasDefaultValue ?? false) + { + var parentDefaultValue = parentTypeMemberDesc.DefaultValue; + if (parentDefaultValue != null) + { + // The parent class holding this object type has defined it's own default value for this type + var parentDefaultValueMemberValue = member.Get(parentDefaultValue); // This is the real default value for this object + return !Equals(parentDefaultValueMemberValue, member.Get(obj)); + } + } + return !Equals(defaultValue, member.Get(obj)); + }; } if (member.ShouldSerialize == null) diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/OldCollectionDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/OldCollectionDescriptor.cs new file mode 100644 index 0000000000..80e0318a6b --- /dev/null +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/OldCollectionDescriptor.cs @@ -0,0 +1,268 @@ +// 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; +using System.Collections.Generic; +using System.Reflection; +using Xenko.Core.Yaml.Serialization; + +namespace Xenko.Core.Reflection +{ + /// + /// The old descriptor, kept here to avoid compatibility error. + /// Provides a descriptor for a . + /// + [Obsolete("This class is kept for compatibility, shouldn't be used in new feathers")] + public class OldCollectionDescriptor : CollectionDescriptor + { + private static readonly object[] EmptyObjects = new object[0]; + private static readonly List ListOfMembersToRemove = new List { "Capacity", "Count", "IsReadOnly", "IsFixedSize", "IsSynchronized", "SyncRoot", "Comparer" }; + + private readonly Func IsReadOnlyFunction; + private readonly Func GetCollectionCountFunction; + private readonly Func GetIndexedItem; + private readonly Action SetIndexedItem; + private readonly Action CollectionAddFunction; + private readonly Action CollectionInsertFunction; + private readonly Action CollectionRemoveAtFunction; + private readonly Action CollectionRemoveFunction; + private readonly Action CollectionClearFunction; + + /// + /// Initializes a new instance of the class. + /// + /// The factory. + /// The type. + /// Expecting a type inheriting from System.Collections.ICollection;type + public OldCollectionDescriptor(ITypeDescriptorFactory factory, Type type, bool emitDefaultValues, IMemberNamingConvention namingConvention) + : base(factory, type, emitDefaultValues, namingConvention) + { + // Gets the element type + ElementType = type.GetInterface(typeof(IEnumerable<>))?.GetGenericArguments()[0] ?? typeof(object); + + // implements IList + if (typeof(IList).IsAssignableFrom(type)) + { + CollectionAddFunction = (obj, value) => ((IList)obj).Add(value); + CollectionClearFunction = obj => ((IList)obj).Clear(); + CollectionInsertFunction = (obj, index, value) => ((IList)obj).Insert(index, value); + CollectionRemoveAtFunction = (obj, index) => ((IList)obj).RemoveAt(index); + GetCollectionCountFunction = o => ((IList)o).Count; + GetIndexedItem = (obj, index) => ((IList)obj)[index]; + SetIndexedItem = (obj, index, value) => ((IList)obj)[index] = value; + IsReadOnlyFunction = obj => ((IList)obj).IsReadOnly; + HasIndexerAccessors = true; + IsList = true; + } + else if (type.GetInterface(typeof(ICollection<>)) is Type itype)// implements ICollection + { + var add = itype.GetMethod(nameof(ICollection.Add), new[] { ElementType }); + CollectionAddFunction = (obj, value) => add.Invoke(obj, new[] { value }); + var remove = itype.GetMethod(nameof(ICollection.Remove), new[] { ElementType }); + CollectionRemoveFunction = (obj, value) => remove.Invoke(obj, new[] { value }); + if (typeof(IDictionary).IsAssignableFrom(type)) + { + CollectionClearFunction = obj => ((IDictionary)obj).Clear(); + GetCollectionCountFunction = o => ((IDictionary)o).Count; + IsReadOnlyFunction = obj => ((IDictionary)obj).IsReadOnly; + } + else + { + var clear = itype.GetMethod(nameof(ICollection.Clear), Type.EmptyTypes); + CollectionClearFunction = obj => clear.Invoke(obj, EmptyObjects); + var countMethod = itype.GetProperty(nameof(ICollection.Count)).GetGetMethod(); + GetCollectionCountFunction = o => (int)countMethod.Invoke(o, null); + var isReadOnly = itype.GetProperty(nameof(ICollection.IsReadOnly)).GetGetMethod(); + IsReadOnlyFunction = obj => (bool)isReadOnly.Invoke(obj, null); + } + // implements IList + itype = type.GetInterface(typeof(IList<>)); + if (itype != null) + { + var insert = itype.GetMethod(nameof(IList.Insert), new[] { typeof(int), ElementType }); + CollectionInsertFunction = (obj, index, value) => insert.Invoke(obj, new[] { index, value }); + var removeAt = itype.GetMethod(nameof(IList.RemoveAt), new[] { typeof(int) }); + CollectionRemoveAtFunction = (obj, index) => removeAt.Invoke(obj, new object[] { index }); + var getItem = itype.GetMethod("get_Item", new[] { typeof(int) }); + GetIndexedItem = (obj, index) => getItem.Invoke(obj, new object[] { index }); + var setItem = itype.GetMethod("set_Item", new[] { typeof(int), ElementType }); + SetIndexedItem = (obj, index, value) => setItem.Invoke(obj, new[] { index, value }); + HasIndexerAccessors = true; + IsList = true; + } + else + { + // Attempt to retrieve IList<> accessors from ICollection. + var insert = type.GetMethod(nameof(IList.Insert), new[] { typeof(int), ElementType }); + if (insert != null) + CollectionInsertFunction = (obj, index, value) => insert.Invoke(obj, new[] { index, value }); + + var removeAt = type.GetMethod(nameof(IList.RemoveAt), new[] { typeof(int) }); + if (removeAt != null) + CollectionRemoveAtFunction = (obj, index) => removeAt.Invoke(obj, new object[] { index }); + + var getItem = type.GetMethod("get_Item", new[] { typeof(int) }); + if (getItem != null) + GetIndexedItem = (obj, index) => getItem.Invoke(obj, new object[] { index }); + + var setItem = type.GetMethod("set_Item", new[] { typeof(int), ElementType }); + if (setItem != null) + SetIndexedItem = (obj, index, value) => setItem.Invoke(obj, new[] { index, value }); + + HasIndexerAccessors = getItem != null && setItem != null; + } + } + else + { + throw new ArgumentException($"Type [{(type)}] is not supported as a modifiable collection"); + } + + HasAdd = CollectionAddFunction != null; + HasRemove = CollectionRemoveFunction != null; + HasInsert = CollectionInsertFunction != null; + HasRemoveAt = CollectionRemoveAtFunction != null; + } + + public override void Initialize(IComparer keyComparer) + { + base.Initialize(keyComparer); + + IsPureCollection = Count == 0; + } + + public override DescriptorCategory Category => DescriptorCategory.Collection; + + /// + /// Gets a value indicating whether this collection implements or . + /// + public bool IsList { get; } + + /// + /// Returns the value matching the given index in the collection. + /// + /// The list. + /// The index. + public override object GetValue(object list, object index) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + if (!(index is int)) throw new ArgumentException("The index must be an int."); + return GetValue(list, (int)index); + } + + /// + /// Returns the value matching the given index in the collection. + /// + /// The list. + /// The index. + public override object GetValue(object list, int index) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + return GetIndexedItem(list, index); + } + + public override void SetValue(object list, object index, object value) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + if (!(index is int)) throw new ArgumentException("The index must be an int."); + SetValue(list, (int)index, value); + } + + public void SetValue(object list, int index, object value) + { + if (list == null) throw new ArgumentNullException(nameof(list)); + SetIndexedItem(list, index, value); + } + + /// + /// Clears the specified collection. + /// + /// The collection. + public override void Clear(object collection) + { + CollectionClearFunction(collection); + } + + /// + /// Add to the collections of the same type than this descriptor. + /// + /// The collection. + /// The value to add to this collection. + public override void Add(object collection, object value) + { + CollectionAddFunction(collection, value); + } + + /// + /// Insert to the collections of the same type than this descriptor. + /// + /// The collection. + /// The index of the insertion. + /// The value to insert to this collection. + public override void Insert(object collection, int index, object value) + { + CollectionInsertFunction(collection, index, value); + } + + /// + /// Remove item at the given index from the collections of the same type. + /// + /// The collection. + /// The index of the item to remove from this collection. + public override void RemoveAt(object collection, int index) + { + CollectionRemoveAtFunction(collection, index); + } + + /// + /// Removes the item from the collections of the same type. + /// + /// The collection. + /// + public override void Remove(object collection, object item) + { + CollectionRemoveFunction(collection, item); + } + + /// + /// Determines whether the specified collection is read only. + /// + /// The collection. + /// true if the specified collection is read only; otherwise, false. + public override bool IsReadOnly(object collection) + { + return collection == null || IsReadOnlyFunction == null || IsReadOnlyFunction(collection); + } + + /// + /// Determines the number of elements of a collection, -1 if it cannot determine the number of elements. + /// + /// The collection. + /// The number of elements of a collection, -1 if it cannot determine the number of elements. + public override int GetCollectionCount(object collection) + { + return collection == null || GetCollectionCountFunction == null ? -1 : GetCollectionCountFunction(collection); + } + + /// + /// Determines whether the specified type is collection. + /// + /// The type. + /// true if the specified type is collection; otherwise, false. + public static bool IsCollection(Type type) + { + return TypeHelper.IsCollection(type); + } + + protected override bool PrepareMember(MemberDescriptorBase member, MemberInfo metadataClassMemberInfo) + { + // Filter members + if (member is PropertyDescriptor && ListOfMembersToRemove.Contains(member.OriginalName)) + //if (member is PropertyDescriptor && (member.DeclaringType.Namespace ?? string.Empty).StartsWith(SystemCollectionsNamespace) && ListOfMembersToRemove.Contains(member.Name)) + { + return false; + } + + return !IsCompilerGenerated && base.PrepareMember(member, metadataClassMemberInfo); + } + } +} diff --git a/sources/core/Xenko.Core.Reflection/TypeDescriptors/SetDescriptor.cs b/sources/core/Xenko.Core.Reflection/TypeDescriptors/SetDescriptor.cs new file mode 100644 index 0000000000..75c38a32c1 --- /dev/null +++ b/sources/core/Xenko.Core.Reflection/TypeDescriptors/SetDescriptor.cs @@ -0,0 +1,265 @@ +// 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. +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Xenko.Core.Yaml.Serialization; + +namespace Xenko.Core.Reflection +{ + public class SetDescriptor : CollectionDescriptor + { + private static readonly List ListOfMembersToRemove = new List { "Comparer", "Capacity" }; + + private readonly MethodInfo addMethod; + private readonly MethodInfo removeMethod; + private readonly MethodInfo clearMethod; + private readonly MethodInfo containsMethod; + private readonly MethodInfo countMethod; + private readonly MethodInfo isReadOnlyMethod; + + public SetDescriptor(ITypeDescriptorFactory factory, Type type, bool emitDefaultValues, IMemberNamingConvention namingConvention) + : base(factory, type, emitDefaultValues, namingConvention) + { + if (!IsSet(type)) + throw new ArgumentException(@"Expecting a type inheriting from System.Collections.ISet", nameof(type)); + + // extract Key, Value types from ISet + var interfaceType = type.GetInterface(typeof(ISet<>)); + + // Gets the element type + ElementType = interfaceType.GetGenericArguments()[0] ?? typeof(object); + + Type[] ArgTypes = { ElementType }; + addMethod = interfaceType.GetMethod("Add", ArgTypes); + removeMethod = type.GetMethod("Remove", ArgTypes); + clearMethod = interfaceType.GetMethod("Clear"); + containsMethod = type.GetMethod("Contains", ArgTypes); + countMethod = type.GetProperty("Count").GetGetMethod(); + isReadOnlyMethod = type.GetInterface(typeof(ICollection<>)).GetProperty("IsReadOnly").GetGetMethod(); + + HasAdd = true; + HasRemove = true; + HasIndexerAccessors = true; + HasInsert = false; + HasRemoveAt = false; + } + + public override void Initialize(IComparer keyComparer) + { + base.Initialize(keyComparer); + + // Only Keys and Values + IsPureCollection = Count == 0; + } + + public override DescriptorCategory Category => DescriptorCategory.Set; + + /// + /// Gets a value indicating whether this instance is generic set. + /// + /// true if this instance is generic set; otherwise, false. + public bool IsGenericSet { get; } + + /// + /// Determines whether the value passed is readonly. + /// + /// The this object. + /// true if [is read only] [the specified this object]; otherwise, false. + public override bool IsReadOnly(object thisObject) + { + return thisObject == null || isReadOnlyMethod == null || (bool)isReadOnlyMethod.Invoke(thisObject, null); + } + + /// + /// Adds a value to a set. + /// + /// The set. + /// The item. + /// No Add() method found on set [{0}].ToFormat(Type) + public override void Add(object set, object item) + { + if (set == null) throw new ArgumentNullException(nameof(set)); + var simpleSet = set as ISet; + if (simpleSet != null) + { + simpleSet.Add(item); + } + else + { + // Only throw an exception if the addMethod is not accessible when adding to a set + if (addMethod == null) + { + throw new InvalidOperationException("No Add() method found on set [{0}]".ToFormat(Type)); + } + addMethod.Invoke(set, new[] { item }); + } + } + + public override void Insert(object set, int index, object value) + { + throw new InvalidOperationException("SetDescriptor should not call function 'Insert'."); + } + + /// + /// Remove a value from a set + /// + /// The set. + /// The key. + public override void Remove(object set, object key) + { + if (set == null) throw new ArgumentNullException(nameof(set)); + var simpleSet = set as ISet; + if (simpleSet != null) + { + simpleSet.Remove(key); + } + else + { + // Only throw an exception if the addMethod is not accessible when adding to a set + if (removeMethod == null) + { + throw new InvalidOperationException("No Remove() method found on set [{0}]".ToFormat(Type)); + } + removeMethod.Invoke(set, new[] { key }); + } + + } + + public override void RemoveAt(object set, int index) + { + throw new InvalidOperationException("SetDescriptor should not call function 'RemoveAt'."); + } + + /// + /// Clears the specified set. + /// + /// The set. + public override void Clear(object set) + { + clearMethod.Invoke(set, null); + } + + /// + /// Indicate whether the set contains the given value + /// + /// The set. + /// The value. + public bool Contains(object set, object value) + { + if (set == null) throw new ArgumentNullException(nameof(set)); + var simpleSet = set as ISet; + if (simpleSet != null) + { + return simpleSet.Contains(value); + } + if (containsMethod == null) + { + throw new InvalidOperationException("No Contains() method found on set [{0}]".ToFormat(Type)); + } + return (bool)containsMethod.Invoke(set, new[] { value }); + } + + /// + /// Determines the number of elements of a count, -1 if it cannot determine the number of elements. + /// + /// The set. + /// The number of elements of a set, -1 if it cannot determine the number of elements. + public override int GetCollectionCount(object set) + { + return set == null || countMethod == null ? -1 : (int)countMethod.Invoke(set, null); + } + + /// + /// Get set value by index + /// + /// The set. + /// Index of value. + /// + public override object GetValue(object set, object index) + { + return Contains(set, index) ? index : null; + } + + /// + /// Returns the value matching the given index in the set. + /// + /// The set. + /// The index. + public override object GetValue(object set, int index) + { + throw new InvalidOperationException("SetDescriptor should not call function 'GetValue' with int index parameter."); + } + + /// + /// Set the set value by index + /// + /// The set. + /// Index of value. + /// + public override void SetValue(object set, object index, object value) + { + if (set == null) throw new ArgumentNullException(nameof(set)); + var simpleSet = set as ISet; + if (simpleSet != null) + { + if (simpleSet.Contains(index)) + { + simpleSet.Remove(index); + } + if (!simpleSet.Contains(value)) + { + simpleSet.Add(value); + } + } + else if (containsMethod != null && addMethod != null && removeMethod != null) + { + object[] indexParam = new[] { index }; + object[] valueParam = new[] { value }; + if ((bool)containsMethod.Invoke(set, indexParam)) + { + removeMethod.Invoke(set, indexParam); + } + if (!(bool)containsMethod.Invoke(set, valueParam)) + { + addMethod.Invoke(set, valueParam); + } + } + } + + /// + /// Determines whether the specified type is a .NET set. + /// + /// The type. + /// true if the specified type is set; otherwise, false. + public static bool IsSet(Type type) + { + if (type == null) throw new ArgumentNullException(nameof(type)); + var typeInfo = type.GetTypeInfo(); + + foreach (var iType in typeInfo.ImplementedInterfaces) + { + var iTypeInfo = iType.GetTypeInfo(); + if (iTypeInfo.IsGenericType && iTypeInfo.GetGenericTypeDefinition() == typeof(ISet<>)) + { + return true; + } + } + + return false; + } + + protected override bool PrepareMember(MemberDescriptorBase member, MemberInfo metadataClassMemberInfo) + { + // Filter members + if (member is PropertyDescriptor && ListOfMembersToRemove.Contains(member.OriginalName)) + { + return false; + } + + return base.PrepareMember(member, metadataClassMemberInfo); + } + } +} diff --git a/sources/core/Xenko.Core.Reflection/Xenko.Core.Reflection.csproj b/sources/core/Xenko.Core.Reflection/Xenko.Core.Reflection.csproj index 65e4aa0b80..9aad5f71df 100644 --- a/sources/core/Xenko.Core.Reflection/Xenko.Core.Reflection.csproj +++ b/sources/core/Xenko.Core.Reflection/Xenko.Core.Reflection.csproj @@ -1,6 +1,5 @@ - true true true diff --git a/sources/core/Xenko.Core.Serialization/Assets/AssetId.cs b/sources/core/Xenko.Core.Serialization/Assets/AssetId.cs index 5fab5b80fd..f71c23b092 100644 --- a/sources/core/Xenko.Core.Serialization/Assets/AssetId.cs +++ b/sources/core/Xenko.Core.Serialization/Assets/AssetId.cs @@ -71,8 +71,7 @@ public bool Equals(AssetId other) /// public override bool Equals(object obj) { - if (ReferenceEquals(null, obj)) return false; - return obj is AssetId && Equals((AssetId)obj); + return obj is AssetId id && Equals(id); } /// diff --git a/sources/core/Xenko.Core.Serialization/Serialization/AttachedReferenceManager.cs b/sources/core/Xenko.Core.Serialization/Serialization/AttachedReferenceManager.cs index 157a13c722..4f588d766f 100644 --- a/sources/core/Xenko.Core.Serialization/Serialization/AttachedReferenceManager.cs +++ b/sources/core/Xenko.Core.Serialization/Serialization/AttachedReferenceManager.cs @@ -85,10 +85,8 @@ public static AttachedReference GetOrCreateAttachedReference(object obj) public static T CreateProxyObject(AssetId id, string location) where T : class, new() { var result = new T(); - var attachedReference = GetOrCreateAttachedReference(result); - attachedReference.Id = id; - attachedReference.Url = location; - attachedReference.IsProxy = true; + InitializeProxyObject(result, id, location); + return result; } @@ -121,11 +119,15 @@ public static object CreateProxyObject(Type type, AssetId id, string location) } } var result = emptyCtor.Invoke(EmptyObjectArray); - var attachedReference = GetOrCreateAttachedReference(result); + InitializeProxyObject(result, id, location); + return result; + } + private static void InitializeProxyObject(object proxyObject, AssetId id, string location) + { + var attachedReference = GetOrCreateAttachedReference(proxyObject); attachedReference.Id = id; attachedReference.Url = location; attachedReference.IsProxy = true; - return result; } } } diff --git a/sources/core/Xenko.Core.Serialization/Serialization/Contents/ContentManager.cs b/sources/core/Xenko.Core.Serialization/Serialization/Contents/ContentManager.cs index c8b15dc925..f68c58c24f 100644 --- a/sources/core/Xenko.Core.Serialization/Serialization/Contents/ContentManager.cs +++ b/sources/core/Xenko.Core.Serialization/Serialization/Contents/ContentManager.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using System.IO; using System.Reflection; +using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Xenko.Core.Diagnostics; @@ -15,6 +16,8 @@ using Xenko.Core.Storage; using Xenko.Core.Streaming; +[assembly: InternalsVisibleToAttribute("Xenko.Graphics")] + namespace Xenko.Core.Serialization.Contents { /// @@ -26,6 +29,9 @@ public sealed partial class ContentManager : IContentManager public DatabaseFileProvider FileProvider => databaseFileProvider.FileProvider; + internal static readonly HashSet _captureModelBuffers = new HashSet(); + internal static bool _captureThisModel; + private readonly IDatabaseFileProviderService databaseFileProvider; private readonly IServiceRegistry services; @@ -113,6 +119,21 @@ public T Load(string url, ContentManagerLoaderSettings settings = null) where return (T)Load(typeof(T), url, settings); } + private Dictionary QuickLoadedAssets = new Dictionary(); + + /// + /// Loads an asset, but also caches the object for quick reuse. + /// + public T QuickLoad(string url) + { + if (QuickLoadedAssets.TryGetValue(url, out var a)) + return (T)a; + + T asset = (T)Load(typeof(T), url, null); + QuickLoadedAssets[url] = asset; + return asset; + } + /// /// Loads content from the specified URL. /// @@ -232,7 +253,7 @@ private static Task ScheduleAsync(Func action) /// The URL of the asset to retrieve. /// The loaded asset, or null if the asset has not been loaded. /// This function does not increase the reference count on the asset. - public T Get(string url) + public T Get(string url) where T : class { return (T)Get(typeof(T), url); } @@ -250,7 +271,7 @@ public object Get(Type type, string url) } /// - /// Gets or sets whether an asset with the given URL is currently loaded. + /// Gets whether an asset with the given URL is currently loaded. /// /// The URL to check. /// If true, this method will return true only if an asset with the given URL has been manually loaded via , and not if the asset has been only loaded indirectly from another asset. @@ -324,6 +345,25 @@ public ContentManagerStats GetStats() return new ContentManagerStats(LoadedAssetUrls.Values); } + /// + /// Request the ref counts for a specific asset url. + /// + public void GetReferenceCounts(string url, out bool exists, out int publicRefCount, out int privateRefCount) + { + if (LoadedAssetUrls.TryGetValue(url, out var reference)) + { + exists = true; + publicRefCount = reference.PublicReferenceCount; + privateRefCount = reference.PrivateReferenceCount; + } + else + { + exists = false; + publicRefCount = 0; + privateRefCount = 0; + } + } + private void PrepareSerializerContext(ContentSerializerContext contentSerializerContext, SerializerContext context) { context.Set(ContentSerializerContext.ContentSerializerContextProperty, contentSerializerContext); @@ -452,6 +492,42 @@ internal ChunkHeader ReadChunkHeader(string url) } } + /// + /// Get all of the asset URLs + /// + /// Base URL to search, defaults to root + /// Search string to search, defaults to wildcard * + /// Search all directiories or just the base one? + /// Shaders usually fill up a bunch of these urls. This defaults to skipping them in result + /// Exclude the auto-generated _Data entries? + /// Array of strings containing all URLs found in the content manager + public string[] AllURLs(string baseURL = "", string searchString = "*", VirtualSearchOption searchOption = VirtualSearchOption.AllDirectories, bool excludeShaders = true, bool excludeData = true) + { + var files = FileProvider.ListFiles(baseURL, searchString, searchOption); + + if (excludeShaders == false && excludeData == false) return files; + + int entriesRemoved = 0; + for (int i=0; i 0) + Array.Resize(ref files, files.Length - entriesRemoved); + + return files; + } + private object DeserializeObject(Queue serializeOperations, Reference parentReference, string url, Type objType, object obj, ContentManagerLoaderSettings settings) { // Try to find already loaded object @@ -539,8 +615,12 @@ private object DeserializeObject(Queue serializeOperations PrepareSerializerContext(contentSerializerContext, streamReader.Context); + _captureThisModel = _captureModelBuffers?.Contains(url) ?? false; + contentSerializerContext.SerializeContent(streamReader, serializer, result); + _captureThisModel = false; + // Add reference parentReference?.References.Add(reference); } diff --git a/sources/core/Xenko.Core.Serialization/Serialization/Contents/IContentManager.cs b/sources/core/Xenko.Core.Serialization/Serialization/Contents/IContentManager.cs index d8c854d5c3..bc3686348d 100644 --- a/sources/core/Xenko.Core.Serialization/Serialization/Contents/IContentManager.cs +++ b/sources/core/Xenko.Core.Serialization/Serialization/Contents/IContentManager.cs @@ -45,12 +45,35 @@ public interface IContentManager /// Task LoadAsync(string url, ContentManagerLoaderSettings settings = null) where T : class; + /// + /// Gets a previously loaded asset from its URL. + /// + /// The type of asset to retrieve. + /// The URL of the asset to retrieve. + /// The loaded asset, or null if the asset has not been loaded. + /// This function does not increase the reference count on the asset. + T Get(string url) where T : class; + + /// + /// Gets whether an asset with the given URL is currently loaded. + /// + /// The URL to check. + /// If true, this method will return true only if an asset with the given URL has been manually loaded via , and not if the asset has been only loaded indirectly from another asset. + /// True if an asset with the given URL is currently loaded, false otherwise. + bool IsLoaded(string url, bool loadedManuallyOnly = false); + /// /// Unloads the specified object. /// /// The object to unload. void Unload(object obj); + /// + /// Unloads the asset at the specified URL. + /// + /// The URL. + void Unload(string url); + /// /// Gets the serializer. /// diff --git a/sources/core/Xenko.Core.Serialization/Serialization/Contents/ReferenceSerializer.cs b/sources/core/Xenko.Core.Serialization/Serialization/Contents/ReferenceSerializer.cs index 55d803064f..10309a4512 100644 --- a/sources/core/Xenko.Core.Serialization/Serialization/Contents/ReferenceSerializer.cs +++ b/sources/core/Xenko.Core.Serialization/Serialization/Contents/ReferenceSerializer.cs @@ -129,7 +129,7 @@ public override void Serialize(ref T obj, ArchiveMode mode, SerializationStream else { // No real case yet - throw new NotSupportedException(); + //throw new NotSupportedException(); } } } diff --git a/sources/core/Xenko.Core.Serialization/Serialization/IUrlReference.cs b/sources/core/Xenko.Core.Serialization/Serialization/IUrlReference.cs new file mode 100644 index 0000000000..ca7042180c --- /dev/null +++ b/sources/core/Xenko.Core.Serialization/Serialization/IUrlReference.cs @@ -0,0 +1,18 @@ +namespace Xenko.Core.Serialization +{ + /// + /// Represents a Url to an asset. + /// + public interface IUrlReference + { + // + /// Gets the Url of the referenced asset. + /// + string Url { get; } + + /// + /// Gets whether the is null or empty. + /// + bool IsEmpty { get; } + } +} diff --git a/sources/core/Xenko.Core.Serialization/Serialization/Serializers/UrlReferenceDataSerializer.cs b/sources/core/Xenko.Core.Serialization/Serialization/Serializers/UrlReferenceDataSerializer.cs new file mode 100644 index 0000000000..ec5a73616d --- /dev/null +++ b/sources/core/Xenko.Core.Serialization/Serialization/Serializers/UrlReferenceDataSerializer.cs @@ -0,0 +1,56 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using Xenko.Core.Annotations; +using Xenko.Core.Assets; + +namespace Xenko.Core.Serialization.Serializers +{ + /// + /// Serializer base class for for . + /// + public abstract class UrlReferenceDataSerializerBase : DataSerializer + where T: IUrlReference + { + /// + public override void Serialize(ref T urlReference, ArchiveMode mode, [NotNull] SerializationStream stream) + { + if (mode == ArchiveMode.Serialize) + { + var attachedReference = AttachedReferenceManager.GetAttachedReference(urlReference); + if(attachedReference == null) + { + throw new InvalidOperationException("UrlReference does not have an AttachedReference."); + } + + stream.Write(attachedReference.Id); + stream.Write(attachedReference.Url); + } + else + { + var id = stream.Read(); + var url = stream.ReadString(); + + urlReference = (T)UrlReferenceHelper.CreateReference(typeof(T), id, url); + } + } + } + + /// + /// Serializer for . + /// + public sealed class UrlReferenceDataSerializer : UrlReferenceDataSerializerBase + { + + } + + /// + /// Serializer for . + /// + /// The type of asset. + public sealed class UrlReferenceDataSerializer : UrlReferenceDataSerializerBase> + where T : class + { + + } +} diff --git a/sources/core/Xenko.Core.Serialization/Serialization/UrlReference.cs b/sources/core/Xenko.Core.Serialization/Serialization/UrlReference.cs new file mode 100644 index 0000000000..ba5383cc8e --- /dev/null +++ b/sources/core/Xenko.Core.Serialization/Serialization/UrlReference.cs @@ -0,0 +1,57 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using Xenko.Core.Serialization.Serializers; + +namespace Xenko.Core.Serialization +{ + /// + /// Represents a Url to an asset. + /// + [DataSerializer(typeof(UrlReferenceDataSerializer))] + public sealed class UrlReference : UrlReferenceBase + { + /// + /// Create a new instance. + /// + public UrlReference() + { + + } + + /// + /// Create a new instance. + /// + /// + /// If is null or empty. + public UrlReference(string url) : base(url) + { + } + } + + /// + /// Represents a Url to an asset of type . + /// + /// The type off asset. + [DataSerializer(typeof(UrlReferenceDataSerializer<>), Mode = DataSerializerGenericMode.GenericArguments)] + public sealed class UrlReference : UrlReferenceBase + where T : class + { + /// + /// Create a new instance. + /// + public UrlReference() + { + + } + + /// + /// Create a new instance. + /// + /// + /// If is null or empty. + public UrlReference(string url) : base(url) + { + } + } +} diff --git a/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceBase.cs b/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceBase.cs new file mode 100644 index 0000000000..e3b362c8a1 --- /dev/null +++ b/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceBase.cs @@ -0,0 +1,70 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using Xenko.Core.Serialization.Contents; + +namespace Xenko.Core.Serialization +{ + /// + /// Base class for implementations + /// + [DataContract("urlref", Inherited = true)] + [DataStyle(DataStyle.Compact)] + [ReferenceSerializer] + public abstract class UrlReferenceBase : IUrlReference + { + private string url; + + /// + /// Create a new instance. + /// + protected UrlReferenceBase() + { + + } + + /// + /// Create a new instance. + /// + /// + /// If is null or empty. + protected UrlReferenceBase(string url) + { + if (string.IsNullOrWhiteSpace(url)) + { + throw new ArgumentNullException(nameof(url), $"{nameof(url)} cannot be null or empty."); + } + + this.url = url; + } + + // + /// Gets the Url of the referenced asset. + /// + [DataMember(10)] + public string Url + { + get => url; + internal set + { + if (string.IsNullOrEmpty(value)) + { + throw new ArgumentNullException(nameof(value), $"{nameof(Url)} cannot be null or empty."); + } + url = value; + } + } + + /// + /// Gets whether the url is null or empty. + /// + [DataMemberIgnore] + public bool IsEmpty => string.IsNullOrEmpty(url); + + /// + public override string ToString() + { + return $"{Url}"; + } + } +} diff --git a/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceContentManagerExtenstions.cs b/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceContentManagerExtenstions.cs new file mode 100644 index 0000000000..3ce51318e8 --- /dev/null +++ b/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceContentManagerExtenstions.cs @@ -0,0 +1,134 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using System.IO; +using System.Threading.Tasks; +using Xenko.Core.IO; +using Xenko.Core.Serialization.Contents; + +namespace Xenko.Core.Serialization +{ + /// + /// Extension methods of to allow usage of and . + /// + public static class UrlReferenceContentManagerExtenstions + { + /// + /// Check if the specified asset url exists. + /// + /// The . + /// The URL. + /// true if the specified asset url exists, false otherwise. + /// If is null or empty. Or is null. + public static bool Exists(this IContentManager content, IUrlReference urlReference) + { + CheckArguments(content, urlReference); + + return content.Exists(urlReference.Url); + } + + /// + /// Opens the specified URL as a stream used for custom raw asset loading. + /// + /// The . + /// The URL to the raw asset. + /// The type of stream needed + /// A stream to the raw asset. + /// If is null or empty. Or is null. + public static Stream OpenAsStream(this IContentManager content, UrlReference urlReference, StreamFlags streamFlags = StreamFlags.None) + { + CheckArguments(content, urlReference); + + return content.OpenAsStream(urlReference.Url, streamFlags); + } + + /// + /// Loads content from the specified URL. + /// + /// The content type. + /// The . + /// The URL to load from. + /// The settings. If null, fallback to . + /// The loaded content. + /// If is null or empty. Or is null. + public static T Load(this IContentManager content, UrlReference urlReference, ContentManagerLoaderSettings settings = null) + where T : class + { + CheckArguments(content, urlReference); + + return content.Load(urlReference.Url, settings); + } + + /// + /// Loads content from the specified URL asynchronously. + /// + /// The content type. + /// The . + /// The URL to load from. + /// The settings. If null, fallback to . + /// The loaded content. + /// If is null or empty. Or is null. + public static Task LoadAsync(this IContentManager content, UrlReference urlReference, ContentManagerLoaderSettings settings = null) + where T : class + { + CheckArguments(content, urlReference); + + return content.LoadAsync(urlReference.Url, settings); + } + + /// + /// Gets a previously loaded asset from its URL. + /// + /// The type of asset to retrieve. + /// The URL of the asset to retrieve. + /// The loaded asset, or null if the asset has not been loaded. + /// If is null or empty. Or is null. + /// This function does not increase the reference count on the asset. + public static T Get(this IContentManager content, UrlReference urlReference) + where T : class + { + CheckArguments(content, urlReference); + + return content.Get(urlReference.Url); + } + + /// + /// Gets whether an asset with the given URL is currently loaded. + /// + /// The URL to check. + /// If true, this method will return true only if an asset with the given URL has been manually loaded via , and not if the asset has been only loaded indirectly from another asset. + /// True if an asset with the given URL is currently loaded, false otherwise. + /// If is null or empty. Or is null. + public static bool IsLoaded(this IContentManager content, IUrlReference urlReference, bool loadedManuallyOnly = false) + { + CheckArguments(content, urlReference); + + return content.IsLoaded(urlReference.Url, loadedManuallyOnly); + } + + /// + /// Unloads the asset at the specified URL. + /// + /// The URL. + /// If is null or empty. Or is null. + public static void Unload(this IContentManager content, IUrlReference urlReference) + { + CheckArguments(content, urlReference); + + content.Unload(urlReference.Url); + } + + private static void CheckArguments(IContentManager content, IUrlReference urlReference) + { + if (content == null) + { + throw new ArgumentNullException(nameof(content)); + } + + if (urlReference == null || urlReference.IsEmpty) + { + throw new ArgumentNullException(nameof(urlReference)); + } + } + } +} diff --git a/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceHelper.cs b/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceHelper.cs new file mode 100644 index 0000000000..c4dae40af7 --- /dev/null +++ b/sources/core/Xenko.Core.Serialization/Serialization/UrlReferenceHelper.cs @@ -0,0 +1,85 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using Xenko.Core.Assets; + +namespace Xenko.Core.Serialization +{ + /// + /// A Helper class for and . + /// + public static class UrlReferenceHelper + { + /// + /// Creates a url reference to the given asset that matches the given reference type. + /// + /// The type of reference to create. + /// The target asset id to create. + /// The target asset url to create. + /// A url reference to the given asset if it's not null and is a valid reference url type, null otherwise. + /// A reference type is either an or a . + public static object CreateReference(Type referenceType, AssetId assetId, string assetUrl) + { + if (assetId != null && assetUrl != null && IsUrlReferenceType(referenceType)) + { + var urlReference = (UrlReferenceBase)AttachedReferenceManager.CreateProxyObject(referenceType, assetId, assetUrl); + + urlReference.Url = assetUrl; + + return urlReference; + } + + return null; + } + + /// + /// Checks if the given type is either an or a + /// + /// The type to test. + /// + public static bool IsUrlReferenceType(Type type) + => type != null && typeof(UrlReference).IsAssignableFrom(type) || IsGenericUrlReferenceType(type); + + /// + /// Checks if the given type is a + /// + /// The type to test. + /// + public static bool IsGenericUrlReferenceType(Type type) + => type != null && IsSubclassOfRawGeneric(GenericType, type); + + /// + /// Gets the asset content type for a given url reference type. + /// + /// The type is an url reference type, either an or a + /// The target content type or null. + public static Type GetTargetContentType(Type type) + { + if (!IsUrlReferenceType(type)) return null; + + if (IsSubclassOfRawGeneric(GenericType, type)) + { + return type.GetGenericArguments()[0]; + } + + return null; + } + + private static readonly Type GenericType = typeof(UrlReference<>); + + //TODO: this should probably be put in one of the Reflection helper classes. + static bool IsSubclassOfRawGeneric(Type type, Type c) + { + while (c != null && c != typeof(object)) + { + var cur = c.IsGenericType ? c.GetGenericTypeDefinition() : c; + if (type == cur) + { + return true; + } + c = c.BaseType; + } + return false; + } + } +} diff --git a/sources/core/Xenko.Core.Serialization/Storage/ObjectDatabase.cs b/sources/core/Xenko.Core.Serialization/Storage/ObjectDatabase.cs index 0e55176065..08dbfd80e8 100644 --- a/sources/core/Xenko.Core.Serialization/Storage/ObjectDatabase.cs +++ b/sources/core/Xenko.Core.Serialization/Storage/ObjectDatabase.cs @@ -112,6 +112,28 @@ public void CreateBundle(ObjectId[] objectIds, string bundleName, BundleOdbBacke BundleOdbBackend.CreateBundle(packUrl, backendRead1, objectIds, disableCompressionIds, indexMap, dependencies, useIncrementalBundle); } + public bool TryGetObjectLocation(ObjectId objectId, out string filePath, out long start, out long end) + { + if (BundleBackend != null && BundleBackend.TryGetObjectLocation(objectId, out filePath, out start, out end)) + return true; + + foreach (var backend in new[] { backendRead1, backendRead2 }) + { + if (backend != null && backend.Exists(objectId)) + { + filePath = backend.GetFilePath(objectId); + start = 0; + end = backend.GetSize(objectId); + return true; + } + } + + filePath = null; + start = 0; + end = 0; + return false; + } + /// /// Loads the specified bundle. /// diff --git a/sources/core/Xenko.Core.Serialization/Xenko.Core.Serialization.csproj b/sources/core/Xenko.Core.Serialization/Xenko.Core.Serialization.csproj index 2176c38540..df0516294c 100644 --- a/sources/core/Xenko.Core.Serialization/Xenko.Core.Serialization.csproj +++ b/sources/core/Xenko.Core.Serialization/Xenko.Core.Serialization.csproj @@ -1,6 +1,5 @@ - + - true true true @@ -15,10 +14,6 @@ --auto-module-initializer --serialization true - - - - Properties\SharedAssemblyInfo.cs @@ -36,4 +31,7 @@ + + + \ No newline at end of file diff --git a/sources/core/Xenko.Core.Tasks/Xenko.Core.Tasks.csproj b/sources/core/Xenko.Core.Tasks/Xenko.Core.Tasks.csproj index bebe1bb296..a4028c514c 100644 --- a/sources/core/Xenko.Core.Tasks/Xenko.Core.Tasks.csproj +++ b/sources/core/Xenko.Core.Tasks/Xenko.Core.Tasks.csproj @@ -1,6 +1,6 @@ - + 8.0.30703 2.0 @@ -26,16 +26,16 @@ False ..\..\..\deps\libgit2\LibGit2Sharp.dll - - - - + + + + True - - + + - + @@ -55,5 +55,5 @@ - + diff --git a/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.Android.csproj b/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.Android.csproj index a4b1124b0f..9b224a3a9c 100644 --- a/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.Android.csproj +++ b/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.Android.csproj @@ -3,7 +3,6 @@ {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true - true Properties\AndroidManifest.xml diff --git a/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.csproj b/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.csproj index 84f53bd6c0..a027e64aa5 100644 --- a/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.csproj +++ b/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.csproj @@ -1,11 +1,11 @@  - + Library Xenko.Core.Tests Xenko.Core.Tests - net472 + net48 false false true @@ -57,5 +57,5 @@ - + \ No newline at end of file diff --git a/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.iOS.csproj b/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.iOS.csproj index d49b17fcdc..b0ed59c652 100644 --- a/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.iOS.csproj +++ b/sources/core/Xenko.Core.Tests/Xenko.Core.Tests.iOS.csproj @@ -2,7 +2,6 @@ {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true true diff --git a/sources/core/Xenko.Core.Translation/Xenko.Core.Translation.csproj b/sources/core/Xenko.Core.Translation/Xenko.Core.Translation.csproj index fe9194b747..4b280d84fa 100644 --- a/sources/core/Xenko.Core.Translation/Xenko.Core.Translation.csproj +++ b/sources/core/Xenko.Core.Translation/Xenko.Core.Translation.csproj @@ -1,9 +1,6 @@ - - true - - + 8.0.30703 2.0 @@ -30,7 +27,7 @@ - + $(TargetsForTfmSpecificBuildOutput);IncludeExtraAssemblies diff --git a/sources/core/Xenko.Core.Yaml.Tests/DescriptorTests.cs b/sources/core/Xenko.Core.Yaml.Tests/DescriptorTests.cs index 37757c34d1..d90024d52a 100644 --- a/sources/core/Xenko.Core.Yaml.Tests/DescriptorTests.cs +++ b/sources/core/Xenko.Core.Yaml.Tests/DescriptorTests.cs @@ -138,15 +138,15 @@ public void TestObjectDescriptor() Assert.Equal("property1", instance.Property); // Check ShouldSerialize - Assert.True(descriptor[nameof(TestObject.Name)].ShouldSerialize(instance)); + Assert.True(descriptor[nameof(TestObject.Name)].ShouldSerialize(instance, null)); - Assert.False(descriptor[nameof(TestObject.Value)].ShouldSerialize(instance)); + Assert.False(descriptor[nameof(TestObject.Value)].ShouldSerialize(instance, null)); instance.Value = 1; - Assert.True(descriptor[nameof(TestObject.Value)].ShouldSerialize(instance)); + Assert.True(descriptor[nameof(TestObject.Value)].ShouldSerialize(instance, null)); - Assert.False(descriptor[nameof(TestObject.DefaultValue)].ShouldSerialize(instance)); + Assert.False(descriptor[nameof(TestObject.DefaultValue)].ShouldSerialize(instance, null)); instance.DefaultValue++; - Assert.True(descriptor[nameof(TestObject.DefaultValue)].ShouldSerialize(instance)); + Assert.True(descriptor[nameof(TestObject.DefaultValue)].ShouldSerialize(instance, null)); // Check HasSet Assert.True(descriptor[nameof(TestObject.Collection)].HasSet); diff --git a/sources/core/Xenko.Core.Yaml.Tests/Xenko.Core.Yaml.Tests.csproj b/sources/core/Xenko.Core.Yaml.Tests/Xenko.Core.Yaml.Tests.csproj index 5708b37296..89bb6d9b5f 100644 --- a/sources/core/Xenko.Core.Yaml.Tests/Xenko.Core.Yaml.Tests.csproj +++ b/sources/core/Xenko.Core.Yaml.Tests/Xenko.Core.Yaml.Tests.csproj @@ -1,6 +1,6 @@ - + 8.0.30703 2.0 @@ -28,5 +28,5 @@ - + \ No newline at end of file diff --git a/sources/core/Xenko.Core.Yaml/Serialization/DynamicMemberDescriptorBase.cs b/sources/core/Xenko.Core.Yaml/Serialization/DynamicMemberDescriptorBase.cs index d82a609d4c..5cb846cbb6 100644 --- a/sources/core/Xenko.Core.Yaml/Serialization/DynamicMemberDescriptorBase.cs +++ b/sources/core/Xenko.Core.Yaml/Serialization/DynamicMemberDescriptorBase.cs @@ -76,7 +76,10 @@ protected DynamicMemberDescriptorBase(string name, Type type, Type declaringType public ScalarStyle ScalarStyle { get; set; } - public Func ShouldSerialize { get; set; } + public ShouldSerializePredicate ShouldSerialize { get; set; } + + public bool HasDefaultValue => false; + public object DefaultValue => throw new InvalidOperationException(); public List AlternativeNames { get; set; } diff --git a/sources/core/Xenko.Core.Yaml/Serialization/ObjectContext.cs b/sources/core/Xenko.Core.Yaml/Serialization/ObjectContext.cs index e0c6bb3197..b3de0b1b13 100644 --- a/sources/core/Xenko.Core.Yaml/Serialization/ObjectContext.cs +++ b/sources/core/Xenko.Core.Yaml/Serialization/ObjectContext.cs @@ -39,11 +39,14 @@ public struct ObjectContext /// The serializer context. /// The instance. /// The descriptor. - public ObjectContext(SerializerContext serializerContext, object instance, ITypeDescriptor descriptor) : this() + public ObjectContext(SerializerContext serializerContext, object instance, ITypeDescriptor descriptor, + ITypeDescriptor parentTypeDescriptor = null, IMemberDescriptor parentTypeMemberDescriptor = null) : this() { SerializerContext = serializerContext; Instance = instance; Descriptor = descriptor; + ParentTypeDescriptor = parentTypeDescriptor; + ParentTypeMemberDescriptor = parentTypeMemberDescriptor; Properties = new PropertyContainer(); } @@ -86,6 +89,16 @@ public ObjectContext(SerializerContext serializerContext, object instance, IType /// public ITypeDescriptor Descriptor { get; set; } + /// + /// The type descriptor of the parent of the instance type. + /// + public ITypeDescriptor ParentTypeDescriptor { get; set; } + + /// + /// The type descriptor of the parent's member that generates this type of instance. + /// + public IMemberDescriptor ParentTypeMemberDescriptor { get; set; } + /// /// The tag used when serializing. /// diff --git a/sources/core/Xenko.Core.Yaml/Serialization/Serializers/CollectionSerializer.cs b/sources/core/Xenko.Core.Yaml/Serialization/Serializers/CollectionSerializer.cs index f86797f74b..ddc92c6bc7 100644 --- a/sources/core/Xenko.Core.Yaml/Serialization/Serializers/CollectionSerializer.cs +++ b/sources/core/Xenko.Core.Yaml/Serialization/Serializers/CollectionSerializer.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2015 SharpYaml - Alexandre Mutel +// Copyright (c) 2015 SharpYaml - 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 @@ -141,11 +141,11 @@ protected virtual void ReadCollectionItems(ref ObjectContext objectContext) if (!collectionDescriptor.HasAdd) { - throw new InvalidOperationException($"Cannot deserialize list to type [{thisObject.GetType()}]. No Add method found"); + throw new InvalidOperationException($"Cannot deserialize collection to type [{thisObject.GetType()}]. No Add method found"); } if (collectionDescriptor.IsReadOnly(thisObject)) { - throw new InvalidOperationException($"Cannot deserialize list to readonly collection type [{thisObject.GetType()}]."); + throw new InvalidOperationException($"Cannot deserialize collection to readonly collection type [{thisObject.GetType()}]."); } var reader = objectContext.Reader; diff --git a/sources/core/Xenko.Core.Yaml/Serialization/Serializers/DefaultObjectSerializerBackend.cs b/sources/core/Xenko.Core.Yaml/Serialization/Serializers/DefaultObjectSerializerBackend.cs index cb477c9ad5..28e22a3c6d 100644 --- a/sources/core/Xenko.Core.Yaml/Serialization/Serializers/DefaultObjectSerializerBackend.cs +++ b/sources/core/Xenko.Core.Yaml/Serialization/Serializers/DefaultObjectSerializerBackend.cs @@ -139,7 +139,7 @@ public virtual void WriteMemberName(ref ObjectContext objectContext, IMemberDesc public virtual void WriteMemberValue(ref ObjectContext objectContext, IMemberDescriptor memberDescriptor, object memberValue, Type memberType) { // Push the style of the current member - var memberObjectContext = new ObjectContext(objectContext.SerializerContext, memberValue, objectContext.SerializerContext.FindTypeDescriptor(memberType)) + var memberObjectContext = new ObjectContext(objectContext.SerializerContext, memberValue, objectContext.SerializerContext.FindTypeDescriptor(memberType), objectContext.ParentTypeDescriptor, memberDescriptor) { Style = memberDescriptor.Style, ScalarStyle = memberDescriptor.ScalarStyle, @@ -169,7 +169,7 @@ public virtual void WriteDictionaryValue(ref ObjectContext objectContext, object } /// - public virtual bool ShouldSerialize(IMemberDescriptor member, ref ObjectContext objectContext) => member.ShouldSerialize(objectContext.Instance); + public virtual bool ShouldSerialize(IMemberDescriptor member, ref ObjectContext objectContext) => member.ShouldSerialize(objectContext.Instance, objectContext.ParentTypeMemberDescriptor); protected object ReadYaml(ref ObjectContext objectContext) { diff --git a/sources/core/Xenko.Core.Yaml/Xenko.Core.Yaml.csproj b/sources/core/Xenko.Core.Yaml/Xenko.Core.Yaml.csproj index e5b2df6d57..ce9aa2f097 100644 --- a/sources/core/Xenko.Core.Yaml/Xenko.Core.Yaml.csproj +++ b/sources/core/Xenko.Core.Yaml/Xenko.Core.Yaml.csproj @@ -1,6 +1,6 @@  - + 8.0.30703 2.0 @@ -23,5 +23,5 @@ - + \ No newline at end of file diff --git a/sources/core/Xenko.Core/Annotations/MemberRequiredAttribute.cs b/sources/core/Xenko.Core/Annotations/MemberRequiredAttribute.cs new file mode 100644 index 0000000000..903dbfcc64 --- /dev/null +++ b/sources/core/Xenko.Core/Annotations/MemberRequiredAttribute.cs @@ -0,0 +1,33 @@ +using System; + +namespace Xenko.Core.Annotations +{ + /// + /// This attribute signals the asset compiler that the field/property + /// is required to have a value (i.e. not null) when compiling assets. + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] + public class MemberRequiredAttribute : Attribute + { + /// + /// Gets or sets the reporting level (warning/error) of the notification that the field/property is null. + /// + public MemberRequiredReportType ReportAs { get; set; } = MemberRequiredReportType.Warning; + } + + /// + /// Specifies the reporting level for a missing value of a field/property with a . + /// + public enum MemberRequiredReportType + { + /// + /// Report missing required member as a warning. + /// + Warning, + + /// + /// Report missing required member as an error. + /// + Error, + } +} diff --git a/sources/engine/Xenko.Engine/Updater/BlittableHelper.cs b/sources/core/Xenko.Core/BlittableHelper.cs similarity index 96% rename from sources/engine/Xenko.Engine/Updater/BlittableHelper.cs rename to sources/core/Xenko.Core/BlittableHelper.cs index d4d8b5d8b7..26c87720b2 100644 --- a/sources/engine/Xenko.Engine/Updater/BlittableHelper.cs +++ b/sources/core/Xenko.Core/BlittableHelper.cs @@ -5,13 +5,13 @@ using System.Reflection; using System.Runtime.InteropServices; -namespace Xenko.Updater +namespace Xenko.Core { /// /// Various helpers for blittable types. /// // TODO: We should switch to something determined at compile time with assembly processor? - internal static class BlittableHelper + public static class BlittableHelper { private static Dictionary blittableTypesCache = new Dictionary(); diff --git a/sources/core/Xenko.Core/Collections/ArrayHelper.cs b/sources/core/Xenko.Core/Collections/ArrayHelper.cs index 79a3e4ed15..50e3b59863 100644 --- a/sources/core/Xenko.Core/Collections/ArrayHelper.cs +++ b/sources/core/Xenko.Core/Collections/ArrayHelper.cs @@ -1,16 +1,19 @@ // Copyright (c) Xenko contributors (https://xenko.com) 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; + namespace Xenko.Core.Collections { /// /// Array helper for a particular type, useful to get an empty array. /// /// Type of the array element + [Obsolete("This method is deprecated and may be removed in future versions. Please use Array.Empty() instead. See https://docs.microsoft.com/en-us/dotnet/api/system.array.empty?view=net-5.0 for details.")] public struct ArrayHelper { /// /// An empty array of the specified element type. /// - public static readonly T[] Empty = new T[0]; + public static readonly T[] Empty = Array.Empty(); } } diff --git a/sources/core/Xenko.Core/Collections/CacheConcurrentDictionary.cs b/sources/core/Xenko.Core/Collections/CacheConcurrentDictionary.cs new file mode 100644 index 0000000000..a054d5bb0d --- /dev/null +++ b/sources/core/Xenko.Core/Collections/CacheConcurrentDictionary.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace Xenko.Core.Collections +{ + public class CacheConcurrentDictionary + { + + private ConcurrentDictionary dictionary; + private ConcurrentQueue keys; + private int capacity; + + public CacheConcurrentDictionary(int capacity) + { + this.keys = new ConcurrentQueue(); + this.capacity = capacity; + this.dictionary = new ConcurrentDictionary(4, capacity); + } + + public void Add(TKey key, TValue value) + { + if (dictionary.Count == capacity) + { + if (keys.TryDequeue(out TKey oldestKey)) dictionary.TryRemove(oldestKey, out _); + } + + if(dictionary.TryAdd(key, value)) + keys.Enqueue(key); + } + + public void Clear() + { + dictionary.Clear(); + while (keys.TryDequeue(out _)) { } + } + + public bool TryGet(TKey key, out TValue val) + { + return dictionary.TryGetValue(key, out val); + } + + public TValue this[TKey key] + { + get { return dictionary[key]; } + } + } +} diff --git a/sources/core/Xenko.Core/Collections/CacheDirectory.cs b/sources/core/Xenko.Core/Collections/CacheDirectory.cs new file mode 100644 index 0000000000..d98cf745a4 --- /dev/null +++ b/sources/core/Xenko.Core/Collections/CacheDirectory.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace Xenko.Core.Collections +{ + public class CacheDictionary + { + + private Dictionary dictionary; + private Queue keys; + private int capacity; + + public CacheDictionary(int capacity) + { + this.keys = new Queue(); + this.capacity = capacity; + this.dictionary = new Dictionary(capacity); + } + + public Action DisposeAction; + + public void Add(TKey key, TValue value) + { + if (dictionary.Count == capacity) + { + if (DisposeAction == null) + { + while (keys.Count > 0) + { + TKey oldestKey = keys.Dequeue(); + if (dictionary.Remove(oldestKey)) break; + } + } + else + { + while (keys.Count > 0) + { + TKey oldestKey = keys.Dequeue(); + if (dictionary.TryGetValue(oldestKey, out TValue val)) + { + DisposeAction(val); + dictionary.Remove(oldestKey); + break; + } + } + } + } + + dictionary.Add(key, value); + keys.Enqueue(key); + } + + public void Clear() + { + if (DisposeAction != null) + { + foreach (TValue t in dictionary.Values) + DisposeAction(t); + } + dictionary.Clear(); + keys.Clear(); + } + + public bool TryPull(TKey key, out TValue val) + { + if (dictionary.TryGetValue(key, out val)) + { + dictionary.Remove(key); + return true; + } + return false; + } + + public bool TryGet(TKey key, out TValue val) + { + return dictionary.TryGetValue(key, out val); + } + + public TValue this[TKey key] + { + get { return dictionary[key]; } + } + } +} diff --git a/sources/core/Xenko.Core/Collections/FastCollection.cs b/sources/core/Xenko.Core/Collections/FastCollection.cs index 629b9be6af..5dbc05e745 100644 --- a/sources/core/Xenko.Core/Collections/FastCollection.cs +++ b/sources/core/Xenko.Core/Collections/FastCollection.cs @@ -28,7 +28,7 @@ public class FastCollection : IList, IReadOnlyList public FastCollection() { - items = ArrayHelper.Empty; + items = Array.Empty(); } public FastCollection([NotNull] IEnumerable collection) @@ -78,7 +78,7 @@ public int Capacity } else { - items = ArrayHelper.Empty; + items = Array.Empty(); } } } diff --git a/sources/core/Xenko.Core/Collections/FastList.cs b/sources/core/Xenko.Core/Collections/FastList.cs index a1dfb771f8..8a3165afd3 100644 --- a/sources/core/Xenko.Core/Collections/FastList.cs +++ b/sources/core/Xenko.Core/Collections/FastList.cs @@ -33,7 +33,7 @@ public class FastList : IList, IReadOnlyList, ICollection, IEnumerab public FastList() { - Items = ArrayHelper.Empty; + Items = Array.Empty(); } public FastList([NotNull] IEnumerable collection) @@ -83,7 +83,7 @@ public int Capacity } else { - Items = ArrayHelper.Empty; + Items = Array.Empty(); } } } diff --git a/sources/core/Xenko.Core/Collections/FastListStruct.cs b/sources/core/Xenko.Core/Collections/FastListStruct.cs index 6027e69dcf..97c005c4fe 100644 --- a/sources/core/Xenko.Core/Collections/FastListStruct.cs +++ b/sources/core/Xenko.Core/Collections/FastListStruct.cs @@ -10,7 +10,7 @@ namespace Xenko.Core.Collections { public struct FastListStruct : IEnumerable { - private static readonly T[] EmptyArray = new T[0]; + private static readonly T[] EmptyArray = Array.Empty(); public int Count; @@ -109,7 +109,7 @@ public void Clear() public T[] ToArray() { var destinationArray = new T[Count]; - Array.Copy(Items, 0, destinationArray, 0, Count); + Array.Copy(Items, 0, destinationArray, 0, Items.Length); return destinationArray; } @@ -122,7 +122,7 @@ public void EnsureCapacity(int newCapacity) newSize = newCapacity; var destinationArray = new T[newSize]; - Array.Copy(Items, 0, destinationArray, 0, Count); + Array.Copy(Items, 0, destinationArray, 0, Items.Length); Items = destinationArray; } } diff --git a/sources/core/Xenko.Core/Collections/OrderedCollection.cs b/sources/core/Xenko.Core/Collections/OrderedCollection.cs index 071c2d07f9..67b8a51aac 100644 --- a/sources/core/Xenko.Core/Collections/OrderedCollection.cs +++ b/sources/core/Xenko.Core/Collections/OrderedCollection.cs @@ -34,7 +34,7 @@ public OrderedCollection([NotNull] IComparer comparer) { if (comparer == null) throw new ArgumentNullException(nameof(comparer)); this.comparer = comparer; - items = ArrayHelper.Empty; + items = Array.Empty(); } /// @@ -65,7 +65,7 @@ public int Capacity } else { - items = ArrayHelper.Empty; + items = Array.Empty(); } } } diff --git a/sources/core/Xenko.Core/Collections/SortedList.cs b/sources/core/Xenko.Core/Collections/SortedList.cs index ba3108be5b..b1c2dfae52 100644 --- a/sources/core/Xenko.Core/Collections/SortedList.cs +++ b/sources/core/Xenko.Core/Collections/SortedList.cs @@ -48,7 +48,7 @@ namespace Xenko.Core.Collections /// and by index. /// [DebuggerDisplay("Count = {" + nameof(Count) + "}")] - public class SortedList : IDictionary, IDictionary + public class SortedList : IDictionary, IDictionary, IEquatable> { private static readonly int INITIAL_SIZE = 16; @@ -68,6 +68,50 @@ public SortedList() { } + public bool Equals(SortedList other) + { + if (table.Length != other.table.Length) + return false; + + if (comparer.Equals(other.comparer) == false) + return false; + + for (int i=0; i sl) + return sl.Equals(this); + + return false; + } + + public override int GetHashCode() + { + if (table == null) return 0; + + int hash = 397; + + unchecked + { + for (int i = 0; i < table.Length; i++) + { + hash ^= hash * 17 ^ (table[i].Key?.GetHashCode() ?? 103); + hash ^= hash * 13 ^ (table[i].Value?.GetHashCode() ?? 137); + } + } + + return hash; + } + public SortedList(int capacity) : this(capacity, null) { diff --git a/sources/core/Xenko.Core/Collections/TrackingDictionary.cs b/sources/core/Xenko.Core/Collections/TrackingDictionary.cs index c2772e2b87..1fedec44cb 100644 --- a/sources/core/Xenko.Core/Collections/TrackingDictionary.cs +++ b/sources/core/Xenko.Core/Collections/TrackingDictionary.cs @@ -74,8 +74,8 @@ public ICollection Keys public bool Remove([NotNull] TKey key) { var collectionChanged = itemRemoved; - if (collectionChanged != null && innerDictionary.ContainsKey(key)) - collectionChanged(this, new TrackingCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, key, innerDictionary[key], null, true)); + if (collectionChanged != null && innerDictionary.TryGetValue(key, out var dictValue)) + collectionChanged(this, new TrackingCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, key, dictValue, null, true)); return innerDictionary.Remove(key); } diff --git a/sources/core/Xenko.Core/DataContractMetadataTypeAttribute.cs b/sources/core/Xenko.Core/DataContractMetadataTypeAttribute.cs new file mode 100644 index 0000000000..505e33c160 --- /dev/null +++ b/sources/core/Xenko.Core/DataContractMetadataTypeAttribute.cs @@ -0,0 +1,30 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; + +namespace Xenko.Core +{ + /// + /// Specifies the metadata class to associate with a serializable class. + /// The main usage of this class is to allow a sub-class to override property + /// attributes such as . + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + public class DataContractMetadataTypeAttribute : Attribute + { + /// + /// Initializes a new instance of the class. + /// + /// The type alias name when serializing to a textual format. + /// is null + public DataContractMetadataTypeAttribute(Type metadataClassType) + { + MetadataClassType = metadataClassType; + } + + /// + /// Gets the metadata class that is associated with a serializable class. + /// + public Type MetadataClassType { get; } + } +} diff --git a/sources/core/Xenko.Core/Diagnostics/ConsoleLogListener.cs b/sources/core/Xenko.Core/Diagnostics/ConsoleLogListener.cs index 62c289f7ab..603bb97f15 100644 --- a/sources/core/Xenko.Core/Diagnostics/ConsoleLogListener.cs +++ b/sources/core/Xenko.Core/Diagnostics/ConsoleLogListener.cs @@ -27,23 +27,13 @@ public class ConsoleLogListener : LogListener /// Gets or sets the minimum log level handled by this listener. /// /// The minimum log level. - public LogMessageType LogLevel { get; set; } - - /// - /// Gets or sets the log mode. - /// - /// The log mode. - public ConsoleLogMode LogMode { get; set; } + public static LogMessageType LogLevel { get; set; } protected override void OnLog([NotNull] ILogMessage logMessage) { // filter logs with lower level - if (!Debugger.IsAttached && // Always log when debugger is attached - (logMessage.Type < LogLevel || LogMode == ConsoleLogMode.None - || (!(LogMode == ConsoleLogMode.Auto && Platform.IsRunningDebugAssembly) && LogMode != ConsoleLogMode.Always))) - { + if (logMessage.Type < LogLevel) return; - } // Make sure the console is opened when the debugger is not attached EnsureConsole(); diff --git a/sources/core/Xenko.Core/Diagnostics/ConsoleLogMode.cs b/sources/core/Xenko.Core/Diagnostics/ConsoleLogMode.cs deleted file mode 100644 index 0bb1a759a7..0000000000 --- a/sources/core/Xenko.Core/Diagnostics/ConsoleLogMode.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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. -namespace Xenko.Core.Diagnostics -{ - /// - /// Defines how the console is opened. - /// - public enum ConsoleLogMode - { - /// - /// The console should be visible only in debug and if there is a message, otherwise it is not visible. - /// - Auto, - - /// - /// Same as - /// - Default = Auto, - - /// - /// The console should not be visible. - /// - None, - - /// - /// The console should be always visible - /// - Always, - } -} diff --git a/sources/core/Xenko.Core/Diagnostics/ExceptionInfo.cs b/sources/core/Xenko.Core/Diagnostics/ExceptionInfo.cs index 43657ed26a..e5eecc8193 100644 --- a/sources/core/Xenko.Core/Diagnostics/ExceptionInfo.cs +++ b/sources/core/Xenko.Core/Diagnostics/ExceptionInfo.cs @@ -1,6 +1,8 @@ // Copyright (c) Xenko contributors (https://xenko.com) 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.Linq; +using System.Reflection; using System.Text; using Xenko.Core.Annotations; @@ -12,6 +14,8 @@ namespace Xenko.Core.Diagnostics [DataContract] public sealed class ExceptionInfo { + private static readonly ExceptionInfo[] EmptyExceptions = new ExceptionInfo[0]; + /// /// Initializes a new instance of the class with default values for its properties /// @@ -30,7 +34,15 @@ public ExceptionInfo([NotNull] Exception exception) StackTrace = exception.StackTrace; TypeFullName = exception.GetType().FullName; TypeName = exception.GetType().Name; - InnerException = exception.InnerException != null ? new ExceptionInfo(exception.InnerException) : null; + + if (exception.InnerException != null) + { + InnerExceptions = new ExceptionInfo[] { new ExceptionInfo(exception.InnerException) }; + } + else if (exception is ReflectionTypeLoadException reflectionException) + { + InnerExceptions = reflectionException.LoaderExceptions.Select(x => new ExceptionInfo(x)).ToArray(); + } } /// @@ -56,7 +68,7 @@ public ExceptionInfo([NotNull] Exception exception) /// /// Gets or sets the of the inner exception. /// - public ExceptionInfo InnerException { get; set; } + public ExceptionInfo[] InnerExceptions { get; set; } = EmptyExceptions; /// public override string ToString() @@ -65,8 +77,10 @@ public override string ToString() sb.AppendLine(Message); if (StackTrace != null) sb.AppendLine(StackTrace); - if (InnerException != null) - sb.AppendFormat("Inner exception: {0}{1}", InnerException, Environment.NewLine); + foreach (var innerException in InnerExceptions) + { + sb.AppendFormat("Inner/Loader Exception: {0}{1}", innerException, Environment.NewLine); + } return sb.ToString(); } } diff --git a/sources/core/Xenko.Core/Diagnostics/GlobalLogger.cs b/sources/core/Xenko.Core/Diagnostics/GlobalLogger.cs index 2fad277169..cd4255c44d 100644 --- a/sources/core/Xenko.Core/Diagnostics/GlobalLogger.cs +++ b/sources/core/Xenko.Core/Diagnostics/GlobalLogger.cs @@ -15,9 +15,9 @@ public sealed class GlobalLogger : Logger #region Constants and Fields /// - /// By default, the minimum level for a GlobalLogger is info. + /// By default, the minimum level for a GlobalLogger is Warning. /// - public const LogMessageType MinimumLevel = LogMessageType.Info; + public const LogMessageType MinimumLevel = LogMessageType.Warning; /// /// Map for all instantiated loggers. Map a module name to a logger. diff --git a/sources/core/Xenko.Core/Diagnostics/LogMessage.cs b/sources/core/Xenko.Core/Diagnostics/LogMessage.cs index bedcce740f..dc9bc55b50 100644 --- a/sources/core/Xenko.Core/Diagnostics/LogMessage.cs +++ b/sources/core/Xenko.Core/Diagnostics/LogMessage.cs @@ -1,6 +1,7 @@ // Copyright (c) Xenko contributors (https://xenko.com) 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.Diagnostics; namespace Xenko.Core.Diagnostics { @@ -42,6 +43,12 @@ public LogMessage(string module, LogMessageType type, string text) /// The caller info. public LogMessage(string module, LogMessageType type, string text, Exception exception, CallerInfo callerInfo) { + if (exception != null) { + // if file logging is enabled, write it here + ErrorFileLogger.WriteExceptionToFile(exception, type.ToString() + ", " + text + ", " + module + ", File: " + + (callerInfo?.FilePath ?? "none") + ", Line: " + (callerInfo?.LineNumber.ToString() ?? "none")); + } + Module = module; Type = type; Text = text; diff --git a/sources/core/Xenko.Core/Diagnostics/Logger.Extensions.cs b/sources/core/Xenko.Core/Diagnostics/Logger.Extensions.cs index 9c423606b4..6ae3cd6a90 100644 --- a/sources/core/Xenko.Core/Diagnostics/Logger.Extensions.cs +++ b/sources/core/Xenko.Core/Diagnostics/Logger.Extensions.cs @@ -16,6 +16,7 @@ public abstract partial class Logger /// Information about the caller. Default is null, otherwise use . public void Verbose(string message, Exception exception, CallerInfo callerInfo = null) { + if (ConsoleLogListener.LogLevel > LogMessageType.Verbose) return; Log(new LogMessage(Module, LogMessageType.Verbose, message, exception, callerInfo)); } @@ -36,6 +37,7 @@ public void Verbose(string message, CallerInfo callerInfo = null) /// Information about the caller. Default is null, otherwise use . public void Debug(string message, Exception exception, CallerInfo callerInfo = null) { + if (ConsoleLogListener.LogLevel > LogMessageType.Debug) return; Log(new LogMessage(Module, LogMessageType.Debug, message, exception, callerInfo)); } @@ -56,6 +58,7 @@ public void Debug(string message, CallerInfo callerInfo = null) /// Information about the caller. Default is null, otherwise use . public void Info(string message, Exception exception, CallerInfo callerInfo = null) { + if (ConsoleLogListener.LogLevel > LogMessageType.Info) return; Log(new LogMessage(Module, LogMessageType.Info, message, exception, callerInfo)); } @@ -76,6 +79,7 @@ public void Info(string message, CallerInfo callerInfo = null) /// Information about the caller. Default is null, otherwise use . public void Warning(string message, Exception exception, CallerInfo callerInfo = null) { + if (ConsoleLogListener.LogLevel > LogMessageType.Warning) return; Log(new LogMessage(Module, LogMessageType.Warning, message, exception, callerInfo)); } @@ -96,6 +100,7 @@ public void Warning(string message, CallerInfo callerInfo = null) /// Information about the caller. Default is null, otherwise use . public void Error(string message, Exception exception, CallerInfo callerInfo = null) { + if (ConsoleLogListener.LogLevel > LogMessageType.Error) return; Log(new LogMessage(Module, LogMessageType.Error, message, exception, callerInfo)); } diff --git a/sources/core/Xenko.Core/DisposeBase.cs b/sources/core/Xenko.Core/DisposeBase.cs index c5791fbe8d..69f550b9a0 100644 --- a/sources/core/Xenko.Core/DisposeBase.cs +++ b/sources/core/Xenko.Core/DisposeBase.cs @@ -44,7 +44,6 @@ int IReferencable.AddReference() OnAddReference(); var newCounter = Interlocked.Increment(ref counter); - if (newCounter <= 1) throw new InvalidOperationException(FrameworkResources.AddReferenceError); return newCounter; } @@ -54,15 +53,12 @@ int IReferencable.Release() OnReleaseReference(); var newCounter = Interlocked.Decrement(ref counter); - if (newCounter == 0) + if (newCounter <= 0) { + newCounter = 0; Destroy(); IsDisposed = true; } - else if (newCounter < 0) - { - throw new InvalidOperationException(FrameworkResources.ReleaseReferenceError); - } return newCounter; } diff --git a/sources/core/Xenko.Core/ErrorFileLogger.cs b/sources/core/Xenko.Core/ErrorFileLogger.cs new file mode 100644 index 0000000000..8668479d1d --- /dev/null +++ b/sources/core/Xenko.Core/ErrorFileLogger.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Threading; + +namespace Xenko.Core +{ + /// + /// Enables creating crash logs to file, so it is easier to report crashes + /// + public class ErrorFileLogger + { + private static string savePath = null, savePrefix = null, _version = "Default"; + + private static UnhandledExceptionEventHandler globalHandler = null; + + private static object locker = new object(); + + /// + /// Turn on file reporting of all exceptions, or change settings + /// + /// What to prefix the files? + /// Location to store the log files, null defaults to My Documents folder + public static void EnableGlobalExceptionLogger(string prefix = "FocusEngineCrashLog", string path = null) + { + savePath = (path ?? Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) + "/"; + savePrefix = prefix ?? "FocusEngineCrashLog"; + + if (globalHandler == null) + globalHandler = new UnhandledExceptionEventHandler(UnhandledException); + + // Add the event handler for handling non-UI thread exceptions to the event. + // remove it first, just to make sure we don't multiply it + AppDomain.CurrentDomain.UnhandledException -= globalHandler; + AppDomain.CurrentDomain.UnhandledException += globalHandler; + } + + public static void SetVersionTag(string version) + { + _version = version; + } + + public static void Disable() + { + if (globalHandler != null) + AppDomain.CurrentDomain.UnhandledException -= globalHandler; + + savePath = null; + savePrefix = null; + } + + public static void WriteLogToFile(string message) + { + if (savePrefix == null || savePath == null) return; + + string time = DateTime.Now.ToString("dd-MMM-yyyy-hh.mm-tt"); + string filename = savePath + savePrefix + time + ".txt"; + message = "\n--------------------- NEW ENTRY ------------------------\n" + + "Executable: " + System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName + "\n" + + "Thread: " + Thread.CurrentThread.Name + "\n" + + "Version: " + _version + "\n" + + "Time: " + time + "\n" + + "Message: " + message + "\n------------------------ END ENTRY -------------------\n"; + + lock(locker) + { + System.IO.File.AppendAllText(filename, message); + } + } + + public static void WriteExceptionToFile(Exception ex, string additionalContext = "") + { + if (savePrefix == null || savePath == null || ex == null) return; + + try + { + // Get stack trace for the exception with source file information + StackTrace st = new StackTrace(ex, true); + // Get the top stack frame + StackFrame frame = st.GetFrame(0); + // Get the line number from the stack frame + int line = frame.GetFileLineNumber(); + if (line != 0) + { + // try to add it to the front of the text + additionalContext += "{line #" + line.ToString() + "}"; + } + } + catch (Exception e) { /* couldn't get line info */ } + + string error = "Message: " + ex.Message + "\n" + + "Context: " + additionalContext + "\n" + + "Stack Trace: " + ex.StackTrace + "\n" + + "Source: " + ex.Source + "\n" + + "Inner Exception: " + (ex.InnerException?.Message ?? "None") + "\n" + + "Inner Exception Trace: " + (ex.InnerException?.StackTrace ?? "None"); + + try + { + WriteLogToFile(error); + } + catch (Exception e) + { + // couldn't write the exception to file, throw it now + throw ex; + } + } + + private static void UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + WriteExceptionToFile(e.ExceptionObject as Exception); + } + } +} diff --git a/sources/core/Xenko.Core/Native/CoreNative.c b/sources/core/Xenko.Core/Native/CoreNative.c deleted file mode 100644 index eac0d8e011..0000000000 --- a/sources/core/Xenko.Core/Native/CoreNative.c +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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. - -#include "../../../../deps/NativePath/NativeThreading.h" -#include "CoreNative.h" - -#ifdef __cplusplus -extern "C" { -#endif - - DLL_EXPORT_API void cnSleep(int milliseconds) - { - npThreadSleep(milliseconds); - } - - DLL_EXPORT_API void cnSetup(void* printDebugPtr) - { - cnDebugPrintLine = (CnPrintDebugFunc)printDebugPtr; - } - -#ifdef __cplusplus -} -#endif diff --git a/sources/core/Xenko.Core/Native/CoreNative.h b/sources/core/Xenko.Core/Native/CoreNative.h index dc753dab44..b26e204b68 100644 --- a/sources/core/Xenko.Core/Native/CoreNative.h +++ b/sources/core/Xenko.Core/Native/CoreNative.h @@ -19,9 +19,5 @@ #define DLL_EXPORT_API #endif -typedef void(*CnPrintDebugFunc)(const char* string); - -DLL_EXPORT_API CnPrintDebugFunc cnDebugPrintLine; - #endif diff --git a/sources/core/Xenko.Core/Native/NativeInvoke.cs b/sources/core/Xenko.Core/Native/NativeInvoke.cs index 78a5721dee..575b93a8a2 100644 --- a/sources/core/Xenko.Core/Native/NativeInvoke.cs +++ b/sources/core/Xenko.Core/Native/NativeInvoke.cs @@ -29,49 +29,5 @@ static NativeInvoke() { NativeLibrary.PreloadLibrary(LibraryName, typeof(NativeInvoke)); } - - /// - /// Suspends current thread for milliseconds. - /// - /// Number of milliseconds to sleep. - [SuppressUnmanagedCodeSecurity] - [DllImport(Library, EntryPoint = "cnSleep", CallingConvention = CallingConvention.Cdecl)] - public static extern void Sleep(int ms); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate void ManagedLogDelegate(string log); - - private static ManagedLogDelegate managedLogDelegateSingleton; - -#if XENKO_PLATFORM_IOS - [MonoPInvokeCallback(typeof(ManagedLogDelegate))] -#endif - private static void ManagedLog(string log) - { - Debug.WriteLine(log); - } - - public static void Setup() - { - managedLogDelegateSingleton = ManagedLog; - -#if !XENKO_PLATFORM_IOS - var ptr = Marshal.GetFunctionPointerForDelegate(managedLogDelegateSingleton); -#else - var ptr = managedLogDelegateSingleton; -#endif - - CoreNativeSetup(ptr); - } - -#if !XENKO_PLATFORM_IOS - [SuppressUnmanagedCodeSecurity] - [DllImport(Library, EntryPoint = "cnSetup", CallingConvention = CallingConvention.Cdecl)] - private static extern void CoreNativeSetup(IntPtr logger); -#else - [SuppressUnmanagedCodeSecurity] - [DllImport(Library, EntryPoint = "cnSetup", CallingConvention = CallingConvention.Cdecl)] - private static extern void CoreNativeSetup(ManagedLogDelegate logger); -#endif } } diff --git a/sources/core/Xenko.Core/Native/NativeLibrary.cs b/sources/core/Xenko.Core/Native/NativeLibrary.cs index cc8f242e86..6b0b6f4c27 100644 --- a/sources/core/Xenko.Core/Native/NativeLibrary.cs +++ b/sources/core/Xenko.Core/Native/NativeLibrary.cs @@ -33,11 +33,11 @@ public static class NativeLibrary public static void PreloadLibrary(string libraryName, Type owner) { #if XENKO_PLATFORM_WINDOWS_DESKTOP + NormalizeLibName(ref libraryName); lock (LoadedLibraries) { // If already loaded, just exit as we want to load it just once - var libraryNameNormalized = libraryName.ToLowerInvariant(); - if (LoadedLibraries.ContainsKey(libraryNameNormalized)) + if (LoadedLibraries.ContainsKey(libraryName)) { return; } @@ -52,20 +52,44 @@ public static void PreloadLibrary(string libraryName, Type owner) cpu = IntPtr.Size == 8 ? "x64" : "x86"; // We are trying to load the dll from a shadow path if it is already registered, otherwise we use it directly from the folder - var dllFolder = NativeLibraryInternal.GetShadowPathForNativeDll(libraryName); - if (dllFolder == null) - dllFolder = Path.Combine(Path.GetDirectoryName(owner.GetTypeInfo().Assembly.Location), cpu); - if (!Directory.Exists(dllFolder)) - dllFolder = Path.Combine(Environment.CurrentDirectory, cpu); - var libraryFilename = Path.Combine(dllFolder, libraryName); - var result = LoadLibrary(libraryFilename); - - if (result == IntPtr.Zero) + string basePath; { - throw new InvalidOperationException($"Could not load native library {libraryName} from path [{libraryFilename}] using CPU architecture {cpu}."); + var dllFolder = NativeLibraryInternal.GetShadowPathForNativeDll(libraryName); + if (dllFolder == null) + dllFolder = Path.Combine(Path.GetDirectoryName(owner.GetTypeInfo().Assembly.Location), cpu); + if (!Directory.Exists(dllFolder)) + dllFolder = Path.Combine(Environment.CurrentDirectory, cpu); + var libraryFilename = Path.Combine(dllFolder, libraryName); + basePath = libraryFilename; + + if (File.Exists(libraryFilename)) + { + var result = LoadLibrary(libraryFilename); + if (result != IntPtr.Zero) + { + LoadedLibraries.Add(libraryName.ToLowerInvariant(), result); + return; + } + } } - LoadedLibraries.Add(libraryName.ToLowerInvariant(), result); + // Attempt to load it from PATH + foreach (var p in Environment.GetEnvironmentVariable("PATH").Split(Path.PathSeparator)) + { + var libraryFilename = Path.Combine(p, libraryName); + + if (File.Exists(libraryFilename)) + { + var result = LoadLibrary(libraryFilename); + if (result != IntPtr.Zero) + { + LoadedLibraries.Add(libraryName.ToLowerInvariant(), result); + return; + } + } + } + + throw new InvalidOperationException($"Could not load native library {libraryName} from path [{basePath}] using CPU architecture {cpu}."); } #endif } @@ -77,15 +101,14 @@ public static void PreloadLibrary(string libraryName, Type owner) public static void UnLoad(string libraryName) { #if XENKO_PLATFORM_WINDOWS_DESKTOP + NormalizeLibName(ref libraryName); lock (LoadedLibraries) { - var libName = libraryName.ToLowerInvariant(); - IntPtr libHandle; - if (LoadedLibraries.TryGetValue(libName, out libHandle)) + if (LoadedLibraries.TryGetValue(libraryName, out libHandle)) { FreeLibrary(libHandle); - LoadedLibraries.Remove(libName); + LoadedLibraries.Remove(libraryName); } } #endif @@ -108,6 +131,17 @@ public static void UnLoadAll() #endif } +#if XENKO_PLATFORM_WINDOWS_DESKTOP + private static void NormalizeLibName(ref string libName) + { + libName = libName.ToLowerInvariant(); + if (libName.EndsWith(".dll") == false) + { + libName += ".dll"; + } + } +#endif + #if XENKO_PLATFORM_WINDOWS_DESKTOP private const string SYSINFO_FILE = "kernel32.dll"; diff --git a/sources/core/Xenko.Core/PlatformFolders.cs b/sources/core/Xenko.Core/PlatformFolders.cs index 364c769a8f..329bfbec78 100644 --- a/sources/core/Xenko.Core/PlatformFolders.cs +++ b/sources/core/Xenko.Core/PlatformFolders.cs @@ -94,58 +94,23 @@ internal set [NotNull] private static string GetApplicationLocalDirectory() { -#if XENKO_PLATFORM_ANDROID - var directory = Path.Combine(PlatformAndroid.Context.FilesDir.AbsolutePath, "local"); - Directory.CreateDirectory(directory); - return directory; -#elif XENKO_PLATFORM_UWP - return Windows.Storage.ApplicationData.Current.LocalFolder.Path; -#elif XENKO_PLATFORM_IOS - var directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", "Local"); - Directory.CreateDirectory(directory); - return directory; -#else - // TODO: Should we add "local" ? var directory = Path.Combine(GetApplicationBinaryDirectory(), "local"); Directory.CreateDirectory(directory); return directory; -#endif } [NotNull] private static string GetApplicationRoamingDirectory() { -#if XENKO_PLATFORM_ANDROID - var directory = Path.Combine(PlatformAndroid.Context.FilesDir.AbsolutePath, "roaming"); - Directory.CreateDirectory(directory); - return directory; -#elif XENKO_PLATFORM_UWP - return Windows.Storage.ApplicationData.Current.RoamingFolder.Path; -#elif XENKO_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"); Directory.CreateDirectory(directory); return directory; -#endif } [NotNull] private static string GetApplicationCacheDirectory() { -#if XENKO_PLATFORM_ANDROID - var directory = Path.Combine(PlatformAndroid.Context.FilesDir.AbsolutePath, "cache"); -#elif XENKO_PLATFORM_UWP - var directory = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "cache"); -#elif XENKO_PLATFORM_IOS - var directory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", "Caches"); -#else - // TODO: Should we add "local" ? var directory = Path.Combine(GetApplicationBinaryDirectory(), "cache"); -#endif Directory.CreateDirectory(directory); return directory; } @@ -168,50 +133,57 @@ private static string GetTemporaryDirectory() [NotNull] private static string GetApplicationTemporaryDirectory() { -#if XENKO_PLATFORM_ANDROID - return PlatformAndroid.Context.CacheDir.AbsolutePath; -#elif XENKO_PLATFORM_UWP - return Windows.Storage.ApplicationData.Current.TemporaryFolder.Path; -#elif XENKO_PLATFORM_IOS - return Path.Combine (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "tmp"); -#else return Path.GetTempPath(); -#endif } [NotNull] private static string GetApplicationBinaryDirectory() { -#if XENKO_PLATFORM_WINDOWS_DESKTOP || XENKO_PLATFORM_MONO_MOBILE || XENKO_PLATFORM_UNIX + return FindCoreAssemblyDirectory(GetApplicationExecutableDiretory()); + } + + private static string GetApplicationExecutableDiretory() + { var executableName = GetApplicationExecutablePath(); if (!string.IsNullOrEmpty(executableName)) { return Path.GetDirectoryName(executableName); } - #if XENKO_RUNTIME_CORECLR +#if XENKO_RUNTIME_CORECLR return AppContext.BaseDirectory; - #else - return AppDomain.CurrentDomain.BaseDirectory; - #endif -#elif XENKO_PLATFORM_UWP - return Windows.ApplicationModel.Package.Current.InstalledLocation.Path; #else - throw new NotImplementedException(); + return AppDomain.CurrentDomain.BaseDirectory; #endif } + static string FindCoreAssemblyDirectory(string entryDirectory) + { + //simple case + var corePath = Path.Combine(entryDirectory, "Xenko.Core.dll"); + if (File.Exists(corePath)) + { + return entryDirectory; + } + else //search one level down + { + foreach (var subfolder in Directory.GetDirectories(entryDirectory)) + { + corePath = Path.Combine(subfolder, "Xenko.Core.dll"); + if (File.Exists(corePath)) + { + return subfolder; + } + } + } + + //if nothing found, return input + return entryDirectory; + } + [NotNull] private static string GetApplicationDataDirectory() { -#if XENKO_PLATFORM_ANDROID - return Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Android/data/" + PlatformAndroid.Context.PackageName + "/data"; -#elif XENKO_PLATFORM_IOS - return Foundation.NSBundle.MainBundle.BundlePath + "/data"; -#elif XENKO_PLATFORM_UWP - return Windows.ApplicationModel.Package.Current.InstalledLocation.Path + @"\data"; -#else return Path.Combine(GetApplicationBinaryDirectory(), "data"); -#endif } } } diff --git a/sources/core/Xenko.Core/PropertyContainerClass.cs b/sources/core/Xenko.Core/PropertyContainerClass.cs index 1a51fab848..5785391507 100644 --- a/sources/core/Xenko.Core/PropertyContainerClass.cs +++ b/sources/core/Xenko.Core/PropertyContainerClass.cs @@ -84,6 +84,11 @@ public void CopyTo(ref PropertyContainer destination) inner.CopyTo(ref destination); } + public void CopyTo(PropertyContainerClass destination) + { + inner.CopyTo(ref destination.inner); + } + /// public object Get([NotNull] PropertyKey propertyKey) { diff --git a/sources/core/Xenko.Core/ServiceRegistry.cs b/sources/core/Xenko.Core/ServiceRegistry.cs index 58c0fc402b..17a5a237e8 100644 --- a/sources/core/Xenko.Core/ServiceRegistry.cs +++ b/sources/core/Xenko.Core/ServiceRegistry.cs @@ -22,6 +22,8 @@ // THE SOFTWARE. using System; using System.Collections.Generic; +using System.Threading; +using Xenko.Core.Threading; namespace Xenko.Core { @@ -32,6 +34,8 @@ public class ServiceRegistry : IServiceRegistry { public static readonly PropertyKey ServiceRegistryKey = new PropertyKey(nameof(ServiceRegistryKey), typeof(IServiceRegistry)); + private ReaderWriterLockSlim serviceLocker = new ReaderWriterLockSlim(); + private readonly Dictionary registeredService = new Dictionary(); /// @@ -40,15 +44,22 @@ public class ServiceRegistry : IServiceRegistry /// public event EventHandler ServiceRemoved; + public static ServiceRegistry instance { get; private set; } + + public ServiceRegistry(bool setMainInstance = false) + { + if (setMainInstance) instance = this; + } + /// public T GetService() where T : class { var type = typeof(T); - lock (registeredService) + using (serviceLocker.ReadLock()) { - if (registeredService.ContainsKey(type)) - return (T)registeredService[type]; + if (registeredService.TryGetValue(type, out var service)) + return (T)service; } return null; @@ -61,7 +72,7 @@ public void AddService(T service) if (service == null) throw new ArgumentNullException(nameof(service)); var type = typeof(T); - lock (registeredService) + using (serviceLocker.WriteLock()) { if (registeredService.ContainsKey(type)) throw new ArgumentException("Service is already registered with this type", nameof(type)); @@ -76,7 +87,7 @@ public void RemoveService() { var type = typeof(T); object oldService; - lock (registeredService) + using (serviceLocker.WriteLock()) { if (registeredService.TryGetValue(type, out oldService)) registeredService.Remove(type); diff --git a/sources/core/Xenko.Core/Threading/ConcurrentCollector.cs b/sources/core/Xenko.Core/Threading/ConcurrentCollector.cs index a828e84120..7196e0407c 100644 --- a/sources/core/Xenko.Core/Threading/ConcurrentCollector.cs +++ b/sources/core/Xenko.Core/Threading/ConcurrentCollector.cs @@ -5,6 +5,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Runtime.CompilerServices; using System.Threading; using Xenko.Core.Annotations; @@ -85,11 +86,9 @@ public ConcurrentCollector(int capacity = DefaultCapacity) public T[] Items { + [MethodImpl(MethodImplOptions.AggressiveInlining)] get { - if (head != tail) - throw new InvalidOperationException(); - return head.Items; } } @@ -117,6 +116,7 @@ public void Close() } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public int Add(T item) { var index = Interlocked.Increment(ref count) - 1; @@ -208,6 +208,12 @@ public void Clear(bool fastClear) count = 0; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void UnsafeClear() + { + count = 0; + } + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); @@ -227,10 +233,12 @@ public Enumerator GetEnumerator() public T this[int index] { + [MethodImpl(MethodImplOptions.AggressiveInlining)] get { return Items[index]; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] set { Items[index] = value; diff --git a/sources/core/Xenko.Core/Threading/ConcurrentHashSet.cs b/sources/core/Xenko.Core/Threading/ConcurrentHashSet.cs new file mode 100644 index 0000000000..c5b4bb84c0 --- /dev/null +++ b/sources/core/Xenko.Core/Threading/ConcurrentHashSet.cs @@ -0,0 +1,924 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Threading; + +namespace Xenko.Core.Threading +{ + +#if !NETSTANDARD2_1 + /// Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it. + [AttributeUsage(AttributeTargets.Parameter)] + internal sealed class MaybeNullWhenAttribute : Attribute + { + /// Initializes the attribute with the specified return value condition. + /// + /// The return value condition. If the method returns this value, the associated parameter may be null. + /// + public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; + + /// Gets the return value condition. + public bool ReturnValue { get; } + } +#endif + + /// + /// Represents a thread-safe hash-based unique collection. + /// + /// The type of the items in the collection. + /// + /// All public members of are thread-safe and may be used + /// concurrently from multiple threads. + /// + [DebuggerDisplay("Count = {Count}")] + public class ConcurrentHashSet : IReadOnlyCollection, ICollection + { + private const int DefaultCapacity = 31; + private const int MaxLockNumber = 1024; + + private readonly IEqualityComparer _comparer; + private readonly bool _growLockArray; + + private int _budget; + private volatile Tables _tables; + + private static int DefaultConcurrencyLevel => Environment.ProcessorCount; + + /// + /// Gets the + /// that is used to determine equality for the values in the set. + /// + /// + /// The generic interface implementation that is used to + /// provide hash values and determine equality for the values in the current . + /// + /// + /// requires an equality implementation to determine + /// whether values are equal. You can specify an implementation of the + /// generic interface by using a constructor that accepts a comparer parameter; + /// if you do not specify one, the default generic equality comparer is used. + /// + public IEqualityComparer Comparer => _comparer; + + /// + /// Gets the number of items contained in the . + /// + /// The number of items contained in the . + /// Count has snapshot semantics and represents the number of items in the + /// at the moment when Count was accessed. + public int Count + { + get + { + var count = 0; + var acquiredLocks = 0; + try + { + AcquireAllLocks(ref acquiredLocks); + + var countPerLocks = _tables.CountPerLock; + for (var i = 0; i < countPerLocks.Length; i++) + { + count += countPerLocks[i]; + } + } + finally + { + ReleaseLocks(0, acquiredLocks); + } + + return count; + } + } + + /// + /// Gets a value that indicates whether the is empty. + /// + /// true if the is empty; otherwise, + /// false. + public bool IsEmpty + { + get + { + if (!AreAllBucketsEmpty()) + { + return false; + } + + var acquiredLocks = 0; + try + { + AcquireAllLocks(ref acquiredLocks); + + return AreAllBucketsEmpty(); + } + finally + { + ReleaseLocks(0, acquiredLocks); + } + } + } + + /// + /// Initializes a new instance of the + /// class that is empty, has the default concurrency level, has the default initial capacity, and + /// uses the default comparer for the item type. + /// + public ConcurrentHashSet() + : this(DefaultConcurrencyLevel, DefaultCapacity, true, null) + { + } + + /// + /// Initializes a new instance of the + /// class that is empty, has the specified concurrency level and capacity, and uses the default + /// comparer for the item type. + /// + /// The estimated number of threads that will update the + /// concurrently. + /// The initial number of elements that the + /// can contain. + /// is + /// less than 1. + /// is less than + /// 0. + public ConcurrentHashSet(int concurrencyLevel, int capacity) + : this(concurrencyLevel, capacity, false, null) + { + } + + /// + /// Initializes a new instance of the + /// class that contains elements copied from the specified , has the default concurrency + /// level, has the default initial capacity, and uses the default comparer for the item type. + /// + /// The whose elements are copied to + /// the new + /// . + /// is a null reference. + public ConcurrentHashSet(IEnumerable collection) + : this(collection, null) + { + } + + /// + /// Initializes a new instance of the + /// class that is empty, has the specified concurrency level and capacity, and uses the specified + /// . + /// + /// The + /// implementation to use when comparing items. + public ConcurrentHashSet(IEqualityComparer? comparer) + : this(DefaultConcurrencyLevel, DefaultCapacity, true, comparer) + { + } + + /// + /// Initializes a new instance of the + /// class that contains elements copied from the specified , has the default concurrency level, has the default + /// initial capacity, and uses the specified + /// . + /// + /// The whose elements are copied to + /// the new + /// . + /// The + /// implementation to use when comparing items. + /// is a null reference + /// (Nothing in Visual Basic). + /// + public ConcurrentHashSet(IEnumerable collection, IEqualityComparer? comparer) + : this(comparer) + { + if (collection == null) throw new ArgumentNullException(nameof(collection)); + + InitializeFromCollection(collection); + } + + + /// + /// Initializes a new instance of the + /// class that contains elements copied from the specified , + /// has the specified concurrency level, has the specified initial capacity, and uses the specified + /// . + /// + /// The estimated number of threads that will update the + /// concurrently. + /// The whose elements are copied to the new + /// . + /// The implementation to use + /// when comparing items. + /// + /// is a null reference. + /// + /// + /// is less than 1. + /// + public ConcurrentHashSet(int concurrencyLevel, IEnumerable collection, IEqualityComparer? comparer) + : this(concurrencyLevel, DefaultCapacity, false, comparer) + { + if (collection == null) throw new ArgumentNullException(nameof(collection)); + + InitializeFromCollection(collection); + } + + /// + /// Initializes a new instance of the + /// class that is empty, has the specified concurrency level, has the specified initial capacity, and + /// uses the specified . + /// + /// The estimated number of threads that will update the + /// concurrently. + /// The initial number of elements that the + /// can contain. + /// The + /// implementation to use when comparing items. + /// + /// is less than 1. -or- + /// is less than 0. + /// + public ConcurrentHashSet(int concurrencyLevel, int capacity, IEqualityComparer? comparer) + : this(concurrencyLevel, capacity, false, comparer) + { + } + + private ConcurrentHashSet(int concurrencyLevel, int capacity, bool growLockArray, IEqualityComparer? comparer) + { + if (concurrencyLevel < 1) throw new ArgumentOutOfRangeException(nameof(concurrencyLevel)); + if (capacity < 0) throw new ArgumentOutOfRangeException(nameof(capacity)); + + // The capacity should be at least as large as the concurrency level. Otherwise, we would have locks that don't guard + // any buckets. + if (capacity < concurrencyLevel) + { + capacity = concurrencyLevel; + } + + var locks = new object[concurrencyLevel]; + for (var i = 0; i < locks.Length; i++) + { + locks[i] = new object(); + } + + var countPerLock = new int[locks.Length]; + var buckets = new Node[capacity]; + _tables = new Tables(buckets, locks, countPerLock); + + _growLockArray = growLockArray; + _budget = buckets.Length / locks.Length; + _comparer = comparer ?? EqualityComparer.Default; + } + + /// + /// Adds the specified item to the . + /// + /// The item to add. + /// true if the items was added to the + /// successfully; false if it already exists. + /// The + /// contains too many items. + public bool Add(T item) => + AddInternal(item, _comparer.GetHashCode(item), true); + + /// + /// Removes all items from the . + /// + public void Clear() + { + var locksAcquired = 0; + try + { + AcquireAllLocks(ref locksAcquired); + + if (AreAllBucketsEmpty()) + { + return; + } + + var tables = _tables; + var newTables = new Tables(new Node[DefaultCapacity], tables.Locks, new int[tables.CountPerLock.Length]); + _tables = newTables; + _budget = Math.Max(1, newTables.Buckets.Length / newTables.Locks.Length); + } + finally + { + ReleaseLocks(0, locksAcquired); + } + } + + /// + /// Determines whether the contains the specified + /// item. + /// + /// The item to locate in the . + /// true if the contains the item; otherwise, false. + public bool Contains(T item) => TryGetValue(item, out _); + + /// + /// Searches the for a given value and returns the equal value it finds, if any. + /// + /// The value to search for. + /// The value from the set that the search found, or the default value of when the search yielded no match. + /// A value indicating whether the search was successful. + /// + /// This can be useful when you want to reuse a previously stored reference instead of + /// a newly constructed one (so that more sharing of references can occur) or to look up + /// a value that has more complete data than the value you currently have, although their + /// comparer functions indicate they are equal. + /// + public bool TryGetValue(T equalValue, [MaybeNullWhen(false)] out T actualValue) + { + var hashcode = _comparer.GetHashCode(equalValue); + + // We must capture the _buckets field in a local variable. It is set to a new table on each table resize. + var tables = _tables; + + var bucketNo = GetBucket(hashcode, tables.Buckets.Length); + + // We can get away w/out a lock here. + // The Volatile.Read ensures that the load of the fields of 'n' doesn't move before the load from buckets[i]. + var current = Volatile.Read(ref tables.Buckets[bucketNo]); + + while (current != null) + { + if (hashcode == current.Hashcode && _comparer.Equals(current.Item, equalValue)) + { + actualValue = current.Item; + return true; + } + + current = current.Next; + } + + actualValue = default; + return false; + } + + /// + /// Attempts to remove the item from the . + /// + /// The item to remove. + /// true if an item was removed successfully; otherwise, false. + public bool TryRemove(T item) + { + var hashcode = _comparer.GetHashCode(item); + while (true) + { + var tables = _tables; + + GetBucketAndLockNo(hashcode, out int bucketNo, out int lockNo, tables.Buckets.Length, tables.Locks.Length); + + lock (tables.Locks[lockNo]) + { + // If the table just got resized, we may not be holding the right lock, and must retry. + // This should be a rare occurrence. + if (tables != _tables) + { + continue; + } + + Node? previous = null; + for (var current = tables.Buckets[bucketNo]; current != null; current = current.Next) + { + Debug.Assert((previous == null && current == tables.Buckets[bucketNo]) || previous!.Next == current); + + if (hashcode == current.Hashcode && _comparer.Equals(current.Item, item)) + { + if (previous == null) + { + Volatile.Write(ref tables.Buckets[bucketNo], current.Next); + } + else + { + previous.Next = current.Next; + } + + tables.CountPerLock[lockNo]--; + return true; + } + previous = current; + } + } + + return false; + } + } + + IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)this).GetEnumerator(); + + /// Returns an enumerator that iterates through the . + /// An enumerator for the . + /// + /// The enumerator returned from the collection is safe to use concurrently with + /// reads and writes to the collection, however it does not represent a moment-in-time snapshot + /// of the collection. The contents exposed through the enumerator may contain modifications + /// made to the collection after was called. + /// + IEnumerator IEnumerable.GetEnumerator() => new Enumerator(this); + + /// Returns a value-type enumerator that iterates through the . + /// An enumerator for the . + /// + /// The enumerator returned from the collection is safe to use concurrently with + /// reads and writes to the collection, however it does not represent a moment-in-time snapshot + /// of the collection. The contents exposed through the enumerator may contain modifications + /// made to the collection after was called. + /// + public Enumerator GetEnumerator() => new Enumerator(this); + + /// + /// Represents an enumerator for . + /// + public struct Enumerator : IEnumerator + { + // Provides a manually-implemented version of (approximately) this iterator: + // Node?[] buckets = _tables.Buckets; + // for (int i = 0; i < buckets.Length; i++) + // for (Node? current = Volatile.Read(ref buckets[i]); current != null; current = current.Next) + // yield return new current.Item; + + private readonly ConcurrentHashSet _set; + + private Node?[]? _buckets; + private Node? _node; + private int _i; + private int _state; + + private const int StateUninitialized = 0; + private const int StateOuterloop = 1; + private const int StateInnerLoop = 2; + private const int StateDone = 3; + + /// + /// Constructs an enumerator for . + /// + public Enumerator(ConcurrentHashSet set) + { + _set = set; + _buckets = null; + _node = null; + Current = default!; + _i = -1; + _state = StateUninitialized; + } + + /// + /// Gets the element in the collection at the current position of the enumerator. + /// + /// The element in the collection at the current position of the enumerator. + public T Current { get; private set; } + + object? IEnumerator.Current => Current; + + /// + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// + public void Reset() + { + _buckets = null; + _node = null; + Current = default!; + _i = -1; + _state = StateUninitialized; + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() { } + + /// + /// Advances the enumerator to the next element of the collection. + /// + /// true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + public bool MoveNext() + { + switch (_state) + { + case StateUninitialized: + _buckets = _set._tables.Buckets; + _i = -1; + goto case StateOuterloop; + + case StateOuterloop: + Node?[]? buckets = _buckets; + Debug.Assert(buckets != null); + + int i = ++_i; + if ((uint)i < (uint)buckets!.Length) + { + // The Volatile.Read ensures that we have a copy of the reference to buckets[i]: + // this protects us from reading fields ('_key', '_value' and '_next') of different instances. + _node = Volatile.Read(ref buckets[i]); + _state = StateInnerLoop; + goto case StateInnerLoop; + } + goto default; + + case StateInnerLoop: + Node? node = _node; + if (node != null) + { + Current = node.Item; + _node = node.Next; + return true; + } + goto case StateOuterloop; + + default: + _state = StateDone; + return false; + } + } + } + + void ICollection.Add(T item) => Add(item); + + bool ICollection.IsReadOnly => false; + + void ICollection.CopyTo(T[] array, int arrayIndex) + { + if (array == null) throw new ArgumentNullException(nameof(array)); + if (arrayIndex < 0) throw new ArgumentOutOfRangeException(nameof(arrayIndex)); + + var locksAcquired = 0; + try + { + AcquireAllLocks(ref locksAcquired); + + var count = 0; + + var countPerLock = _tables.CountPerLock; + for (var i = 0; i < countPerLock.Length && count >= 0; i++) + { + count += countPerLock[i]; + } + + if (array.Length - count < arrayIndex || count < 0) //"count" itself or "count + arrayIndex" can overflow + { + throw new ArgumentException("The index is equal to or greater than the length of the array, or the number of elements in the set is greater than the available space from index to the end of the destination array."); + } + + CopyToItems(array, arrayIndex); + } + finally + { + ReleaseLocks(0, locksAcquired); + } + } + + bool ICollection.Remove(T item) => TryRemove(item); + + private void InitializeFromCollection(IEnumerable collection) + { + foreach (var item in collection) + { + AddInternal(item, _comparer.GetHashCode(item), false); + } + + if (_budget == 0) + { + var tables = _tables; + _budget = tables.Buckets.Length / tables.Locks.Length; + } + } + + private bool AddInternal(T item, int hashcode, bool acquireLock) + { + while (true) + { + var tables = _tables; + + GetBucketAndLockNo(hashcode, out int bucketNo, out int lockNo, tables.Buckets.Length, tables.Locks.Length); + + var resizeDesired = false; + var lockTaken = false; + try + { + if (acquireLock) + Monitor.Enter(tables.Locks[lockNo], ref lockTaken); + + // If the table just got resized, we may not be holding the right lock, and must retry. + // This should be a rare occurrence. + if (tables != _tables) + { + continue; + } + + // Try to find this item in the bucket + Node? previous = null; + for (var current = tables.Buckets[bucketNo]; current != null; current = current.Next) + { + Debug.Assert(previous == null && current == tables.Buckets[bucketNo] || previous!.Next == current); + if (hashcode == current.Hashcode && _comparer.Equals(current.Item, item)) + { + return false; + } + previous = current; + } + + // The item was not found in the bucket. Insert the new item. + Volatile.Write(ref tables.Buckets[bucketNo], new Node(item, hashcode, tables.Buckets[bucketNo])); + checked + { + tables.CountPerLock[lockNo]++; + } + + // + // If the number of elements guarded by this lock has exceeded the budget, resize the bucket table. + // It is also possible that GrowTable will increase the budget but won't resize the bucket table. + // That happens if the bucket table is found to be poorly utilized due to a bad hash function. + // + if (tables.CountPerLock[lockNo] > _budget) + { + resizeDesired = true; + } + } + finally + { + if (lockTaken) + Monitor.Exit(tables.Locks[lockNo]); + } + + // + // The fact that we got here means that we just performed an insertion. If necessary, we will grow the table. + // + // Concurrency notes: + // - Notice that we are not holding any locks at when calling GrowTable. This is necessary to prevent deadlocks. + // - As a result, it is possible that GrowTable will be called unnecessarily. But, GrowTable will obtain lock 0 + // and then verify that the table we passed to it as the argument is still the current table. + // + if (resizeDesired) + { + GrowTable(tables); + } + + return true; + } + } + + private static int GetBucket(int hashcode, int bucketCount) + { + var bucketNo = (hashcode & 0x7fffffff) % bucketCount; + Debug.Assert(bucketNo >= 0 && bucketNo < bucketCount); + return bucketNo; + } + + private static void GetBucketAndLockNo(int hashcode, out int bucketNo, out int lockNo, int bucketCount, int lockCount) + { + bucketNo = (hashcode & 0x7fffffff) % bucketCount; + lockNo = bucketNo % lockCount; + + Debug.Assert(bucketNo >= 0 && bucketNo < bucketCount); + Debug.Assert(lockNo >= 0 && lockNo < lockCount); + } + + private bool AreAllBucketsEmpty() + { + var countPerLock = _tables.CountPerLock; + for (var i = 0; i < countPerLock.Length; i++) + { + if (countPerLock[i] != 0) + { + return false; + } + } + + return true; + } + + private void GrowTable(Tables tables) + { + const int maxArrayLength = 0X7FEFFFFF; + var locksAcquired = 0; + try + { + // The thread that first obtains _locks[0] will be the one doing the resize operation + AcquireLocks(0, 1, ref locksAcquired); + + // Make sure nobody resized the table while we were waiting for lock 0: + if (tables != _tables) + { + // We assume that since the table reference is different, it was already resized (or the budget + // was adjusted). If we ever decide to do table shrinking, or replace the table for other reasons, + // we will have to revisit this logic. + return; + } + + // Compute the (approx.) total size. Use an Int64 accumulation variable to avoid an overflow. + long approxCount = 0; + for (var i = 0; i < tables.CountPerLock.Length; i++) + { + approxCount += tables.CountPerLock[i]; + } + + // + // If the bucket array is too empty, double the budget instead of resizing the table + // + if (approxCount < tables.Buckets.Length / 4) + { + _budget = 2 * _budget; + if (_budget < 0) + { + _budget = int.MaxValue; + } + return; + } + + // Compute the new table size. We find the smallest integer larger than twice the previous table size, and not divisible by + // 2,3,5 or 7. We can consider a different table-sizing policy in the future. + var newLength = 0; + var maximizeTableSize = false; + try + { + checked + { + // Double the size of the buckets table and add one, so that we have an odd integer. + newLength = tables.Buckets.Length * 2 + 1; + + // Now, we only need to check odd integers, and find the first that is not divisible + // by 3, 5 or 7. + while (newLength % 3 == 0 || newLength % 5 == 0 || newLength % 7 == 0) + { + newLength += 2; + } + + Debug.Assert(newLength % 2 != 0); + + if (newLength > maxArrayLength) + { + maximizeTableSize = true; + } + } + } + catch (OverflowException) + { + maximizeTableSize = true; + } + + if (maximizeTableSize) + { + newLength = maxArrayLength; + + // We want to make sure that GrowTable will not be called again, since table is at the maximum size. + // To achieve that, we set the budget to int.MaxValue. + // + // (There is one special case that would allow GrowTable() to be called in the future: + // calling Clear() on the ConcurrentHashSet will shrink the table and lower the budget.) + _budget = int.MaxValue; + } + + // Now acquire all other locks for the table + AcquireLocks(1, tables.Locks.Length, ref locksAcquired); + + var newLocks = tables.Locks; + + // Add more locks + if (_growLockArray && tables.Locks.Length < MaxLockNumber) + { + newLocks = new object[tables.Locks.Length * 2]; + Array.Copy(tables.Locks, newLocks, tables.Locks.Length); + for (var i = tables.Locks.Length; i < newLocks.Length; i++) + { + newLocks[i] = new object(); + } + } + + var newBuckets = new Node[newLength]; + var newCountPerLock = new int[newLocks.Length]; + + // Copy all data into a new table, creating new nodes for all elements + for (var i = 0; i < tables.Buckets.Length; i++) + { + var current = tables.Buckets[i]; + while (current != null) + { + var next = current.Next; + GetBucketAndLockNo(current.Hashcode, out int newBucketNo, out int newLockNo, newBuckets.Length, newLocks.Length); + + newBuckets[newBucketNo] = new Node(current.Item, current.Hashcode, newBuckets[newBucketNo]); + + checked + { + newCountPerLock[newLockNo]++; + } + + current = next; + } + } + + // Adjust the budget + _budget = Math.Max(1, newBuckets.Length / newLocks.Length); + + // Replace tables with the new versions + _tables = new Tables(newBuckets, newLocks, newCountPerLock); + } + finally + { + // Release all locks that we took earlier + ReleaseLocks(0, locksAcquired); + } + } + + private void AcquireAllLocks(ref int locksAcquired) + { + // First, acquire lock 0 + AcquireLocks(0, 1, ref locksAcquired); + + // Now that we have lock 0, the _locks array will not change (i.e., grow), + // and so we can safely read _locks.Length. + AcquireLocks(1, _tables.Locks.Length, ref locksAcquired); + Debug.Assert(locksAcquired == _tables.Locks.Length); + } + + private void AcquireLocks(int fromInclusive, int toExclusive, ref int locksAcquired) + { + Debug.Assert(fromInclusive <= toExclusive); + var locks = _tables.Locks; + + for (var i = fromInclusive; i < toExclusive; i++) + { + var lockTaken = false; + try + { + Monitor.Enter(locks[i], ref lockTaken); + } + finally + { + if (lockTaken) + { + locksAcquired++; + } + } + } + } + + private void ReleaseLocks(int fromInclusive, int toExclusive) + { + Debug.Assert(fromInclusive <= toExclusive); + + for (var i = fromInclusive; i < toExclusive; i++) + { + Monitor.Exit(_tables.Locks[i]); + } + } + + private void CopyToItems(T[] array, int index) + { + var buckets = _tables.Buckets; + for (var i = 0; i < buckets.Length; i++) + { + for (var current = buckets[i]; current != null; current = current.Next) + { + array[index] = current.Item; + index++; //this should never flow, CopyToItems is only called when there's no overflow risk + } + } + } + + private class Tables + { + public readonly Node?[] Buckets; + public readonly object[] Locks; + + public readonly int[] CountPerLock; + + public Tables(Node?[] buckets, object[] locks, int[] countPerLock) + { + Buckets = buckets; + Locks = locks; + CountPerLock = countPerLock; + } + } + + private class Node + { + public readonly T Item; + public readonly int Hashcode; + + public volatile Node? Next; + + public Node(T item, int hashcode, Node? next) + { + Item = item; + Hashcode = hashcode; + Next = next; + } + } + } +} diff --git a/sources/core/Xenko.Core/Threading/Dispatcher.cs b/sources/core/Xenko.Core/Threading/Dispatcher.cs index f2ca4e9e40..881da95aab 100644 --- a/sources/core/Xenko.Core/Threading/Dispatcher.cs +++ b/sources/core/Xenko.Core/Threading/Dispatcher.cs @@ -16,6 +16,7 @@ public class Dispatcher public static int MaxDegreeOfParallelism = 1; #else public static int MaxDegreeOfParallelism = Environment.ProcessorCount; + public static int MaxPhysicsParallelism = Math.Max(4, MaxDegreeOfParallelism / 3); #endif public delegate void ValueAction(ref T obj); diff --git a/sources/core/Xenko.Core/Threading/FastConcurrentCollector.cs b/sources/core/Xenko.Core/Threading/FastConcurrentCollector.cs new file mode 100644 index 0000000000..c12575ed25 --- /dev/null +++ b/sources/core/Xenko.Core/Threading/FastConcurrentCollector.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace Xenko.Core.Threading +{ + /// + /// Minimally protected collector designed for simplicity and speed. Only Add is really thread-safe. + /// + public class FastConcurrentCollector + { + private int len; + + public int Count => len; + public T[] Collected; + + public int Capacity => Collected.Length; + + public FastConcurrentCollector(int capacity) { + Collected = new T[capacity]; + } + + public void Resize(int newSize) + { + Array.Resize(ref Collected, newSize); + } + + public void Clear() + { + len = 0; + } + + public void Add(T item) + { + int index = Interlocked.Increment(ref len) - 1; + Collected[index] = item; + } + } +} diff --git a/sources/core/Xenko.Core/Threading/RWLSExtension.cs b/sources/core/Xenko.Core/Threading/RWLSExtension.cs new file mode 100644 index 0000000000..dfc8e4c63f --- /dev/null +++ b/sources/core/Xenko.Core/Threading/RWLSExtension.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace Xenko.Core.Threading +{ + public static class RWLSExtension + { + public static ReadLockHelper ReadLock(this ReaderWriterLockSlim readerWriterLock) + { + return new ReadLockHelper(readerWriterLock); + } + + public static UpgradeableReadLockHelper UpgradableReadLock(this ReaderWriterLockSlim readerWriterLock) + { + return new UpgradeableReadLockHelper(readerWriterLock); + } + + public static WriteLockHelper WriteLock(this ReaderWriterLockSlim readerWriterLock) + { + return new WriteLockHelper(readerWriterLock); + } + + public struct ReadLockHelper : IDisposable + { + private readonly ReaderWriterLockSlim readerWriterLock; + + public ReadLockHelper(ReaderWriterLockSlim readerWriterLock) + { + readerWriterLock.EnterReadLock(); + this.readerWriterLock = readerWriterLock; + } + + public void Dispose() + { + this.readerWriterLock.ExitReadLock(); + } + } + + public struct UpgradeableReadLockHelper : IDisposable + { + private readonly ReaderWriterLockSlim readerWriterLock; + + public UpgradeableReadLockHelper(ReaderWriterLockSlim readerWriterLock) + { + readerWriterLock.EnterUpgradeableReadLock(); + this.readerWriterLock = readerWriterLock; + } + + public void Dispose() + { + this.readerWriterLock.ExitUpgradeableReadLock(); + } + } + + public struct WriteLockHelper : IDisposable + { + private readonly ReaderWriterLockSlim readerWriterLock; + + public WriteLockHelper(ReaderWriterLockSlim readerWriterLock) + { + readerWriterLock.EnterWriteLock(); + this.readerWriterLock = readerWriterLock; + } + + public void Dispose() + { + this.readerWriterLock.ExitWriteLock(); + } + } + } +} diff --git a/sources/core/Xenko.Core/Threading/ThreadPool.cs b/sources/core/Xenko.Core/Threading/ThreadPool.cs index a371ff0397..299f90fd22 100644 --- a/sources/core/Xenko.Core/Threading/ThreadPool.cs +++ b/sources/core/Xenko.Core/Threading/ThreadPool.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using Xenko.Core.Annotations; @@ -12,73 +13,59 @@ namespace Xenko.Core.Threading /// /// Thread pool for scheduling actions. /// - /// - /// Base on Stephen Toub's ManagedThreadPool - /// - internal class ThreadPool + public class ThreadPool { - private const long MaxIdleTimeInTicks = 5 * TimeSpan.TicksPerSecond; - public static readonly ThreadPool Instance = new ThreadPool(); - private readonly int maxThreadCount = Environment.ProcessorCount + 2; private readonly Queue workItems = new Queue(); - private readonly ManualResetEvent workAvailable = new ManualResetEvent(false); + private readonly AutoResetEvent workAvailable = new AutoResetEvent(false); private SpinLock spinLock = new SpinLock(); - private int workingCount; - /// Usage only within - private int aliveCount; + public ThreadPool() + { + // fire up worker threads + ThreadStart ts = new ThreadStart(ProcessWorkItems); + for (int i = 0; i < Dispatcher.MaxDegreeOfParallelism; i++) + { + Thread t = new Thread(ts); + t.Name = "ThreadPool #" + i; + t.IsBackground = true; + t.Start(); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void QueueWorkItem([NotNull] [Pooled] Action workItem) { - var lockTaken = false; + PooledDelegateHelper.AddReference(workItem); + bool lockTaken = false; try { spinLock.Enter(ref lockTaken); - - PooledDelegateHelper.AddReference(workItem); workItems.Enqueue(workItem); - workAvailable.Set(); - - var curWorkingCount = Interlocked.CompareExchange(ref workingCount, 0, 0); - if (curWorkingCount + 1 >= aliveCount && aliveCount < maxThreadCount) - { - aliveCount++; - Task.Factory.StartNew(ProcessWorkItems, TaskCreationOptions.LongRunning); - } } finally { if (lockTaken) spinLock.Exit(true); } + + workAvailable.Set(); } - private void ProcessWorkItems(object state) + private void ProcessWorkItems() { - long lastWork = Stopwatch.GetTimestamp(); - TimeSpan maxIdleTime = TimeSpan.FromTicks(MaxIdleTimeInTicks); - while(true) + while (true) { Action workItem = null; var lockTaken = false; - bool idleForTooLong = Utilities.ConvertRawToTimestamp(Stopwatch.GetTimestamp() - lastWork) < maxIdleTime; try { spinLock.Enter(ref lockTaken); if (workItems.Count > 0) - { workItem = workItems.Dequeue(); - if (workItems.Count == 0) - workAvailable.Reset(); - } - else if (idleForTooLong) - { - aliveCount--; - return; - } } finally { @@ -86,9 +73,9 @@ private void ProcessWorkItems(object state) spinLock.Exit(true); } + // do we have a job to do? if (workItem != null) { - Interlocked.Increment(ref workingCount); try { workItem.Invoke(); @@ -97,13 +84,10 @@ private void ProcessWorkItems(object state) { // Ignoring Exception } - Interlocked.Decrement(ref workingCount); PooledDelegateHelper.Release(workItem); - lastWork = Stopwatch.GetTimestamp(); } - - // Wait for another work item to be (potentially) available - workAvailable.WaitOne(maxIdleTime); + // couldn't find work, wait until some more is available + else workAvailable.WaitOne(); } } } diff --git a/sources/core/Xenko.Core/Utilities.cs b/sources/core/Xenko.Core/Utilities.cs index b616987788..a95fccca33 100644 --- a/sources/core/Xenko.Core/Utilities.cs +++ b/sources/core/Xenko.Core/Utilities.cs @@ -29,8 +29,8 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using System.Security; using System.Text; +using System.Threading; using Xenko.Core.Annotations; using Xenko.Core.Native; @@ -41,31 +41,23 @@ namespace Xenko.Core /// public static class Utilities { -#if XENKO_PLATFORM_UWP - public static unsafe void CopyMemory(IntPtr dest, IntPtr src, int sizeInBytesToCopy) - { - Interop.memcpy((void*)dest, (void*)src, sizeInBytesToCopy); - } -#else -#if XENKO_PLATFORM_WINDOWS_DESKTOP - private const string MemcpyDll = "msvcrt.dll"; -#elif XENKO_PLATFORM_ANDROID - private const string MemcpyDll = "libc.so"; -#elif XENKO_PLATFORM_UNIX - // We do not specifiy the .so extension as libc.so on Linux - // is actually not a .so files but a script. Using just libc - // will automatically find the corresponding .so. - private const string MemcpyDll = "libc"; -#elif XENKO_PLATFORM_IOS - private const string MemcpyDll = ObjCRuntime.Constants.SystemLibrary; -#else -# error Unsupported platform -#endif - [DllImport(MemcpyDll, EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)] -#if !XENKO_RUNTIME_CORECLR - [SuppressUnmanagedCodeSecurity] -#endif - private static extern IntPtr CopyMemory(IntPtr dest, IntPtr src, ulong sizeInBytesToCopy); + /// + /// Creates a TimeSpan with precise tick count, normal "From" methods do weird rounding. + /// + public static TimeSpan FromMillisecondsPrecise(double milliSeconds) + => TimeSpan.FromTicks((long)(milliSeconds * TimeSpan.TicksPerMillisecond)); + + /// + /// Creates a TimeSpan with precise tick count, normal "From" methods do weird rounding. + /// + public static TimeSpan FromSecondsPrecise(double seconds) + => TimeSpan.FromTicks((long)(seconds * TimeSpan.TicksPerSecond)); + + /// + /// Creates a TimeSpan with precise tick count, normal "From" methods do weird rounding. + /// + public static TimeSpan FromMinutesPrecise(double minutes) + => TimeSpan.FromTicks((long)(minutes * TimeSpan.TicksPerMinute)); /// /// Copy memory. @@ -73,11 +65,14 @@ public static unsafe void CopyMemory(IntPtr dest, IntPtr src, int sizeInBytesToC /// The destination memory location /// The source memory location. /// The count. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void CopyMemory(IntPtr dest, IntPtr src, int sizeInBytesToCopy) { - CopyMemory(dest, src, (ulong)sizeInBytesToCopy); + unsafe + { + Buffer.MemoryCopy((void*)src, (void*)dest, sizeInBytesToCopy, sizeInBytesToCopy); + } } -#endif /// /// Compares two block of memory. @@ -514,7 +509,7 @@ public static byte[] ReadStream([NotNull] Stream stream, ref int readLength) System.Diagnostics.Debug.Assert(num >= 0); if (num == 0) - return new byte[0]; + return Array.Empty(); var buffer = new byte[num]; var bytesRead = 0; @@ -657,6 +652,21 @@ public static bool Compare(IDictionary first, IDicti return second.Keys.All(first.ContainsKey); } + /// + /// Compares two collection, element by elements. + /// + /// The collection to compare from. + /// The colllection to compare to. + /// True if lists are identical (but not necessarily in the same order). False otherwise. + /// Concrete SortedList is favored over interface to avoid enumerator object allocation. + public static bool Compare(Collections.SortedList first, Collections.SortedList second) + { + if (ReferenceEquals(first, second)) return true; + if (ReferenceEquals(first, null) || ReferenceEquals(second, null)) return false; + + return first.Equals(second); + } + public static bool Compare(T[] left, T[] right) { if (ReferenceEquals(left, right)) @@ -712,6 +722,33 @@ public static bool Compare(ICollection left, ICollection right) return true; } + /// + /// Compares two list, element by elements. + /// + /// The list to compare from. + /// The colllection to compare to. + /// True if lists are sequentially equal. False otherwise. + /// Concrete List is favored over interface to avoid enumerator object allocation. + public static bool Compare(List left, List right) + { + if (ReferenceEquals(left, right)) + return true; + if (ReferenceEquals(left, null) || ReferenceEquals(right, null)) + return false; + + if (left.Count != right.Count) + return false; + + var comparer = EqualityComparer.Default; + for (int i = 0; i < left.Count; i ++) + { + if (!comparer.Equals(left[i], right[i])) + return false; + } + + return true; + } + /// /// Swaps the value between two references. /// @@ -731,12 +768,7 @@ public static void Swap(ref T left, ref T right) /// The duration of sleep. public static void Sleep(TimeSpan sleepTime) { - var ms = (long)sleepTime.TotalMilliseconds; - if (ms < 0 || ms > int.MaxValue) - { - throw new ArgumentOutOfRangeException(nameof(sleepTime), "Sleep time must be a duration less than '2^31 - 1' milliseconds."); - } - NativeInvoke.Sleep((int)ms); + Thread.Sleep((int)sleepTime.TotalMilliseconds); } /// @@ -745,7 +777,7 @@ public static void Sleep(TimeSpan sleepTime) /// The duration of sleep in milliseconds. public static void Sleep(int sleepTimeInMillis) { - NativeInvoke.Sleep(sleepTimeInMillis); + Thread.Sleep(sleepTimeInMillis); } /// diff --git a/sources/core/Xenko.Core/Xenko.Core.csproj b/sources/core/Xenko.Core/Xenko.Core.csproj index b17b6f6e2a..222c23ae15 100644 --- a/sources/core/Xenko.Core/Xenko.Core.csproj +++ b/sources/core/Xenko.Core/Xenko.Core.csproj @@ -3,7 +3,7 @@ true - + Core assembly for all Xenko assemblies. @@ -12,7 +12,6 @@ - true libcore true --auto-module-initializer --serialization @@ -22,21 +21,7 @@ - - - - - - - - - - - - - - - + PreserveNewest @@ -49,7 +34,9 @@ - + + + @@ -111,7 +98,7 @@ TupleSerializer.cs - + @@ -121,5 +108,8 @@ - + + + + diff --git a/sources/core/Xenko.Core/build/Xenko.Core.targets b/sources/core/Xenko.Core/build/Xenko.Core.targets index 509bf8090d..0f1059b6f4 100644 --- a/sources/core/Xenko.Core/build/Xenko.Core.targets +++ b/sources/core/Xenko.Core/build/Xenko.Core.targets @@ -1,17 +1,4 @@ - - - - - - - - - - + @@ -63,8 +50,8 @@ true - $(MSBuildThisFileDirectory)..\tools\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed.exe - $(MSBuildThisFileDirectory)..\..\..\..\deps\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed.exe + $(MSBuildThisFileDirectory)..\tools\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed2.exe + $(MSBuildThisFileDirectory)..\..\..\..\deps\AssemblyProcessor\Xenko.Core.AssemblyProcessor.Packed2.exe diff --git a/sources/data/images/focus-logo-small.png b/sources/data/images/focus-logo-small.png new file mode 100644 index 0000000000..94cc23f633 --- /dev/null +++ b/sources/data/images/focus-logo-small.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe5074d3dd03e0e6fbc200e5e5d4d52d9b2b44f20e16f147dc3b62b97a58b9e1 +size 74851 diff --git a/sources/data/images/focus-logo.jpg b/sources/data/images/focus-logo.jpg new file mode 100644 index 0000000000..24f3febbd6 --- /dev/null +++ b/sources/data/images/focus-logo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f41504f655cba81e521d07ba71c537ab1fc4fd5dc495cdb7033e5789cdefc5 +size 99696 diff --git a/sources/data/images/focus-logo.png b/sources/data/images/focus-logo.png new file mode 100644 index 0000000000..5de3a0dfa3 --- /dev/null +++ b/sources/data/images/focus-logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e9d9d30235300eee58951379bc851900d0f07240a7053df94ac33a46cfa2099 +size 245632 diff --git a/sources/data/images/icon.ico b/sources/data/images/icon.ico new file mode 100644 index 0000000000..cf8c0e9594 Binary files /dev/null and b/sources/data/images/icon.ico differ diff --git a/sources/data/images/icon.png b/sources/data/images/icon.png new file mode 100644 index 0000000000..4b5059507f --- /dev/null +++ b/sources/data/images/icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs b/sources/editor/Xenko.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs index 1126ff9d9d..966a61ba83 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssemblyReloading/GameStudioAssemblyReloader.cs @@ -134,7 +134,7 @@ private static void PostAssemblyReloading(IUndoRedoService actionService, Sessio if (itemToReload.Overrides != null) { var extendedPath = itemToReload.GraphPath.Clone(); - if (itemToReload.GraphPathIndex != Index.Empty) + if (itemToReload.GraphPathIndex != NodeIndex.Empty) extendedPath.PushIndex(itemToReload.GraphPathIndex); var pathToPrepend = AssetNodeMetadataCollectorBase.ConvertPath(extendedPath); @@ -165,7 +165,7 @@ private static void ClearNode(IUndoRedoService actionService, AssetViewModel ass // TODO: Share this code with ContentValueChangeOperation? // TODO: How to better detect CollectionAdd vs ValueChange? ContentChangeType operationType; - if (index != Index.Empty) + if (index != NodeIndex.Empty) { CollectionItemIdentifiers ids; if (CollectionItemIdHelper.TryGetCollectionItemIds(node.Retrieve(), out ids)) @@ -199,7 +199,7 @@ private static void ReplaceNode(IUndoRedoService actionService, AssetViewModel a // TODO: Share this code with ContentValueChangeOperation? // TODO: How to better detect CollectionAdd vs ValueChange? ContentChangeType operationType; - if (index != Index.Empty) + if (index != NodeIndex.Empty) { operationType = ContentChangeType.CollectionAdd; ((IAssetObjectNode)node).Restore(itemToReload.UpdatedObject, index, itemToReload.ItemId); @@ -263,6 +263,13 @@ public override void VisitDictionaryKeyValue(object dictionary, DictionaryDescri //base.VisitDictionaryKeyValue(dictionary, descriptor, key, keyDescriptor, value, valueDescriptor); } + public override void VisitSetItem(IEnumerable set, SetDescriptor descriptor, object item, ITypeDescriptor itemDescriptor) + { + if (ProcessObject(item, itemDescriptor.Type)) return; + + base.VisitSetItem(set, descriptor, item, itemDescriptor); + } + protected abstract bool ProcessObject(object obj, Type expectedType); } @@ -292,7 +299,7 @@ protected override bool ProcessObject(object obj, Type expectedType) // TODO: More advanced checks if IUnloadable is supposed to be a type from the unloaded assembly (this would avoid processing unecessary IUnloadable) if (obj != null && (UnloadedAssemblies.Contains(obj.GetType().Assembly) || obj is IUnloadable)) { - Index index; + NodeIndex index; var settings = new SerializerContextSettings(Log); var path = GraphNodePath.From(propertyGraph.RootNode, CurrentPath, out index); @@ -321,12 +328,12 @@ protected override bool ProcessObject(object obj, Type expectedType) return false; } - private static YamlAssetMetadata RemoveFirstIndexInYamlPath([CanBeNull] YamlAssetMetadata metadata, Index index) + private static YamlAssetMetadata RemoveFirstIndexInYamlPath([CanBeNull] YamlAssetMetadata metadata, NodeIndex index) { if (metadata != null) { // If we had an index we need to remove it from our override paths - if (index != Index.Empty) + if (index != NodeIndex.Empty) { var fixedMetadata = new YamlAssetMetadata(); foreach (var entry in metadata) @@ -390,7 +397,7 @@ protected override bool ProcessObject(object obj, Type expectedType) foreach (var reference in references) { var basePathWithIndex = basePath.Clone(); - if (unloadedObject.GraphPathIndex != Index.Empty) + if (unloadedObject.GraphPathIndex != NodeIndex.Empty) { if (unloadedObject.ItemId == ItemId.Empty) basePathWithIndex.PushIndex(unloadedObject.GraphPathIndex.Value); @@ -440,7 +447,7 @@ private class ItemToReload /// /// The additional index to apply on the graph path to reach the item. /// - public Index GraphPathIndex; + public NodeIndex GraphPathIndex; /// /// The identifier of the item to reload, if relevant. diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs index 09d5f5523d..d1cb1eb3d4 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/AssetCompositeGameEditor/ViewModels/AssetCompositeHierarchyEditorViewModel.cs @@ -137,11 +137,10 @@ public override void Destroy() [CanBeNull] public override IEditorGamePartViewModel FindPartViewModel(AbsoluteId id) { - var item = RootPart as IEditorGamePartViewModel; - if (item != null && id == item.Id) + if (RootPart is IEditorGamePartViewModel item && id == item.Id) return item; - - return RootPart?.EnumerateChildren().BreadthFirst(x => x.EnumerateChildren()).OfType().FirstOrDefault(part => part.Id == id); + + return RootPart?.EnumerateChildren().BreadthFirst(x => x.EnumerateChildren()).FirstOrDefault(part => part is IEditorGamePartViewModel viewModel && viewModel.Id == id) as IEditorGamePartViewModel; } /// @@ -470,7 +469,7 @@ protected async Task PasteIntoItems([NotNull] [ItemNotNull] IEnumerable CreateEntity(EntityHierarchyItemViewModel parent) - { - var name = ComputeNewName(parent, "AudioEmitter"); - var component = new AudioEmitterComponent(); - return CreateEntityWithComponent(name, component); - } - } - [Display(20, "Audio listener", "Audio")] public class AudioListenerFactory : EntityFactory { diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/LightEntityFactory.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/LightEntityFactory.cs index c8aa2bf2a4..db79015d16 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/LightEntityFactory.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/EntityFactories/LightEntityFactory.cs @@ -9,6 +9,8 @@ using Xenko.Engine; using Xenko.Rendering.Lights; using Xenko.Rendering.Skyboxes; +using Xenko.Rendering.Voxels.VoxelGI; +using Xenko.Rendering.Voxels; namespace Xenko.Assets.Presentation.AssetEditors.EntityHierarchyEditor.EntityFactories { @@ -87,7 +89,29 @@ public override async Task CreateEntity(EntityHierarchyItemViewModel par } } - [Display(60, "Light probe", "Light")] + [Display(60, "Voxel light", "Light")] + public class VoxelLightEntityFactory : EntityFactory + { + public override Task CreateEntity(EntityHierarchyItemViewModel parent) + { + var name = ComputeNewName(parent, "Voxel light"); + var component = new LightComponent { Type = new LightVoxel() }; + return CreateEntityWithComponent(name, component); + } + } + + [Display(65, "Voxel volume", "Light")] + public class VoxelVolumeEntityFactory : EntityFactory + { + public override Task CreateEntity(EntityHierarchyItemViewModel parent) + { + var name = ComputeNewName(parent, "Voxel volume"); + var component = new VoxelVolumeComponent { Attributes = { new VoxelAttributeEmissionOpacity() } }; + return CreateEntityWithComponent(name, component); + } + } + + [Display(70, "Light probe", "Light")] public class LightProbeEntityFactory : EntityFactory { public override async Task CreateEntity(EntityHierarchyItemViewModel parent) diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameCameraPreviewService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameCameraPreviewService.cs index 9ddaae53c2..aeb034a0ec 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameCameraPreviewService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameCameraPreviewService.cs @@ -313,7 +313,12 @@ protected override void DrawCore(RenderContext context, RenderDrawContext drawCo // Allocate a RT for the incrust GeneratedIncrust = drawContext.GraphicsContext.Allocator.GetTemporaryTexture2D(TextureDescription.New2D((int)Viewport.Width, (int)Viewport.Height, 1, drawContext.CommandList.RenderTarget.Format, TextureFlags.ShaderResource | TextureFlags.RenderTarget)); - var depthBuffer = drawContext.CommandList.DepthStencilBuffer != null ? drawContext.GraphicsContext.Allocator.GetTemporaryTexture2D(TextureDescription.New2D((int)Viewport.Width, (int)Viewport.Height, 1, drawContext.CommandList.DepthStencilBuffer.Format, TextureFlags.DepthStencil)) : null; + + var depthBufferTextureFlags = TextureFlags.DepthStencil; + if (context.GraphicsDevice.Features.HasDepthAsSRV) + depthBufferTextureFlags |= TextureFlags.ShaderResource; + + var depthBuffer = drawContext.CommandList.DepthStencilBuffer != null ? drawContext.GraphicsContext.Allocator.GetTemporaryTexture2D(TextureDescription.New2D((int)Viewport.Width, (int)Viewport.Height, 1, drawContext.CommandList.DepthStencilBuffer.Format, depthBufferTextureFlags)) : null; // Push and set render target using (drawContext.PushRenderTargetsAndRestore()) diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentChangeWatcherService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentChangeWatcherService.cs index f9c86a3b83..8fa1604bdb 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentChangeWatcherService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentChangeWatcherService.cs @@ -68,9 +68,8 @@ private void RegisterComponent(EntityComponent component) private void UnregisterComponent(EntityComponent component) { - if (component != null && registeredListeners.ContainsKey(component)) + if (component != null && registeredListeners.TryGetValue(component, out var listener)) { - var listener = registeredListeners[component]; listener.ValueChanged -= ComponentPropertyChanged; listener.ItemChanged -= ComponentPropertyChanged; listener.Dispose(); diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentGizmoService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentGizmoService.cs index d8ef5c1ede..2715b3d9ac 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentGizmoService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameComponentGizmoService.cs @@ -183,9 +183,9 @@ private void UpdateGizmoEntities(object sender, EntityComponentEventArgs e) var attribute = gizmoType.GetCustomAttribute(true); isMainGizmo = attribute.IsMainGizmo; // Remove the fallback gizmo if we got a new component. - if (gizmoEntities != null && gizmoEntities.ContainsKey(entity.Transform)) + if (gizmoEntities != null && gizmoEntities.TryGetValue(entity.Transform, out var removeGizmo)) { - RemoveGizmo(gizmoEntities, gizmoEntities[entity.Transform], entity.Transform); + RemoveGizmo(gizmoEntities, removeGizmo, entity.Transform); } } if (isMainGizmo) @@ -219,14 +219,10 @@ private void UpdateMainGizmo(Entity entity) } // Creates the main gizmo if it does not exist - if (mainComponent != null && !gizmoEntities.TryGetValue(mainComponent, out gizmo)) - { - CreateGizmoEntity(entity, mainComponent); - } if (gizmoEntities == null || gizmoEntities.Count == 0) - { CreateGizmoEntity(entity, entity.Transform, typeof(FallbackGizmo)); - } + else if (mainComponent != null && !gizmoEntities.TryGetValue(mainComponent, out gizmo)) + CreateGizmoEntity(entity, mainComponent); } private EntityComponent GetMainGizmoComponent(Entity entity) diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs index 907647012e..d27446abd8 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameEntityCameraService.cs @@ -107,9 +107,9 @@ protected override void UpdateCamera() base.UpdateCamera(); // Movement speed control - if (Game.Input.IsKeyPressed(Keys.OemPlus) || Game.Input.IsKeyPressed(Keys.Add)) + if (Game.Input.IsKeyPressed(Keys.Plus) || Game.Input.IsKeyPressed(Keys.Add)) editor.Dispatcher.InvokeAsync(() => Camera.IncreaseMovementSpeed()); - else if (Game.Input.IsKeyPressed(Keys.OemMinus) || Game.Input.IsKeyPressed(Keys.Subtract)) + else if (Game.Input.IsKeyPressed(Keys.Minus) || Game.Input.IsKeyPressed(Keys.Subtract)) editor.Dispatcher.InvokeAsync(() => Camera.DecreaseMovementSpeed()); var duplicating = Game.Input.IsKeyDown(Keys.LeftCtrl) || Game.Input.IsKeyDown(Keys.RightCtrl); @@ -184,10 +184,19 @@ protected void UpdateCameraBase(ref float yaw, ref float pitch, ref Vector3 posi // Compute translation speed according to framerate and modifiers float baseSpeed = MoveSpeed * SceneUnit * (input.isShiftDown ? 10 : 1) * (1f/60f); - var rotation = Quaternion.RotationYawPitchRoll(yaw, pitch, 0); - float zoomDelta = 0f; + // Update yaw and pitch first to keep dependencies on 'rotation' up to date with current frame changes + if (input.isMoving || input.isRotating || input.isOrbiting) + { + var rotationSpeed = RotationSpeed * (input.isOrbiting ? 2 : 1); // we want to rotate faster when rotating around an object. + yaw -= 1.333f * Game.Input.MouseDelta.X * rotationSpeed; // we want to rotate faster Horizontally and Vertically + if (input.isRotating || input.isOrbiting) + pitch = MathUtil.Clamp(pitch - Game.Input.MouseDelta.Y * rotationSpeed, -MathUtil.PiOverTwo, MathUtil.PiOverTwo); + } + + var rotation = Quaternion.RotationYawPitchRoll(yaw, pitch, 0); + // If scene has changed since last time if (asOrthographic && Game?.ContentScene?.Entities != null) { @@ -262,15 +271,6 @@ protected void UpdateCameraBase(ref float yaw, ref float pitch, ref Vector3 posi } } - // Rotate - if (input.isMoving || input.isRotating || input.isOrbiting) - { - var rotationSpeed = RotationSpeed * (input.isOrbiting ? 2 : 1); // we want to rotate faster when rotating around an object. - yaw -= 1.333f * Game.Input.MouseDelta.X * rotationSpeed; // we want to rotate faster Horizontally and Vertically - if (input.isRotating || input.isOrbiting) - pitch = MathUtil.Clamp(pitch - Game.Input.MouseDelta.Y * rotationSpeed, -MathUtil.PiOverTwo, MathUtil.PiOverTwo); - } - // Forward/backward if (input.isZooming) { diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs index 35cf1740e6..2c80c34a17 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameLightProbeGizmoService.cs @@ -330,7 +330,7 @@ private unsafe Mesh ConvertToMesh(GraphicsDevice graphicsDevice, PrimitiveType p var vertices = new VertexPositionNormalColor[lightProbeRuntimeData.LightProbes.Length]; for (var i = 0; i < lightProbeRuntimeData.LightProbes.Length; i++) { - vertices[i] = new VertexPositionNormalColor(lightProbeRuntimeData.Vertices[i], Vector3.Zero, Color.White); + vertices[i] = new VertexPositionNormalColor(lightProbeRuntimeData.Vertices[i], Vector3.Zero, Color4.White); } // Generate data for index buffer diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameNavigationMeshService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameNavigationMeshService.cs index d5c0b1092f..8440dd5d38 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameNavigationMeshService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameNavigationMeshService.cs @@ -391,7 +391,7 @@ private void SetDynamicNavigationSystem(DynamicNavigationMeshSystem newDynamicNa // Initialize dynamic navigation mesh system with game settings if (gameSettingsProviderService.CurrentGameSettings != null) { - var navigationSettings = gameSettingsProviderService.CurrentGameSettings.GetOrCreate(); + var navigationSettings = gameSettingsProviderService.CurrentGameSettings.GetOrDefault(); sceneEditorController.InvokeAsync(() => newDynamicNavigationMeshSystem.InitializeSettingsFromNavigationSettings(navigationSettings)); } @@ -410,7 +410,7 @@ private void GameSettingsProviderServiceOnGameSettingsChanged(object sender, Gam // Send game settings changes to dynamic navigation mesh system if (dynamicNavigationMeshSystem != null && gameSettingsChangedEventArgs.GameSettings != null) { - var navigationSettings = gameSettingsChangedEventArgs.GameSettings.GetOrCreate(); + var navigationSettings = gameSettingsChangedEventArgs.GameSettings.GetOrDefault(); sceneEditorController.InvokeAsync(() => dynamicNavigationMeshSystem.InitializeSettingsFromNavigationSettings(navigationSettings)); } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameParticleComponentChangeWatcherService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameParticleComponentChangeWatcherService.cs index 4fe99bfa99..efefcfc0c8 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameParticleComponentChangeWatcherService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EditorGameParticleComponentChangeWatcherService.cs @@ -24,12 +24,11 @@ protected override void ComponentPropertyChanged(object sender, INodeChangeEvent if (memberNode == null) return; - if (memberNode.Name == nameof(ParticleMaterialSimple.AlphaAdditive) || - memberNode.Name == nameof(ParticleMaterialSimple.ZOffset) || + if (memberNode.Name == nameof(ParticleMaterialSimple.AlphaCutoff) || memberNode.Name == nameof(ParticleMaterialSimple.SoftEdgeDistance)) { (memberNode.Parent.Retrieve() as ParticleMaterialSimple)?.ForceUpdate(); } } } -} \ No newline at end of file +} diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs index 72b9f91a13..cc18a8cd07 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/EntityHierarchyEditorGame.cs @@ -1,4 +1,4 @@ -// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) +// Copyright (c) Xenko contributors (https://xenko.com) 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; @@ -47,12 +47,18 @@ public abstract class EntityHierarchyEditorGame : EditorServiceGame private readonly Vector3 upAxis = Vector3.UnitY; private Material fallbackColorMaterial; private Material fallbackTextureMaterial; + private bool skipPostProcessing = false; - protected EntityHierarchyEditorGame(TaskCompletionSource gameContentLoadedTaskSource, IEffectCompiler effectCompiler, string effectLogPath) + protected EntityHierarchyEditorGame(TaskCompletionSource gameContentLoadedTaskSource, IEffectCompiler effectCompiler, string effectLogPath, bool skipPostProcessing = false) { this.gameContentLoadedTaskSource = gameContentLoadedTaskSource; this.effectCompiler = effectCompiler; this.effectLogPath = effectLogPath; + this.TreatNotFocusedLikeMinimized = false; + this.GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true; + this.WindowMinimumUpdateRate.MinimumElapsedTime = TimeSpan.Zero; + this.MinimizedMinimumUpdateRate.MinimumElapsedTime = TimeSpan.FromSeconds(1.0); + this.skipPostProcessing = skipPostProcessing; CreateScenePipeline(); } @@ -254,7 +260,7 @@ protected override void Initialize() } //init physics system - var physicsSystem = new Bullet2PhysicsSystem(Services); + var physicsSystem = new PhysicsSystem(Services); Services.AddService(physicsSystem); GameSystems.Add(physicsSystem); } @@ -311,7 +317,7 @@ protected override async Task LoadContent() } // TODO: Maybe define this scene default graphics compositor as an asset? - var defaultGraphicsCompositor = GraphicsCompositorHelper.CreateDefault(true, EditorGraphicsCompositorHelper.EditorForwardShadingEffect); + var defaultGraphicsCompositor = GraphicsCompositorHelper.CreateDefault(!skipPostProcessing, EditorGraphicsCompositorHelper.EditorForwardShadingEffect); // Add UI (engine doesn't depend on it) defaultGraphicsCompositor.RenderFeatures.Add(new UIRenderFeature @@ -362,7 +368,7 @@ private void CreateScenePipeline() GameSystems.Add(EditorSceneSystem); EditorSceneSystem.DrawOrder = SceneSystem.DrawOrder + 1; - EditorSceneSystem.GraphicsCompositor = GraphicsCompositorHelper.CreateDefault(true, EditorGraphicsCompositorHelper.EditorForwardShadingEffect, groupMask: GizmoBase.DefaultGroupMask); + EditorSceneSystem.GraphicsCompositor = GraphicsCompositorHelper.CreateDefault(!skipPostProcessing, EditorGraphicsCompositorHelper.EditorForwardShadingEffect, groupMask: GizmoBase.DefaultGroupMask); // Do a few adjustments to the default compositor EditorSceneSystem.GraphicsCompositor.RenderFeatures.OfType().FirstOrDefault()?.RenderFeatures.Add(new WireframeRenderFeature()); diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/NavigationMeshManager.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/NavigationMeshManager.cs index 249f8f9b76..4804688d63 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/NavigationMeshManager.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Game/NavigationMeshManager.cs @@ -20,7 +20,7 @@ namespace Xenko.Assets.Presentation.AssetEditors.EntityHierarchyEditor.Game /// When a registed navigation mesh is reloaded, will get called /// [DataContract] - public class NavigationMeshManager : IAsyncDisposable + public class NavigationMeshManager : Core.IAsyncDisposable { [DataMember] public readonly Dictionary Meshes = new Dictionary(); @@ -42,7 +42,7 @@ public async Task DisposeAsync() { foreach (var pair in Meshes) { - await loader.Manager.ClearContentReference(referencerId, pair.Key, meshesNode, new Index(pair.Key)); + await loader.Manager.ClearContentReference(referencerId, pair.Key, meshesNode, new NodeIndex(pair.Key)); } await loader.Manager.RemoveReferencer(referencerId); } @@ -64,7 +64,7 @@ public Task AddUnique(AssetId assetId) return Task.CompletedTask; Meshes.Add(assetId, new NavigationMesh()); - return loader.Manager.PushContentReference(referencerId, assetId, meshesNode, new Index(assetId)); + return loader.Manager.PushContentReference(referencerId, assetId, meshesNode, new NodeIndex(assetId)); } /// @@ -77,7 +77,7 @@ public Task Remove(AssetId assetId) throw new InvalidOperationException(); Meshes.Remove(assetId); - return loader.Manager.ClearContentReference(referencerId, assetId, meshesNode, new Index(assetId)); + return loader.Manager.ClearContentReference(referencerId, assetId, meshesNode, new NodeIndex(assetId)); } } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EditorNavigationViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EditorNavigationViewModel.cs index 48b813e74b..2eb959e7ae 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EditorNavigationViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EditorNavigationViewModel.cs @@ -106,7 +106,7 @@ private void UpdateNavigationMeshLayers() return; var asset = gameSettingsAsset.Asset as GameSettingsAsset; - var navigationSettings = asset.GetOrCreate(); + var navigationSettings = asset.GetOrDefault(); // Either use the initial visiblity state from the settings or from the previous visuals collection ILookup previousGroupActiveStates; diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs index 7842d196fd..0ae400e821 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyEditorViewModel.cs @@ -313,8 +313,7 @@ protected virtual void LoadSettings([NotNull] SceneSettingsData settings) Transform.LoadSettings(settings); EntityGizmos.LoadSettings(settings); DisplaySelectionMask = settings.SelectionMaskVisible; - Grid.IsVisible = settings.GridVisible; - Grid.Color = settings.GridColor; + Grid.LoadSettings(settings); Lighting.LightProbeWireframeVisible = settings.LightProbeWireframe; Lighting.LightProbeBounces = settings.LightProbeBounces; MaterialSelectionMode = false; @@ -327,8 +326,7 @@ protected virtual void SaveSettings([NotNull] SceneSettingsData settings) Camera.SaveSettings(settings); Transform.SaveSettings(settings); settings.SelectionMaskVisible = DisplaySelectionMask; - settings.GridVisible = Grid.IsVisible; - settings.GridColor = Grid.Color; + Grid.SaveSettings(settings); settings.LightProbeWireframe = Lighting.LightProbeWireframeVisible; settings.LightProbeBounces = Lighting.LightProbeBounces; Navigation.SaveSettings(settings); diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementChangePropagator.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementChangePropagator.cs index 7846bd7147..958ea1314b 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementChangePropagator.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementChangePropagator.cs @@ -24,7 +24,7 @@ protected override async Task PropagatePartReference(IGraphNode gameSideNo var component = value as EntityComponent; // Don't propagate if we're updating the EntityComponentCollection (not a reference), // or if we're updating TransformComponent.Children (handled as a part addition/removal) - var nodeIndex = (e as ItemChangeEventArgs)?.Index ?? Index.Empty; + var nodeIndex = (e as ItemChangeEventArgs)?.Index ?? NodeIndex.Empty; if (component != null && e.Node.Type != typeof(EntityComponentCollection) && !((EntityHierarchyPropertyGraph)Owner.Asset.PropertyGraph).IsChildPartReference(e.Node, nodeIndex)) { var index = component.Entity.Components.IndexOf(component); @@ -46,7 +46,7 @@ protected override object CloneObjectForGameSide(object assetSideObject, IAssetN if (gameSideNode.Type == typeof(EntityComponentCollection) && assetSideObject is TransformComponent) { // We never clone TransformComponent, we cannot replace them. Instead, return the existing one. - var transformComponent = (TransformComponent)gameSideNode.Retrieve(new Index(0)); + var transformComponent = (TransformComponent)gameSideNode.Retrieve(new NodeIndex(0)); // We still reset the Entity to null to make sure it works nicely with reconcilation, etc. transformComponent.Entity = null; return transformComponent; diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementViewModel.cs index da8855a928..ec150560ae 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyElementViewModel.cs @@ -204,6 +204,6 @@ GraphNodePath IAssetPropertyProviderViewModel.GetAbsolutePathToRootNode() bool IPropertyProviderViewModel.ShouldConstructMember(IMemberNode member) => ((IPropertyProviderViewModel)Asset).ShouldConstructMember(member); /// - bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, Index index) => ((IPropertyProviderViewModel)Asset).ShouldConstructItem(collection, index); + bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, NodeIndex index) => ((IPropertyProviderViewModel)Asset).ShouldConstructItem(collection, index); } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs index a61687682b..155de6c88b 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityHierarchyItemViewModel.cs @@ -558,12 +558,12 @@ protected virtual void MoveChildren([NotNull] IReadOnlyCollection childr .DepthFirst(x => x.Children).OfType() .SelectMany(e => e.Folders).DepthFirst(f => f.Folders) .Where(f => !f.InnerSubEntities.Any()) - .Reverse().Select(f => KeyValuePair.Create(f.Owner.Id, Tuple.Create(f.Path, f.Asset))).ToList(); + .Reverse().Select(f => Core.KeyValuePair.Create(f.Owner.Id, Tuple.Create(f.Path, f.Asset))).ToList(); // Entities that are being directly moved with their folder path var thisPath = (this as EntityFolderViewModel)?.Path ?? ""; // Note: cannot use a dictionary here since sibling entities would have the same path. - var entities = children.OfType().Select(entity => KeyValuePair.Create(thisPath, entity)).ToList(); + var entities = children.OfType().Select(entity => Core.KeyValuePair.Create(thisPath, entity)).ToList(); // Move entities that are within folders being directly moved foreach (var folder in children.OfType()) @@ -576,7 +576,7 @@ protected virtual void MoveChildren([NotNull] IReadOnlyCollection childr var detachedPath = e.EntityDesign.Folder.Substring(oldParentPath.Length); // Prefix the new parent path var newPath = EntityFolderViewModel.CombinePath(newParentPath, detachedPath); - return KeyValuePair.Create(newPath, e); + return Core.KeyValuePair.Create(newPath, e); })); } @@ -634,7 +634,7 @@ protected virtual void MoveChildren([NotNull] IReadOnlyCollection childr node.Update(folderName); // This is a bit hackish, but the entity should be currently disconnected from any asset (since we're going to add it), so we need to manually create an action item for the folder change. // TODO: update the folder after insert, and subscribe to changes in EntityDesignData.Folder from EntityViewModel to propagate folder change at that level - var actionItem = new ContentValueChangeOperation(node, ContentChangeType.ValueChange, Index.Empty, oldValue, folderName, Asset.Dirtiables); + var actionItem = new ContentValueChangeOperation(node, ContentChangeType.ValueChange, NodeIndex.Empty, oldValue, folderName, Asset.Dirtiables); Asset.ServiceProvider.Get().PushOperation(actionItem); Asset.AssetHierarchyPropertyGraph.AddPartToAsset(hierarchy.Parts, movedEntity, (Owner as EntityViewModel)?.AssetSideEntity, index++); moved = true; @@ -657,7 +657,7 @@ protected virtual void MoveChildren([NotNull] IReadOnlyCollection childr visitor.Visit(asset.PropertyGraph.RootNode); FixupObjectReferences.FixupReferences(asset.Asset, visitor.Result, referenceableObjects, true, (memberPath, _, value) => { - var graphPath = GraphNodePath.From(asset.PropertyGraph.RootNode, memberPath, out Index i); + var graphPath = GraphNodePath.From(asset.PropertyGraph.RootNode, memberPath, out NodeIndex i); var node = graphPath.GetNode(); if (node is IMemberNode memberNode) { diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs index f8c4b9d9d6..2698e223bb 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/ViewModels/EntityViewModel.cs @@ -149,7 +149,7 @@ public override GraphNodePath GetNodePath() path.PushTarget(); path.PushMember(nameof(EntityHierarchy.Hierarchy.Parts)); path.PushTarget(); - path.PushIndex(new Index(Id.ObjectId)); + path.PushIndex(new NodeIndex(Id.ObjectId)); path.PushMember(nameof(EntityDesign.Entity)); path.PushTarget(); return path; @@ -436,7 +436,7 @@ void IAddChildrenPropertiesProviderViewModel.AddChildren(IReadOnlyCollection + + + + + + + + + + + + + + + + + + + + + + - - diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityPickerWindow.xaml b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityPickerWindow.xaml index 766b096038..349efffe5b 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityPickerWindow.xaml +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/EntityHierarchyEditor/Views/EntityPickerWindow.xaml @@ -2,7 +2,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:valueConverters="clr-namespace:Xenko.Assets.Presentation.ValueConverters" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:xk="http://schemas.xenko.com/xaml/presentation" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Game/EditorGameGridService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Game/EditorGameGridService.cs index 295894f4ef..948e286e8e 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Game/EditorGameGridService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Game/EditorGameGridService.cs @@ -27,6 +27,8 @@ public class EditorGameGridService : EditorGameServiceBase, IEditorG public float Alpha { get; set; } = 0.35f; + public int AxisIndex { get; set; } = 1; + public override IEnumerable Dependencies { get { yield return typeof(IEditorGameCameraService); } } protected override Task Initialize(EditorServiceGame editorGame) @@ -61,7 +63,7 @@ private async Task UpdateGrid() while (!IsDisposed) { grid.IsEnabled = IsActive; - grid.Update(Color, game.EditorServices.Get().SceneUnit); + grid.Update(Color, Alpha, AxisIndex, game.EditorServices.Get().SceneUnit); await game.Script.NextFrame(); } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Services/IEditorGameGridViewModelService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Services/IEditorGameGridViewModelService.cs index 139fd8193e..6d0e4de152 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Services/IEditorGameGridViewModelService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/Services/IEditorGameGridViewModelService.cs @@ -1,5 +1,6 @@ // Copyright (c) Xenko contributors (https://xenko.com) 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 Xenko.Assets.Presentation.SceneEditor; using Xenko.Core.Mathematics; using Xenko.Editor.EditorGame.ViewModels; @@ -24,5 +25,10 @@ public interface IEditorGameGridViewModelService : IEditorGameViewModelService /// Gets or sets the alpha level of the grid. /// float Alpha { get; set; } + + /// + /// Gets or sets the axis of the grid. + /// + int AxisIndex { get; set; } } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/ContentReferenceCollector.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/ContentReferenceCollector.cs index b60d3a7710..277ab4a723 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/ContentReferenceCollector.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/ContentReferenceCollector.cs @@ -1,4 +1,4 @@ -// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) +// Copyright (c) Xenko contributors (https://xenko.com) 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.Collections.Generic; using Xenko.Core.Assets; @@ -17,9 +17,9 @@ public struct ContentReferenceAccessor { public readonly AssetId ContentId; public readonly IGraphNode Node; - public readonly Index Index; + public readonly NodeIndex Index; - public ContentReferenceAccessor(AssetId contentId, IGraphNode node, Index index) + public ContentReferenceAccessor(AssetId contentId, IGraphNode node, NodeIndex index) { ContentId = contentId; Node = node; @@ -41,9 +41,9 @@ public void Reset() ContentReferences.Clear(); } - public void Visit([NotNull] IAssetNode node, Index index) + public void Visit([NotNull] IAssetNode node, NodeIndex index) { - if (index == Index.Empty) + if (index == NodeIndex.Empty) { // Normal case, no index Visit(node); @@ -79,11 +79,11 @@ protected override void VisitNode(IGraphNode node) if (AssetRegistry.IsContentType(memberContent.Type)) { var id = AttachedReferenceManager.GetAttachedReference(memberContent.Retrieve())?.Id ?? AssetId.Empty; - CollectContentReference(id, gameContent, Index.Empty); + CollectContentReference(id, gameContent, NodeIndex.Empty); } } var objectNode = node as IObjectNode; - if (objectNode != null) + if (objectNode != null && objectNode.Indices != null) { if (AssetRegistry.IsContentType(objectNode.Descriptor.GetInnerCollectionType())) { @@ -98,7 +98,7 @@ protected override void VisitNode(IGraphNode node) base.VisitNode(node); } - protected virtual void CollectContentReference(AssetId contentId, IGraphNode content, Index index) + protected virtual void CollectContentReference(AssetId contentId, IGraphNode content, NodeIndex index) { if (contentId == AssetId.Empty) return; diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorGridViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorGridViewModel.cs index 73f1c9a45c..5bfb71fffe 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorGridViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/EditorGridViewModel.cs @@ -6,6 +6,7 @@ using Xenko.Core.Presentation.Commands; using Xenko.Core.Presentation.ViewModel; using Xenko.Assets.Presentation.AssetEditors.GameEditor.Services; +using Xenko.Assets.Presentation.SceneEditor; namespace Xenko.Assets.Presentation.AssetEditors.GameEditor.ViewModels { @@ -44,11 +45,32 @@ public EditorGridViewModel([NotNull] IViewModelServiceProvider serviceProvider, /// public float Alpha { get { return Service.Alpha; } set { SetValue(Math.Abs(Alpha - value) > MathUtil.ZeroTolerance, () => Service.Alpha = value); } } + /// + /// Gets or sets the axis of the grid. + /// + public int AxisIndex { get { return Service.AxisIndex; } set { SetValue(AxisIndex != value, () => Service.AxisIndex = value); } } + /// /// Gets a command that will toggle the visibility of the grid. /// public ICommandBase ToggleCommand { get; } private IEditorGameGridViewModelService Service => controller.GetService(); + + public void LoadSettings([NotNull] SceneSettingsData sceneSettings) + { + IsVisible = sceneSettings.GridVisible; + Color = sceneSettings.GridColor; + Alpha = sceneSettings.GridOpacity; + AxisIndex = sceneSettings.GridAxisIndex; + } + + public void SaveSettings([NotNull] SceneSettingsData sceneSettings) + { + sceneSettings.GridVisible = IsVisible; + sceneSettings.GridColor = Color; + sceneSettings.GridOpacity = Alpha; + sceneSettings.GridAxisIndex = AxisIndex; + } } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs index 4bd19a2948..84f6aabf60 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GameEditor/ViewModels/GameEditorChangePropagator.cs @@ -1,4 +1,4 @@ -// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) +// Copyright (c) Xenko contributors (https://xenko.com) 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.Threading.Tasks; @@ -13,6 +13,7 @@ using Xenko.Assets.Presentation.AssetEditors.AssetCompositeGameEditor.ViewModels; using Xenko.Assets.Presentation.AssetEditors.GameEditor.Services; using Xenko.Particles.Materials; +using Xenko.Core.Reflection; namespace Xenko.Assets.Presentation.AssetEditors.GameEditor.ViewModels { @@ -96,7 +97,7 @@ private void AssetSideNodeChanged(object sender, INodeChangeEventArgs e) protected virtual async Task PropagatePartReference(IGraphNode gameSideNode, object value, INodeChangeEventArgs e) { // If the change is an addition or removal of a part in the asset, it shouldn't be handled by the propagator. - var index = (e as ItemChangeEventArgs)?.Index ?? Index.Empty; + var index = (e as ItemChangeEventArgs)?.Index ?? NodeIndex.Empty; if (((AssetCompositeHierarchyPropertyGraph)Owner.Asset.PropertyGraph).IsChildPartReference(e.Node, index)) { // But we should still return that the change correspond to a part reference. @@ -164,7 +165,7 @@ await Editor.Controller.InvokeTask(async () => if (gameSideNode == null) throw new InvalidOperationException("Unable to retrieve the game-side node"); - var index = (e as ItemChangeEventArgs)?.Index ?? Index.Empty; + var index = (e as ItemChangeEventArgs)?.Index ?? NodeIndex.Empty; if (!AssetRegistry.IsContentType(e.Node.Descriptor.GetInnerCollectionType())) { if (e.Node.Type.IsValueType) @@ -175,6 +176,11 @@ await Editor.Controller.InvokeTask(async () => else { var value = RetrieveValue(assetNode, e.NewValue, e.ChangeType, index); + + if (value == null && assetNode.Descriptor.Category == DescriptorCategory.Set) + { + value = e.NewValue; + } var isReference = await PropagatePartReference(gameSideNode, value, e); if (!isReference) { @@ -228,7 +234,7 @@ await Editor.Controller.InvokeTask(() => }); } - private static object RetrieveValue(IGraphNode node, object value, ContentChangeType changeType, Index index) + private static object RetrieveValue(IGraphNode node, object value, ContentChangeType changeType, NodeIndex index) { switch (changeType) { @@ -244,7 +250,7 @@ private static object RetrieveValue(IGraphNode node, object value, ContentChange } } - protected static void UpdateGameSideContent(IGraphNode gameSideNode, object value, ContentChangeType changeType, Index index) + protected static void UpdateGameSideContent(IGraphNode gameSideNode, object value, ContentChangeType changeType, NodeIndex index) { switch (changeType) { @@ -266,7 +272,7 @@ protected static void UpdateGameSideContent(IGraphNode gameSideNode, object valu } } - private async Task UpdateGameSideReference([NotNull] AssetCompositeEditorViewModel editor, [NotNull] IGraphNode gameSideNode, ContentChangeType changeType, object oldValue, object newValue, Index index) + private async Task UpdateGameSideReference([NotNull] AssetCompositeEditorViewModel editor, [NotNull] IGraphNode gameSideNode, ContentChangeType changeType, object oldValue, object newValue, NodeIndex index) { if (editor == null) throw new ArgumentNullException(nameof(editor)); diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/AudioEmitterGizmo.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/AudioEmitterGizmo.cs deleted file mode 100644 index cbdc08ec32..0000000000 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/AudioEmitterGizmo.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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 Xenko.Engine; - -namespace Xenko.Assets.Presentation.AssetEditors.Gizmos -{ - [GizmoComponent(typeof(AudioEmitterComponent), true)] - public class AudioEmitterGizmo : BillboardingGizmo - { - public AudioEmitterGizmo(EntityComponent component) - : base(component, "AudioEmitter", GizmoResources.AudioEmitterGizmo) - { - } - } -} diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/CameraOrientationGizmo.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/CameraOrientationGizmo.cs index d2034a38d1..fc869667fb 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/CameraOrientationGizmo.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/CameraOrientationGizmo.cs @@ -40,7 +40,7 @@ public class CameraOrientationGizmo : AxialGizmo new FaceData("Left", new Vector3(0, -MathUtil.PiOverTwo, 0)), new FaceData("Top", new Vector3(-MathUtil.PiOverTwo, 0, 0)), new FaceData("Bottom", new Vector3(MathUtil.PiOverTwo, 0, 0)), - new FaceData("Back", new Vector3(0, 0, 0)), + new FaceData("Back", Vector3.Zero), new FaceData("Front", new Vector3(0, MathUtil.Pi, 0)) }; diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GizmoResources.Designer.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GizmoResources.Designer.cs index c6d3770100..a3c842804e 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GizmoResources.Designer.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GizmoResources.Designer.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 @@ -70,16 +70,6 @@ internal static byte[] AmbientLightGizmo { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] AudioEmitterGizmo { - get { - object obj = ResourceManager.GetObject("AudioEmitterGizmo", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GridGizmoBase.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GridGizmoBase.cs index 1d6091ca1e..3d89acd82e 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GridGizmoBase.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/GridGizmoBase.cs @@ -33,14 +33,14 @@ protected GridGizmoBase() /// protected virtual int GridSize { get; } = 10; - public void Update(Color3 gridColor, float sceneUnit) + public void Update(Color3 gridColor, float alpha, int gridAxisIndex, float sceneUnit) { if (GraphicsDevice != null) { gridColor = gridColor.ToColorSpace(GraphicsDevice.ColorSpace); } - UpdateBase(gridColor, sceneUnit); + UpdateBase(gridColor, alpha, gridAxisIndex, sceneUnit); } protected override Entity Create() @@ -49,6 +49,6 @@ protected override Entity Create() return new Entity("Scene grid"); } - protected abstract void UpdateBase(Color3 gridColor, float sceneUnit); + protected abstract void UpdateBase(Color3 gridColor, float alpha, int gridAxisIndex, float sceneUnit); } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/LightGizmo.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/LightGizmo.cs index 4973aab749..3d7d23c241 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/LightGizmo.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/LightGizmo.cs @@ -25,9 +25,9 @@ protected LightGizmo(EntityComponent component, string lightName, byte[] lightIm protected Color3 GetLightColor(GraphicsDevice graphicsDevice) { var component = LightComponent; - var colorLigth = component.Type as IColorLight; + var colorLight = component.Type as IColorLight; - return colorLigth?.ComputeColor(graphicsDevice.ColorSpace, 1f) ?? new Color3(); // don't want to include light intensity in gizmo color (post effects not applied on gizmos) + return colorLight?.ComputeColor(graphicsDevice.ColorSpace, 1f) ?? new Color3(); // don't want to include light intensity in gizmo color (post effects not applied on gizmos) } } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/ParticleSystemGizmo.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/ParticleSystemGizmo.cs index 3f1db36913..2e70f3bc71 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/ParticleSystemGizmo.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/ParticleSystemGizmo.cs @@ -60,9 +60,9 @@ public override void Update() return; } - var pos = new Vector3(0, 0, 0); - var rot = new Quaternion(0, 0, 0, 1); - var scl = new Vector3(1, 1, 1); + var pos = Vector3.Zero; + var rot = Quaternion.Identity; + var scl = Vector3.One; DebugDrawShape drawShape = DebugDrawShape.None; if (Component.ParticleSystem.TryGetDebugDrawShape(ref drawShape, ref pos, ref rot, ref scl)) diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs index 601f207288..cb444d15c8 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/PhysicsGizmo.cs @@ -11,6 +11,7 @@ using Xenko.Graphics; using Xenko.Physics; using Xenko.Rendering; +using Xenko.Core.Assets; namespace Xenko.Assets.Presentation.AssetEditors.Gizmos { @@ -53,7 +54,7 @@ public PhysicsElementInfo(PhysicsComponent component, SkeletonUpdater skeleton) { shape = component.ColliderShape; var rigidbodyComponent = component as RigidbodyComponent; - isKinematic = rigidbodyComponent != null && rigidbodyComponent.IsKinematic; + isKinematic = rigidbodyComponent != null && rigidbodyComponent.RigidBodyType == RigidBodyTypes.Kinematic; colliderShapes = component.ColliderShapes != null ? CloneDescs(component.ColliderShapes) : null; var componentBase = component as PhysicsSkinnedComponentBase; boneName = componentBase?.NodeName; @@ -76,7 +77,7 @@ public bool HasChanged(PhysicsComponent component, SkeletonUpdater skeletonUpdat (colliderShapes != null && component.ColliderShapes == null) || DescsAreDifferent(colliderShapes, component.ColliderShapes) || component.ColliderShapeChanged || - (rb != null && isKinematic != rb.IsKinematic) || + (rb != null && isKinematic != (rb.RigidBodyType == RigidBodyTypes.Kinematic)) || skeleton != skeletonUpdater || boneIndex != newIndex || boneIndex == -1 && skeletonUpdater != null && !string.IsNullOrEmpty(boneName) || //force recreation if we have a skeleton?.. wrong name tho is also possible... @@ -107,7 +108,7 @@ private static List CloneDescs(IEnumerable @@ -59,9 +62,9 @@ protected override Entity Create() // Create the grid origin originAxis = new Entity("The grid origin axes"); - originAxes.Add(CreateOriginAxis(Color.Red, 0)); - originAxes.Add(CreateOriginAxis(Color.Green, 1)); - originAxes.Add(CreateOriginAxis(Color.Blue, 2)); + originAxes.Add(CreateOriginAxis(RedUniformColor, 0)); + originAxes.Add(CreateOriginAxis(GreenUniformColor, 1)); + originAxes.Add(CreateOriginAxis(BlueUniformColor, 2)); for (int i = 0; i < 3; i++) originAxis.AddChild(originAxes[i]); @@ -100,13 +103,32 @@ private Entity CreateOriginAxis(Color color, int axis) axisEntity.TransformValue.Scale = new Vector3(GridSize, 1f / GridBase, 1f / GridBase); if (axis != 0) axisEntity.TransformValue.Rotation = Quaternion.RotationX(MathUtil.PiOverTwo) * Quaternion.RotationAxis(new Vector3 { [1 + (axis%2)] = 1f}, MathUtil.PiOverTwo); - var axisEntityRoot = new Entity("Scene grid origin axis root"); axisEntityRoot.AddChild(axisEntity); return axisEntityRoot; } + /// + /// Gets the default color associated to the provided axis index. + /// + /// The index of the axis + /// The default color associated + protected Color3 GetAxisDefaultColor(int axisIndex) + { + switch (axisIndex) + { + case 0: + return RedUniformColor.ToColor3(); + case 1: + return GreenUniformColor.ToColor3(); + case 2: + return BlueUniformColor.ToColor3(); + default: + throw new ArgumentOutOfRangeException("axisIndex"); + } + } + private Texture CreateTexture(ImageBuilder imageBuilder) { var gridImage = imageBuilder(); @@ -145,20 +167,20 @@ private Material CreateColoredTextureMaterial(Texture texture, float textureScal }); } - protected override void UpdateBase(Color3 gridColor, float sceneUnit) + protected override void UpdateBase(Color3 gridColor, float alpha, int gridAxisIndex, float sceneUnit) { var cameraService = Game.EditorServices.Get(); if (cameraService == null) return; // update the grid color - GridMaterial.Passes[0].Parameters.Set(GridColorKey, Color4.PremultiplyAlpha(new Color4(gridColor, 0.35f))); - + GridMaterial.Passes[0].Parameters.Set(GridColorKey, Color4.PremultiplyAlpha(new Color4(gridColor, alpha))); + // Determine the up vector depending on view matrix and projection mode // -> When orthographic, if we are looking along a coordinate axis, place the grid perpendicular to that axis. - // -> Fall back to the default plane otherwise. - var viewAxisIndex = 1; - var upVector = DefaultUpVector; + // -> Place the grid perpendicular to its default axis otherwise. + var viewAxisIndex = gridAxisIndex; + var upVector = new Vector3(0) { [gridAxisIndex] = 1 }; var viewInvert = Matrix.Invert(cameraService.ViewMatrix); if (cameraService.IsOrthographic) { @@ -192,15 +214,6 @@ protected override void UpdateBase(Color3 gridColor, float sceneUnit) // Move the grid origin in slightly in front the grid to have it in the foreground originPosition[viewAxisIndex] = snappedPosition[viewAxisIndex] + Math.Sign(viewInvert[3, viewAxisIndex]) * 0.001f * sceneUnit; - - // In orthographic mode, put the grid and origin in the very background of scene - if (cameraService.IsOrthographic) - { - var dotProduct = Vector3.Dot(viewInvert.Forward, upVector); - var cameraOffset = viewInvert.TranslationVector[viewAxisIndex]; - originPosition[viewAxisIndex] = cameraOffset + Math.Sign(dotProduct) * cameraService.FarPlane * 0.90f; - snappedPosition[viewAxisIndex] = cameraOffset + Math.Sign(dotProduct) * cameraService.FarPlane * 0.95f; - } // Determine the intersection point of the center of the vieport with the grid plane var ray = EditorGameHelper.CalculateRayFromMousePosition(cameraService.Component, new Vector2(0.5f), viewInvert); @@ -242,9 +255,16 @@ protected override void UpdateBase(Color3 gridColor, float sceneUnit) for (var axis = 0; axis < 3; axis++) SetPlaneEntityRotation((axis + 2) % 3, upVector, originAxes[axis]); - // Hide the vertical axis of the origin + // Update the color of the origin axes and hide the grid axis for (int axis = 0; axis < 3; axis++) + { + // Make the axes alpha higher than the grid alpha so they are visible + float axesAlpha = alpha * 4; + var color = Color4.PremultiplyAlpha(new Color4(GetAxisDefaultColor(axis), axesAlpha)); + originAxes[axis].GetChild(0).Get().GetMaterial(0).Passes[0].Parameters.Set(GridColorKey, color); + originAxes[axis].GetChild(0).Get().Enabled = axis != viewAxisIndex; + } } private static void SetPlaneEntityRotation(int modelUpAxis, Vector3 upVector, Entity entity) diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/VoxelVolumeGizmo.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/VoxelVolumeGizmo.cs new file mode 100644 index 0000000000..b8f5ab9c58 --- /dev/null +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/Gizmos/VoxelVolumeGizmo.cs @@ -0,0 +1,150 @@ +// Copyright (c) Xenko contributors (https://xenko.com) 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 Xenko.Core; +using Xenko.Core.Mathematics; +using Xenko.Engine; +using Xenko.Graphics; +using Xenko.Rendering; +using Xenko.Rendering.Lights; +using Xenko.Rendering.Voxels; +using Buffer = Xenko.Graphics.Buffer; + +namespace Xenko.Assets.Presentation.AssetEditors.Gizmos +{ + /// + /// A gizmo to display the bounding boxes for voxel volumes inside the editor as a gizmo. + /// this gizmo uses volume scale as the extent of the bounding box and is not affected by rotation + /// + [GizmoComponent(typeof(VoxelVolumeComponent), false)] + public class VoxelVolumeGizmo : EntityGizmo + { + private BoxMesh box; + private Material material; + private Entity debugRootEntity; + private Entity debugEntity; + + public VoxelVolumeGizmo(EntityComponent component) : base(component) + { + } + + protected override Entity Create() + { + debugRootEntity = new Entity($"Voxel volume of {Component.Entity.Name}"); + + material = GizmoUniformColorMaterial.Create(GraphicsDevice, Color.CornflowerBlue); + + box = new BoxMesh(GraphicsDevice); + box.Build(); + + debugEntity = new Entity($"Voxel volume mesh of {Component.Entity.Name}") + { + new ModelComponent + { + Model = new Model + { + material, + new Mesh { Draw = box.MeshDraw }, + }, + RenderGroup = RenderGroup, + } + }; + + return debugRootEntity; + } + + public override void Update() + { + if (ContentEntity == null || GizmoRootEntity == null) + return; + + // calculate the world matrix of the gizmo so that it is positioned exactly as the corresponding scene entity + // except the scale that is re-adjusted to the gizmo desired size (gizmo are insert at scene root so LocalMatrix = WorldMatrix) + Vector3 scale; + Quaternion rotation; + Vector3 translation; + ContentEntity.Transform.WorldMatrix.Decompose(out scale, out rotation, out translation); + + // Translation and Scale but no rotation on bounding boxes + GizmoRootEntity.Transform.Position = translation; + GizmoRootEntity.Transform.Scale = new Vector3(Component.VoxelVolumeSize * 0.5f); + GizmoRootEntity.Transform.UpdateWorldMatrix(); + } + + public override bool IsSelected + { + set + { + bool hasChanged = IsSelected != value; + base.IsSelected = value; + + if (hasChanged) + { + if (IsSelected) + GizmoRootEntity.AddChild(debugEntity); + else + GizmoRootEntity.RemoveChild(debugEntity); + } + } + } + + class BoxMesh + { + public MeshDraw MeshDraw; + + private Buffer vertexBuffer; + + private readonly GraphicsDevice graphicsDevice; + + public BoxMesh(GraphicsDevice graphicsDevice) + { + this.graphicsDevice = graphicsDevice; + } + + public void Build() + { + var indices = new int[12 * 2]; + var vertices = new VertexPositionNormalTexture[8]; + + vertices[0] = new VertexPositionNormalTexture(new Vector3(-1, 1, -1), Vector3.UnitY, Vector2.Zero); + vertices[1] = new VertexPositionNormalTexture(new Vector3(-1, 1, 1), Vector3.UnitY, Vector2.Zero); + vertices[2] = new VertexPositionNormalTexture(new Vector3(1, 1, 1), Vector3.UnitY, Vector2.Zero); + vertices[3] = new VertexPositionNormalTexture(new Vector3(1, 1, -1), Vector3.UnitY, Vector2.Zero); + + int indexOffset = 0; + // Top sides + for (int i = 0; i < 4; i++) + { + indices[indexOffset++] = i; + indices[indexOffset++] = (i + 1) % 4; + } + + // Duplicate vertices and indices to bottom part + for (int i = 0; i < 4; i++) + { + vertices[i + 4] = vertices[i]; + vertices[i + 4].Position.Y = -vertices[i + 4].Position.Y; + + indices[indexOffset++] = indices[i * 2] + 4; + indices[indexOffset++] = indices[i * 2 + 1] + 4; + } + + // Sides + for (int i = 0; i < 4; i++) + { + indices[indexOffset++] = i; + indices[indexOffset++] = i + 4; + } + + vertexBuffer = Buffer.Vertex.New(graphicsDevice, vertices); + MeshDraw = new MeshDraw + { + PrimitiveType = PrimitiveType.LineList, + DrawCount = indices.Length, + IndexBuffer = new IndexBufferBinding(Buffer.Index.New(graphicsDevice, indices), true, indices.Length), + VertexBuffers = new[] { new VertexBufferBinding(vertexBuffer, VertexPositionNormalTexture.Layout, vertexBuffer.ElementCount) }, + }; + } + } + } +} diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorCameraSlotsViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorCameraSlotsViewModel.cs index c546ddb9a8..48f7cfbd87 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorCameraSlotsViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorCameraSlotsViewModel.cs @@ -51,7 +51,7 @@ protected override GraphNodePath GetNodePath() var path = new GraphNodePath(Editor.Session.AssetNodeContainer.GetNode(Editor.Asset.Asset)); path.PushMember(nameof(GraphicsCompositorAsset.Cameras)); path.PushTarget(); - path.PushIndex(new Index(Editor.Asset.Asset.Cameras.IndexOf(CameraSlot))); + path.PushIndex(new NodeIndex(Editor.Asset.Asset.Cameras.IndexOf(CameraSlot))); return path; } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorEditorViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorEditorViewModel.cs index 345f1ad623..99ca5e13f4 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorEditorViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorEditorViewModel.cs @@ -290,7 +290,7 @@ private void RemoveSelectedSharedRenderers() continue; // Remove - var itemIndex = new Index(index); + var itemIndex = new NodeIndex(index); sharedRenderersNode.Remove(viewModel.GetSharedRenderer(), itemIndex); } @@ -328,7 +328,7 @@ private void RemoveSelectedRenderStages() Asset.PropertyGraph.ClearReferencesToObjects(renderStage.Id.Yield()); // Remove - var itemIndex = new Index(index); + var itemIndex = new NodeIndex(index); renderStagesNode.Remove(renderStage, itemIndex); } @@ -365,7 +365,7 @@ private void RemoveSelectedCameraSlots() // Do not clear references to this object - camera slots in the scene asset should not change automatically! // Remove - var itemIndex = new Index(index); + var itemIndex = new NodeIndex(index); cameraSlotsNode.Remove(viewModel, itemIndex); } @@ -405,7 +405,7 @@ private void RemoveSelectedRenderFeatures() continue; // Remove - var itemIndex = new Index(index); + var itemIndex = new NodeIndex(index); renderFeaturesNode.Remove(renderFeature, itemIndex); } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorItemViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorItemViewModel.cs index 118fe8e789..e0916a54d3 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorItemViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/GraphicsCompositorItemViewModel.cs @@ -38,7 +38,7 @@ protected GraphicsCompositorItemViewModel([NotNull] GraphicsCompositorEditorView public virtual bool ShouldConstructMember(IMemberNode member) => ((IPropertyProviderViewModel)Editor.Asset).ShouldConstructMember(member); /// - public bool ShouldConstructItem(IObjectNode collection, Index index) => ((IPropertyProviderViewModel)Editor.Asset).ShouldConstructItem(collection, index); + public bool ShouldConstructItem(IObjectNode collection, NodeIndex index) => ((IPropertyProviderViewModel)Editor.Asset).ShouldConstructItem(collection, index); #endregion diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderFeatureViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderFeatureViewModel.cs index 6cf464feb1..a805b6c3f2 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderFeatureViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderFeatureViewModel.cs @@ -35,7 +35,7 @@ protected override GraphNodePath GetNodePath() var path = new GraphNodePath(Editor.Session.AssetNodeContainer.GetNode(Editor.Asset.Asset)); path.PushMember(nameof(GraphicsCompositorAsset.RenderFeatures)); path.PushTarget(); - path.PushIndex(new Index(Editor.Asset.Asset.RenderFeatures.IndexOf((RootRenderFeature)RenderFeature))); + path.PushIndex(new NodeIndex(Editor.Asset.Asset.RenderFeatures.IndexOf((RootRenderFeature)RenderFeature))); return path; } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderStageViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderStageViewModel.cs index a029e35d06..234653472c 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderStageViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/RenderStageViewModel.cs @@ -41,7 +41,7 @@ protected override GraphNodePath GetNodePath() var path = new GraphNodePath(Editor.Session.AssetNodeContainer.GetNode(Editor.Asset.Asset)); path.PushMember(nameof(GraphicsCompositorAsset.RenderStages)); path.PushTarget(); - path.PushIndex(new Index(Editor.Asset.Asset.RenderStages.IndexOf(RenderStage))); + path.PushIndex(new NodeIndex(Editor.Asset.Asset.RenderStages.IndexOf(RenderStage))); return path; } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockBaseViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockBaseViewModel.cs index 55388ef146..1ec76b3ebd 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockBaseViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockBaseViewModel.cs @@ -69,7 +69,7 @@ public static Dictionary GetExterna protected override void VisitMemberTarget(IMemberNode node) { - ProcessReferences(node, Index.Empty, node.Type); + ProcessReferences(node, NodeIndex.Empty, node.Type); base.VisitMemberTarget(node); } @@ -79,7 +79,7 @@ protected override void VisitItemTargets(IObjectNode node) base.VisitItemTargets(node); } - private void ProcessReferences(IGraphNode node, Index index, Type type) + private void ProcessReferences(IGraphNode node, NodeIndex index, Type type) { if (node == null) return; @@ -90,14 +90,14 @@ private void ProcessReferences(IGraphNode node, Index index, Type type) if (!((node as IMemberNode)?.MemberDescriptor.HasSet ?? true)) return; - var value = index == Index.Empty ? node.Retrieve() : node.Retrieve(index); + var value = index == NodeIndex.Empty ? node.Retrieve() : node.Retrieve(index); // Hide inlined renderers which don't have nodes if ((value != null) && ((value as ISharedRenderer) == null)) return; var path = CurrentPath.Clone(); - if (index != Index.Empty) + if (index != NodeIndex.Empty) path.PushIndex(index); externalReferences.Add(new SharedRendererReferenceKey(path, node.Type), value as ISharedRenderer); } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockViewModel.cs index 5dbbd720ca..1886dc2fe2 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererBlockViewModel.cs @@ -42,7 +42,7 @@ protected override GraphNodePath GetNodePath() var path = new GraphNodePath(Editor.Session.AssetNodeContainer.GetNode(Editor.Asset.Asset)); path.PushMember(nameof(GraphicsCompositorAsset.SharedRenderers)); path.PushTarget(); - path.PushIndex(new Index(Editor.Asset.Asset.SharedRenderers.IndexOf(sharedRenderer))); + path.PushIndex(new NodeIndex(Editor.Asset.Asset.SharedRenderers.IndexOf(sharedRenderer))); return path; } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererOutputSlotViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererOutputSlotViewModel.cs index 928aa82d50..866866d2e6 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererOutputSlotViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/ViewModels/SharedRendererOutputSlotViewModel.cs @@ -16,7 +16,7 @@ public SharedRendererOutputSlotViewModel(GraphicsCompositorBlockViewModel block, { this.slotKey = slotKey; Accessor = slotKey.Path.GetAccessor(); - if (Accessor.Index != Index.Empty) + if (Accessor.Index != NodeIndex.Empty) { ((IObjectNode)Accessor.Node).ItemChanged += ItemChanged; } @@ -34,7 +34,7 @@ public SharedRendererOutputSlotViewModel(GraphicsCompositorBlockViewModel block, public override void Destroy() { base.Destroy(); - if (Accessor.Index != Index.Empty) + if (Accessor.Index != NodeIndex.Empty) { ((IObjectNode)Accessor.Node).ItemChanged -= ItemChanged; } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/Views/GraphicsCompositorEditorView.xaml b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/Views/GraphicsCompositorEditorView.xaml index 61412f45b0..cbcf853d47 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/Views/GraphicsCompositorEditorView.xaml +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/GraphicsCompositorEditor/Views/GraphicsCompositorEditorView.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:graphx="clr-namespace:GraphX.Controls;assembly=GraphX.WPF.Controls" xmlns:xk="http://schemas.xenko.com/xaml/presentation" xmlns:sskkgraph="http://schemas.xenko.com/xaml/presentation/graph" diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorGame.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorGame.cs index 2688b9e0ef..dc8e7b8245 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorGame.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorGame.cs @@ -14,8 +14,8 @@ namespace Xenko.Assets.Presentation.AssetEditors.PrefabEditor.Game { public sealed class PrefabEditorGame : EntityHierarchyEditorGame { - public PrefabEditorGame(TaskCompletionSource gameContentLoadedTaskSource, IEffectCompiler effectCompiler, string effectLogPath) - : base(gameContentLoadedTaskSource, effectCompiler, effectLogPath) + public PrefabEditorGame(TaskCompletionSource gameContentLoadedTaskSource, IEffectCompiler effectCompiler, string effectLogPath, bool skipPostProcessing = false) + : base(gameContentLoadedTaskSource, effectCompiler, effectLogPath, skipPostProcessing) { } @@ -36,6 +36,12 @@ public void LoadEntities([ItemNotNull, NotNull] IEnumerable entities) EnsureContentScene(); ContentScene.Entities.AddRange(entities); + + foreach (Entity e in entities) + { + ModelComponent mc = e.Get(); + if (mc != null) mc.ForceModelUpdateCount = int.MaxValue; + } } /// @@ -48,6 +54,9 @@ public void LoadEntity([NotNull] Entity entity) EnsureContentScene(); ContentScene.Entities.Add(entity); + + ModelComponent mc = entity.Get(); + if (mc != null) mc.ForceModelUpdateCount = int.MaxValue; } /// diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorLightService.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorLightService.cs index 5b4dbf0ddb..9124956d17 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorLightService.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Game/PrefabEditorLightService.cs @@ -19,10 +19,10 @@ public override void RegisterScene(Scene scene) CreateLight("Prefab Editor Ambient Light", new LightAmbient(), 0.3f, scene); - var directionalLight1 = CreateLight("Prefab Editor Ambient Light1", new LightDirectional(), 2.5f, scene); + var directionalLight1 = CreateLight("Prefab Editor Directional Light1", new LightDirectional(), 0.8f, scene); directionalLight1.Transform.Rotation = Quaternion.RotationYawPitchRoll(MathUtil.Pi * 1.125f, MathUtil.Pi * -0.125f, 0.0f); - var directionalLight2 = CreateLight("Prefab Editor Ambient Light2", new LightDirectional(), 2.5f, scene); + var directionalLight2 = CreateLight("Prefab Editor Directional Light2", new LightDirectional(), 0.8f, scene); directionalLight2.Transform.Rotation = Quaternion.RotationYawPitchRoll(MathUtil.Pi * 0.125f, MathUtil.Pi * -0.25f, 0.0f); } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Services/PrefabEditorController.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Services/PrefabEditorController.cs index 58e52cec1d..432610e296 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Services/PrefabEditorController.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/PrefabEditor/Services/PrefabEditorController.cs @@ -81,7 +81,7 @@ public override Task RemovePart([NotNull] EntityHierarchyElementViewModel parent throw new InvalidOperationException($"The given {nameof(parent.Id)} does not correspond to any existing part."); var i = parentEntity.Transform.Children.IndexOf(part.Transform); - GameSideNodeContainer.GetNode(parentEntity.Transform.Children).Remove(part.Transform, new Index(i)); + GameSideNodeContainer.GetNode(parentEntity.Transform.Children).Remove(part.Transform, new NodeIndex(i)); } }); } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ProjectWatcher.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ProjectWatcher.cs index 2cc48407a8..c7e1e8fa1f 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ProjectWatcher.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ProjectWatcher.cs @@ -305,6 +305,9 @@ private async Task TrackPackage(PackageViewModel package) directoryWatcher.Track(loadedAssembly.Path); // Track the project file + if (loadedAssembly.ProjectReference == null) + continue; + directoryWatcher.Track(loadedAssembly.ProjectReference.Location); var trackedAssembly = new TrackedAssembly { Package = package, LoadedAssembly = loadedAssembly }; diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Game/SceneEditorGame.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Game/SceneEditorGame.cs index 0959ffdd24..7d72ac59d2 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Game/SceneEditorGame.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Game/SceneEditorGame.cs @@ -136,6 +136,12 @@ public void LoadEntities([ItemNotNull, NotNull] IEnumerable entities, G var scene = GetScene(sceneId); scene.Entities.AddRange(entities); + + foreach (Entity e in entities) + { + ModelComponent mc = e.Get(); + if (mc != null) mc.ForceModelUpdateCount = int.MaxValue; + } } /// @@ -156,6 +162,9 @@ public void LoadEntity([NotNull] Entity entity, Guid sceneId) var scene = GetScene(sceneId); scene.Entities.Add(entity); + + ModelComponent mc = entity.Get(); + if (mc != null) mc.ForceModelUpdateCount = int.MaxValue; } /// diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Services/SceneEditorController.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Services/SceneEditorController.cs index 5f009c7508..d9b9dc9148 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Services/SceneEditorController.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SceneEditor/Services/SceneEditorController.cs @@ -90,7 +90,7 @@ public override Task RemovePart([NotNull] EntityHierarchyElementViewModel parent throw new InvalidOperationException($"The given {nameof(parent.Id)} does not correspond to any existing part."); var i = parentEntity.Transform.Children.IndexOf(part.Transform); - GameSideNodeContainer.GetNode(parentEntity.Transform.Children).Remove(part.Transform, new Index(i)); + GameSideNodeContainer.GetNode(parentEntity.Transform.Children).Remove(part.Transform, new NodeIndex(i)); } }); } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ClassificationHighlightColorsDark.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ClassificationHighlightColorsDark.cs index 69aea1d190..398cb8440e 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ClassificationHighlightColorsDark.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ClassificationHighlightColorsDark.cs @@ -1,7 +1,10 @@ // Copyright (c) Xenko contributors (https://xenko.com) 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.Collections.Generic; +using System.Collections.Immutable; using System.Windows.Media; using ICSharpCode.AvalonEdit.Highlighting; +using Microsoft.CodeAnalysis.Classification; using RoslynPad.Editor; namespace Xenko.Assets.Presentation.AssetEditors.ScriptEditor @@ -17,13 +20,14 @@ class ClassificationHighlightColorsDark : ClassificationHighlightColors public ClassificationHighlightColorsDark() { - this.DefaultBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(Color.FromRgb(220, 220, 220)) }; - this.TypeBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(Color.FromRgb(78, 201, 176)) }; + this.DefaultBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(DefaultColor) }; + this.TypeBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(TypeColor) }; this.CommentBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(Color.FromRgb(87, 166, 74)) }; this.XmlCommentBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(Color.FromRgb(87, 166, 74)) }; this.KeywordBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(KeywordColor) }; this.PreprocessorKeywordBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(Color.FromRgb(155, 155, 155)) }; this.StringBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(Color.FromRgb(214, 157, 133)) }; + this.MethodBrush = new HighlightingColor { Foreground = new SimpleHighlightingBrush(TypeColor) }; } } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/RoslynHost.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/RoslynHost.cs index b831a41ffe..5e5e8cba0b 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/RoslynHost.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/RoslynHost.cs @@ -13,12 +13,14 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Collections.Immutable; using System.Composition.Convention; using System.Composition.Hosting; using System.Linq; using System.Reflection; using System.Threading.Tasks; using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.Host.Mef; using RoslynPad.Editor; using RoslynPad.Roslyn; @@ -49,6 +51,8 @@ public RoslynHost() workspace.EnableDiagnostics(DiagnosticOptions.Semantic | DiagnosticOptions.Syntax); GetService().DiagnosticsUpdated += OnDiagnosticsUpdated; + + ParseOptions = CreateDefaultParseOptions(); } private static CompositionHost CreateCompositionContext() @@ -74,6 +78,15 @@ private static CompositionHost CreateCompositionContext() .CreateContainer(); } + internal static readonly ImmutableArray PreprocessorSymbols = + ImmutableArray.CreateRange(new[] { "TRACE", "DEBUG" }); + + protected virtual ParseOptions CreateDefaultParseOptions() + { + return new CSharpParseOptions(kind: SourceCodeKind.Regular, + preprocessorSymbols: PreprocessorSymbols, languageVersion: LanguageVersion.Latest); + } + /// /// The roslyn workspace. /// @@ -84,6 +97,8 @@ private static CompositionHost CreateCompositionContext() /// public MefHostServices HostServices => hostServices; + public ParseOptions ParseOptions { get; } + /// /// Gets a specific service. /// @@ -120,5 +135,10 @@ public void CloseDocument(DocumentId documentId) { workspace.CloseDocument(documentId); } + + public MetadataReference CreateMetadataReference(string location) + { + throw new NotImplementedException(); + } } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ScriptEditorView.xaml b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ScriptEditorView.xaml index 0f6ab572fc..436e74674d 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ScriptEditorView.xaml +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/ScriptEditorView.xaml @@ -4,7 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Xenko.Assets.Presentation.AssetEditors.ScriptEditor" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:xk="http://schemas.xenko.com/xaml/presentation" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" FocusManager.FocusedElement="{Binding ElementName=CodeEditor}"> diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/SimpleCodeTextEditor.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/SimpleCodeTextEditor.cs index 8886461bd0..686885523e 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/SimpleCodeTextEditor.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptEditor/SimpleCodeTextEditor.cs @@ -7,7 +7,6 @@ using System.Windows.Media; using Microsoft.CodeAnalysis; using RoslynPad.Editor; -using RoslynPad.Roslyn.AutomaticCompletion; using RoslynPad.Roslyn.BraceMatching; using RoslynPad.Roslyn.Diagnostics; using RoslynPad.Roslyn.QuickInfo; @@ -31,7 +30,6 @@ public class SimpleCodeTextEditor : CodeTextEditor private BraceMatcherHighlightRenderer braceMatcherHighlighter; private IBraceMatchingService braceMatchingService; - private IBraceCompletionProvider braceCompletionProvider; private CancellationTokenSource braceMatchingCts; public static readonly StyledProperty ContextActionsIconProperty = CommonProperty.Register( @@ -70,7 +68,6 @@ public void BindSourceTextContainer(RoslynWorkspace workspace, AvalonEditTextCon TextArea.TextView.BackgroundRenderers.Add(textMarkerService); TextArea.TextView.LineTransformers.Add(textMarkerService); TextArea.Caret.PositionChanged += CaretOnPositionChanged; - TextArea.TextEntered += OnTextEntered; // Syntax highlighting var classificationHighlightColors = new ClassificationHighlightColorsDark(); @@ -92,7 +89,6 @@ public void BindSourceTextContainer(RoslynWorkspace workspace, AvalonEditTextCon // Brace matching braceMatcherHighlighter = new BraceMatcherHighlightRenderer(TextArea.TextView, classificationHighlightColors); braceMatchingService = workspace.Host.GetService(); - braceCompletionProvider = workspace.Host.GetService(); AsyncToolTipRequest = ProcessAsyncToolTipRequest; } @@ -103,7 +99,6 @@ public void Unbind() { // Caret/brace matching TextArea.Caret.PositionChanged -= CaretOnPositionChanged; - TextArea.TextEntered -= OnTextEntered; // Syntax highlighting TextArea.TextView.LineTransformers.Remove(syntaxHighlightingColorizer); @@ -242,14 +237,6 @@ private bool TryJumpToPosition(BraceMatchingResult? position, int caret) return false; } - private void OnTextEntered(object sender, TextCompositionEventArgs e) - { - if (e.Text.Length == 1) - { - braceCompletionProvider.TryComplete(workspace.Host.GetDocument(documentId), CaretOffset); - } - } - private static Color GetDiagnosticsColor(DiagnosticData diagnosticData) { switch (diagnosticData.Severity) diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptSourceCodeResolver.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptSourceCodeResolver.cs index a54b7c0ee3..3364f4825f 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptSourceCodeResolver.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/ScriptSourceCodeResolver.cs @@ -91,7 +91,7 @@ public async Task AnalyzeProject(SessionViewModel session, Project project, Canc return; } - var types = assembly.GetTypes(); + var types = assembly.GetExportedTypes(); var typesDict = new Dictionary>(); diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs index 37b8624ed9..5f104734a0 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteInfoViewModel.cs @@ -306,13 +306,13 @@ GraphNodePath IAssetPropertyProviderViewModel.GetAbsolutePathToRootNode() { var path = new GraphNodePath(Editor.Session.AssetNodeContainer.GetNode(Editor.Asset.Asset)); path.PushMember(nameof(SpriteSheetAsset.Sprites)); - path.PushIndex(new Index(Index)); + path.PushIndex(new NodeIndex(Index)); path.PushTarget(); return path; } bool IPropertyProviderViewModel.ShouldConstructMember(IMemberNode member) => ((IPropertyProviderViewModel)Editor.Asset).ShouldConstructMember(member); - bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, Index index) => ((IPropertyProviderViewModel)Editor.Asset).ShouldConstructItem(collection, index); + bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, NodeIndex index) => ((IPropertyProviderViewModel)Editor.Asset).ShouldConstructItem(collection, index); } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteSheetEditorViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteSheetEditorViewModel.cs index 6b2f028259..4c77da9a57 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteSheetEditorViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/ViewModels/SpriteSheetEditorViewModel.cs @@ -238,12 +238,12 @@ internal void ImportFiles(IEnumerable children, int index = -1) internal void InsertImage(SpriteInfo spriteinfo, int index) { - spritesNode.Add(spriteinfo, new Index(index)); + spritesNode.Add(spriteinfo, new NodeIndex(index)); } internal void RemoveImage(SpriteInfo spriteInfo, int imageIndex) { - spritesNode.Remove(spriteInfo, new Index(imageIndex)); + spritesNode.Remove(spriteInfo, new NodeIndex(imageIndex)); } /// diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/Views/SpriteEditorView.xaml b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/Views/SpriteEditorView.xaml index 39d5252dbe..675619dbb5 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/Views/SpriteEditorView.xaml +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/SpriteEditor/Views/SpriteEditorView.xaml @@ -5,7 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:Xenko.Assets.Presentation.ViewModel" xmlns:xk="http://schemas.xenko.com/xaml/presentation" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:behaviors="clr-namespace:Xenko.Assets.Presentation.View.Behaviors" xmlns:valueConverters="clr-namespace:Xenko.Assets.Presentation.ValueConverters" xmlns:sprite="clr-namespace:Xenko.Assets.Sprite;assembly=Xenko.Assets" diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.Events.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.Events.cs index edf4980b8c..163c463540 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.Events.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Game/UIEditorGameAdornerService.Events.cs @@ -13,6 +13,9 @@ using Xenko.Input; using Xenko.Rendering.UI; using Xenko.UI; +using Xenko.Assets.Presentation.AssetEditors.UIEditor.ViewModels; +using Xenko.Core; +using Xenko.UI.Controls; namespace Xenko.Assets.Presentation.AssetEditors.UIEditor.Game { @@ -159,7 +162,7 @@ private void TouchMove(object sender, TouchEventArgs e) } // calculate delta var delta = position - currentPosition; - const float magnetDistance = 10; // FIXME: expose this value in settings + float magnetDistance = Game.Input.IsKeyDown(Keys.LeftShift) || Game.Input.IsKeyDown(Keys.RightShift) ? 0 : 10; if (delta.LengthSquared() > float.Epsilon) { var resolution = Controller.GetEntityByName(UIEditorController.UIEntityName).Get().Resolution; @@ -299,14 +302,50 @@ private static IAdornerBase GetAssociatedAdorner(UIElement visual) private bool TryGetElementIdAtPosition(ref Vector3 worldPosition, out Guid elementId) { - var hitResults = GetAdornerVisualsAtPosition(ref worldPosition); - var visual = hitResults?.OrderBy(r => -r.IntersectionPoint.Z).FirstOrDefault()?.Element; - if (visual == null || !visual.DependencyProperties.TryGetValue(AssociatedElementIdPropertyKey, out elementId)) + var hitResults = GetAdornerVisualsAtPosition(ref worldPosition) as List; + float smallestArea = float.MaxValue; + elementId = default; + var uiComponent = Controller.GetEntityByName(UIEditorController.AdornerEntityName).Get(); + for (int i=0; i public abstract class UIEditorController : AssetCompositeHierarchyEditorController { - internal const float DesignDensity = 100.0f; + internal const float DesignDensity = 100f; internal const string AdornerEntityName = "AdornerEntity"; internal const string AdornerRootElementName = "AdornerRoot"; @@ -75,24 +75,27 @@ private async void ResolutionChanged(object sender, MemberNodeChangeEventArgs e) resolution = Vector3.Max((Vector3)e.NewValue, Vector3.One); await InvokeAsync(() => { - var size = resolution / DesignDensity; - var uiComponent = GetEntityByName(DesignAreaEntityName)?.Get(); + var entity = GetEntityByName(DesignAreaEntityName); + var scale = resolution / DesignDensity; + var uiComponent = entity?.Get(); if (uiComponent != null) { + entity.Transform.Scale = scale; uiComponent.Resolution = resolution; - uiComponent.Size = size; } - uiComponent = GetEntityByName(UIEntityName)?.Get(); + entity = GetEntityByName(UIEntityName); + uiComponent = entity?.Get(); if (uiComponent != null) { + entity.Transform.Scale = scale; uiComponent.Resolution = resolution; - uiComponent.Size = size; } - uiComponent = GetEntityByName(AdornerEntityName)?.Get(); + entity = GetEntityByName(AdornerEntityName); + uiComponent = entity?.Get(); if (uiComponent != null) { - uiComponent.Resolution = resolution*2; - uiComponent.Size = size*2; + entity.Transform.Scale = scale * 2f; + uiComponent.Resolution = resolution; } AdornerService.Refresh().Forget(); }); @@ -118,7 +121,7 @@ public override async Task CreateScene() rootElements.ForEach(r => RootElements[r.Id] = r); var resolution = uiDesign.Resolution; - var size = resolution / DesignDensity; + var scale = resolution / DesignDensity; var rootEntity = new Entity(UIEntityName) { new UIComponent @@ -128,9 +131,9 @@ public override async Task CreateScene() IsFullScreen = false, Resolution = resolution, ResolutionStretch = ResolutionStretch.FixedWidthFixedHeight, - Size = size, } }; + rootEntity.Transform.Scale = scale; var designArea = new Entity(DesignAreaEntityName) { new UIComponent @@ -149,9 +152,9 @@ public override async Task CreateScene() IsFullScreen = false, Resolution = resolution, ResolutionStretch = ResolutionStretch.FixedWidthFixedHeight, - Size = size, } }; + designArea.Transform.Scale = scale; designArea.Transform.Position.Z = -10; var uiAdorners = new Entity(AdornerEntityName) { @@ -168,11 +171,11 @@ public override async Task CreateScene() }, IsBillboard = false, IsFullScreen = false, - Resolution = resolution*2, + Resolution = resolution * 2f, ResolutionStretch = ResolutionStretch.FixedWidthFixedHeight, - Size = size*2, } }; + uiAdorners.Transform.Scale = scale * 2f; uiAdorners.Transform.Position.Z = 10; var entities = new[] { designArea, rootEntity, uiAdorners }; @@ -271,7 +274,7 @@ public override Task RemovePart([NotNull] UIHierarchyItemViewModel parent, UIEle if (panel != null) { var i = panel.Children.IndexOf(part); - GameSideNodeContainer.GetNode(panel.Children).Remove(part, new Index(i)); + GameSideNodeContainer.GetNode(panel.Children).Remove(part, new NodeIndex(i)); } else if (contentControl != null) { @@ -399,7 +402,7 @@ public Vector3 GetMousePositionInUI() var uiEntity = GetEntityByName(AdornerEntityName); var uiComponent = uiEntity.Get(); - var worldMatrix = Matrix.Scaling(uiComponent.Size / uiComponent.Resolution) * uiEntity.Transform.WorldMatrix; + var worldMatrix = Matrix.Scaling(uiEntity.Transform.Scale / uiComponent.Resolution) * uiEntity.Transform.WorldMatrix; // Rotation of Pi along 0x to go from UI space to world space worldMatrix.Row2 = -worldMatrix.Row2; worldMatrix.Row3 = -worldMatrix.Row3; @@ -415,7 +418,7 @@ public Vector3 GetMousePositionInUI() [NotNull] private static PrefabEditorGame CreateEditorGame(TaskCompletionSource gameContentLoadedTaskSource, IEffectCompiler effectCompiler, string effectLogPath) { - return new PrefabEditorGame(gameContentLoadedTaskSource, effectCompiler, effectLogPath); + return new PrefabEditorGame(gameContentLoadedTaskSource, effectCompiler, effectLogPath, true); } [CanBeNull] diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs index c6952d3cf5..572b4400f5 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/PanelViewModel.cs @@ -208,8 +208,8 @@ public void ChangeChildElementLayoutProperties([NotNull] UIElement child, PanelC } // FIXME: review if this is fine doing it that way or if we need to do it the same way as when moving elements around - childrenNode.Remove(child, new Index(index)); - childrenNode.Add(child, new Index(newIndex)); + childrenNode.Remove(child, new NodeIndex(index)); + childrenNode.Add(child, new NodeIndex(newIndex)); Editor.UndoRedoService.SetName(transaction, $"Move {UIEditorBaseViewModel.GetDisplayName(child)}"); } } @@ -540,7 +540,7 @@ private void CopySwapExchange([NotNull] PanelViewModel sourcePanel, [NotNull] UI CopyCommonProperties(Editor.NodeContainer, sourcePanel.AssetSidePanel, targetPanelElement); // Initialize the new hierarchy of elements that starts from the target and contains all the children - IEnumerable children = sourcePanel.Children.ToList(); + IEnumerable children = sourcePanel.Children.ToList(); var hierarchy = UIAssetPropertyGraph.CloneSubHierarchies(Asset.Session.AssetNodeContainer, Asset.Asset, children.Select(c => c.Id.ObjectId), SubHierarchyCloneFlags.None, out _); hierarchy.RootParts.Add(targetPanel.UIElement); hierarchy.Parts.Add(targetPanel); @@ -631,7 +631,7 @@ private static void CopyCommonProperties([NotNull] INodeContainer nodeContainer, var sourceNode = nodeContainer.GetOrCreateNode(sourcePanel); var targetNode = nodeContainer.GetOrCreateNode(targetPanel); - foreach (var targetChild in targetNode.Members.Where(x => x.Name != nameof(Panel.Children) && x.Name != nameof(UIElement.Id))) + foreach (var targetChild in targetNode.Members.Where(x => x.Name != nameof(Panel.Children) && x.Name != nameof(UIElement.Id) && x.Name != nameof(UIElement.DependencyProperties))) { var name = targetChild.Name; var sourceChild = sourceNode.TryGetChild(name); @@ -640,6 +640,9 @@ private static void CopyCommonProperties([NotNull] INodeContainer nodeContainer, targetChild.Update(AssetCloner.Clone(sourceChild.Retrieve())); } } + + // Copy the dependency properties, eg. the source panel may be inside a grid and has set grid row/column + sourcePanel.DependencyProperties.CopyTo(targetPanel.DependencyProperties); } } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIElementViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIElementViewModel.cs index 6aa14c120a..7526609dfd 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIElementViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/ViewModels/UIElementViewModel.cs @@ -170,7 +170,7 @@ public override GraphNodePath GetNodePath() node.PushTarget(); node.PushMember(nameof(UIAsset.Hierarchy.Parts)); node.PushTarget(); - node.PushIndex(new Index(Id.ObjectId)); + node.PushIndex(new NodeIndex(Id.ObjectId)); node.PushMember(nameof(UIElementDesign.UIElement)); node.PushTarget(); return node; @@ -248,13 +248,13 @@ protected override string GetDropLocationName() protected T GetDependencyPropertyValue(UIElement element, PropertyKey property) { var dependencyPropertiesNode = Editor.NodeContainer.GetOrCreateNode(element)[nameof(UIElement.DependencyProperties)]; - return (T)dependencyPropertiesNode.Retrieve(new Index(property)); + return (T)dependencyPropertiesNode.Retrieve(new NodeIndex(property)); } protected bool RemoveDependencyProperty(UIElement element, PropertyKey property) { var dependencyPropertiesNode = Editor.NodeContainer.GetOrCreateNode(element)[nameof(UIElement.DependencyProperties)].Target; - var propertyIndex = new Index(property); + var propertyIndex = new NodeIndex(property); if (!dependencyPropertiesNode.Indices.Contains(propertyIndex)) return false; @@ -266,7 +266,7 @@ protected bool RemoveDependencyProperty(UIElement element, PropertyKey property) protected void SetDependencyPropertyValue(UIElement element, PropertyKey property, T value) { var dependencyPropertiesNode = Editor.NodeContainer.GetOrCreateNode(element)[nameof(UIElement.DependencyProperties)].Target; - var propertyIndex = new Index(property); + var propertyIndex = new NodeIndex(property); if (!dependencyPropertiesNode.Indices.Contains(propertyIndex)) { // Note: update would probably work, but we want to remove the property when Undo @@ -317,6 +317,6 @@ bool IPropertyProviderViewModel.ShouldConstructMember(IMemberNode member) return assetPropertyProvider.ShouldConstructMember(member); } - bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, Index index) => ((IPropertyProviderViewModel)Asset).ShouldConstructItem(collection, index); + bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, NodeIndex index) => ((IPropertyProviderViewModel)Asset).ShouldConstructItem(collection, index); } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Views/UIEditorView.xaml b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Views/UIEditorView.xaml index 39e2a3aa5c..4036d550c4 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Views/UIEditorView.xaml +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UIEditor/Views/UIEditorView.xaml @@ -5,7 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:viewModel="clr-namespace:Xenko.Assets.Presentation.ViewModel" xmlns:uevm="clr-namespace:Xenko.Assets.Presentation.AssetEditors.UIEditor.ViewModels" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:cm="clr-namespace:System.ComponentModel;assembly=WindowsBase" xmlns:panels="clr-namespace:Xenko.UI.Panels;assembly=Xenko.UI" xmlns:views="clr-namespace:Xenko.Assets.Presentation.AssetEditors.AssetCompositeGameEditor.Views" diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UILibraryEditor/ViewModels/UILibraryEditorViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UILibraryEditor/ViewModels/UILibraryEditorViewModel.cs index 677b8b174d..8fe9136e6a 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/UILibraryEditor/ViewModels/UILibraryEditorViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/UILibraryEditor/ViewModels/UILibraryEditorViewModel.cs @@ -19,6 +19,7 @@ using Xenko.Assets.Presentation.AssetEditors.UILibraryEditor.Views; using Xenko.Assets.Presentation.ViewModel; using Xenko.Assets.UI; +using System.Collections.Generic; namespace Xenko.Assets.Presentation.AssetEditors.UILibraryEditor.ViewModels { @@ -74,6 +75,13 @@ protected override async Task InitializeEditor() UILibrary.Children.CollectionChanged += RootElementsCollectionChanged; ActiveRoot = UILibrary.Children.FirstOrDefault(); + + // repair public list, if needed (sometimes they get broken during copy/paste operations) + ClearPublicUIElements(); + foreach (UIElementViewModel root in UILibrary.RootElements) { + UpdatePublicUIElementsEntry(root.Id.ObjectId, root.Name); + } + return true; } @@ -116,10 +124,15 @@ private void RootPropertyChanged(object sender, [NotNull] PropertyChangedEventAr } } + private void ClearPublicUIElements() { + var node = NodeContainer.GetNode((UILibraryAsset)Asset.Asset)[nameof(UILibraryAsset.PublicUIElements)].Target; + if (node is Xenko.Core.Assets.Quantum.IAssetObjectNode assetObjNode) assetObjNode.Clear(); + } + private void UpdatePublicUIElementsEntry(Guid rootId, [CanBeNull] string name) { var node = NodeContainer.GetNode((UILibraryAsset)Asset.Asset)[nameof(UILibraryAsset.PublicUIElements)].Target; - var index = new Index(rootId); + var index = new NodeIndex(rootId); using (var transaction = UndoRedoService.CreateTransaction()) { diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/SinglePropertyProvider.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/SinglePropertyProvider.cs index 31fda76048..052271e814 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/SinglePropertyProvider.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/SinglePropertyProvider.cs @@ -27,6 +27,6 @@ public SinglePropertyProvider(IObjectNode rootNode) /// bool IPropertyProviderViewModel.ShouldConstructMember(IMemberNode member) => true; - bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, Index index) => true; + bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, NodeIndex index) => true; } } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/GraphTemplates.xaml b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/GraphTemplates.xaml index 8d0c5524c5..6fdb89ff85 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/GraphTemplates.xaml +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/GraphTemplates.xaml @@ -1,6 +1,6 @@  diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/VisualScriptEditorView.xaml b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/VisualScriptEditorView.xaml index e8fccd3324..5a8d80f116 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/VisualScriptEditorView.xaml +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/Views/VisualScriptEditorView.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:Xenko.Assets.Presentation.AssetEditors.VisualScriptEditor" xmlns:graphx="clr-namespace:GraphX.Controls;assembly=GraphX.WPF.Controls" xmlns:sskkgraph="http://schemas.xenko.com/xaml/presentation/graph" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:templateViews="clr-namespace:Xenko.Core.Assets.Editor.Components.TemplateDescriptions.Views;assembly=Xenko.Core.Assets.Editor" xmlns:converters="clr-namespace:Xenko.Assets.Presentation.AssetEditors.VisualScriptEditor.Converters" xmlns:graphX="http://schemas.panthernet.ru/graphx/" diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptBlockViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptBlockViewModel.cs index b7b78b11c7..5ac6612ed8 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptBlockViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptBlockViewModel.cs @@ -90,10 +90,10 @@ GraphNodePath IAssetPropertyProviderViewModel.GetAbsolutePathToRootNode() var path = new GraphNodePath(Method.Editor.Session.AssetNodeContainer.GetNode(asset)); path.PushMember(nameof(VisualScriptAsset.Methods)); path.PushTarget(); - path.PushIndex(new Index(asset.Methods.IndexOf(Method.Method.Method))); + path.PushIndex(new NodeIndex(asset.Methods.IndexOf(Method.Method.Method))); path.PushMember(nameof(Scripts.Method.Blocks)); path.PushTarget(); - path.PushIndex(new Index(block.Id)); + path.PushIndex(new NodeIndex(block.Id)); path.PushTarget(); return path; } @@ -102,7 +102,7 @@ GraphNodePath IAssetPropertyProviderViewModel.GetAbsolutePathToRootNode() bool IPropertyProviderViewModel.ShouldConstructMember(IMemberNode member) => true; - bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, Index index) => true; + bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, NodeIndex index) => true; private void GraphNodeListener_Changing(object sender, MemberNodeChangeEventArgs e) { diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs index b17d929218..00619048c5 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptEditorViewModel.cs @@ -299,20 +299,20 @@ private void AddNewMethod(object methodSymbolObject) switch (methodSymbol.DeclaredAccessibility) { case RoslynAccessibility.Protected: - method.Accessibility = Accessibility.Protected; + method.Accessibility = Scripts.Accessibility.Protected; break; case RoslynAccessibility.Internal: - method.Accessibility = Accessibility.Internal; + method.Accessibility = Scripts.Accessibility.Internal; break; case RoslynAccessibility.ProtectedOrInternal: - method.Accessibility = Accessibility.ProtectedOrInternal; + method.Accessibility = Scripts.Accessibility.ProtectedOrInternal; break; case RoslynAccessibility.Public: - method.Accessibility = Accessibility.Public; + method.Accessibility = Scripts.Accessibility.Public; break; default: // Default to protected if we are not sure - method.Accessibility = Accessibility.Protected; + method.Accessibility = Scripts.Accessibility.Protected; break; } diff --git a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptLinkViewModel.cs b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptLinkViewModel.cs index 3286baa98f..02d6e2d29d 100644 --- a/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptLinkViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/AssetEditors/VisualScriptEditor/VisualScriptLinkViewModel.cs @@ -55,10 +55,10 @@ GraphNodePath IAssetPropertyProviderViewModel.GetAbsolutePathToRootNode() var path = new GraphNodePath(Method.Editor.Session.AssetNodeContainer.GetNode(asset)); path.PushMember(nameof(VisualScriptAsset.Methods)); path.PushTarget(); - path.PushIndex(new Index(asset.Methods.IndexOf(Method.Method.Method))); + path.PushIndex(new NodeIndex(asset.Methods.IndexOf(Method.Method.Method))); path.PushMember(nameof(Scripts.Method.Links)); path.PushTarget(); - path.PushIndex(new Index(link.Id)); + path.PushIndex(new NodeIndex(link.Id)); path.PushTarget(); return path; } @@ -66,6 +66,6 @@ GraphNodePath IAssetPropertyProviderViewModel.GetAbsolutePathToRootNode() IObjectNode IPropertyProviderViewModel.GetRootNode() => Editor.Session.AssetNodeContainer.GetNode(link); bool IPropertyProviderViewModel.ShouldConstructMember(IMemberNode member) => true; - bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, Index index) => true; + bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, NodeIndex index) => true; } } diff --git a/sources/editor/Xenko.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs b/sources/editor/Xenko.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs index 04e83fd926..717be45fae 100644 --- a/sources/editor/Xenko.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/CurveEditor/ViewModels/KeyFrameCurveViewModel.cs @@ -55,7 +55,7 @@ public override bool RemovePoint(ControlPointViewModelBase point) var kfcp = point as KeyFrameControlPointViewModel; if (kfcp == null) return false; - var index = new Index(controlPoints.IndexOf(kfcp)); + var index = new NodeIndex(controlPoints.IndexOf(kfcp)); if (index.Int == -1) return false; @@ -74,11 +74,11 @@ protected virtual KeyFrameControlPointViewModel CreateControlPoint([NotN protected abstract KeyFrameControlPointViewModel CreateKeyFrameControlPoint([NotNull] IMemberNode keyNode, [NotNull] IMemberNode valueNode, [NotNull] IMemberNode tangentTypeNode); - protected Index GetInsertIndex(Vector2 point) + protected NodeIndex GetInsertIndex(Vector2 point) { // Assuming the key frames are ordered var index = controlPoints.FindIndex(kf => (kf.IsSynchronized ? kf.ActualKey : kf.Key) > point.X); - return new Index(index >= 0 ? index : controlPoints.Count); + return new NodeIndex(index >= 0 ? index : controlPoints.Count); } protected sealed override void InitializeOverride() diff --git a/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/Behaviors/AxisBehavior.cs b/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/Behaviors/AxisBehavior.cs index 0da83062fc..56f36f2ce3 100644 --- a/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/Behaviors/AxisBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/Behaviors/AxisBehavior.cs @@ -3,7 +3,7 @@ using System.Windows; using System.Windows.Input; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Presentation.Drawing; namespace Xenko.Assets.Presentation.CurveEditor.Views.Behaviors diff --git a/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/CurveEditorView.xaml b/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/CurveEditorView.xaml index a8bf1a95ef..b1da540418 100644 --- a/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/CurveEditorView.xaml +++ b/sources/editor/Xenko.Assets.Presentation/CurveEditor/Views/CurveEditorView.xaml @@ -4,7 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:xk="http://schemas.xenko.com/xaml/presentation" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:behaviors="clr-namespace:Xenko.Assets.Presentation.View.Behaviors" xmlns:behaviors1="clr-namespace:Xenko.Assets.Presentation.CurveEditor.Views.Behaviors" xmlns:strings="clr-namespace:Xenko.Assets.Presentation.Resources.Strings" diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Gizmos.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Gizmos.xkeffectlog index 2fb656d69a..0ce1fe65ef 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Gizmos.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Gizmos.xkeffectlog @@ -14,7 +14,8 @@ UsedParameters: - GizmoUniformColorMaterial.GizmoColorKey Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -25,22 +26,27 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: - 8 Lighting.EnvironmentLights: @@ -48,7 +54,8 @@ UsedParameters: Compositions: {} Macros: [] Mixins: - - ClassName: LightSimpleAmbient + - !ShaderClassSource + ClassName: LightSimpleAmbient --- !EffectCompileRequest EffectName: XenkoEditorForwardShadingEffect @@ -65,7 +72,8 @@ UsedParameters: - Material.DiffuseValue Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -76,16 +84,20 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.EnvironmentLights: - !ShaderClassSource ClassName: LightSimpleAmbient @@ -106,7 +118,8 @@ UsedParameters: - Material.DiffuseValue Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -117,16 +130,20 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.EnvironmentLights: - !ShaderClassSource ClassName: LightSimpleAmbient diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Grid.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Grid.xkeffectlog index b45b11f424..d1cb33cb70 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Grid.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/Grid.xkeffectlog @@ -25,10 +25,12 @@ UsedParameters: - Material.TextureOffset Macros: [] Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Macros: [] Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: - matEmissive - rgba @@ -40,7 +42,8 @@ UsedParameters: - Material.EmissiveIntensity Macros: [] Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: - matEmissiveIntensity - r @@ -52,7 +55,8 @@ UsedParameters: - Material.DiffuseSpecularAlphaBlendValue Macros: [] Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: - matDiffuseSpecularAlphaBlend - r @@ -64,7 +68,8 @@ UsedParameters: - Material.AlphaBlendColorValue Macros: [] Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: - matAlphaBlendColor - rgb @@ -76,10 +81,13 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream \ No newline at end of file + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream \ No newline at end of file diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/HDRGamePack.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/HDRGamePack.xkeffectlog index 39f3c85d2f..8bf61270a5 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/HDRGamePack.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/HDRGamePack.xkeffectlog @@ -4,17 +4,20 @@ EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -24,7 +27,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -32,14 +36,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -48,7 +54,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -58,28 +65,33 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -87,14 +99,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -103,7 +117,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -113,8 +128,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -125,20 +142,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -146,14 +166,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -162,7 +184,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -172,8 +195,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect.ShadowMapCaster @@ -184,20 +209,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -205,14 +233,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -220,7 +250,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -228,7 +259,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -237,7 +269,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -250,25 +283,30 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -278,7 +316,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -286,14 +325,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -302,7 +343,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -312,21 +354,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -344,20 +392,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -365,14 +416,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -381,7 +434,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -391,21 +445,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -427,20 +487,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -448,14 +511,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -463,7 +528,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -471,7 +537,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -479,7 +546,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -487,7 +555,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -495,7 +564,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -504,7 +574,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -514,8 +585,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect @@ -526,20 +599,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -547,14 +623,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -563,7 +641,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -573,21 +652,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -609,20 +694,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -631,8 +719,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect @@ -643,20 +733,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -664,14 +757,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -679,7 +774,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -687,7 +783,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -696,7 +793,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -709,21 +807,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -745,20 +849,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -767,21 +874,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -803,20 +916,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -824,14 +940,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -839,7 +957,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -847,7 +966,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -855,7 +975,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -863,7 +984,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -871,7 +993,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -880,7 +1003,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -890,21 +1014,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -993,7 +1123,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1008,14 +1139,16 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [ParticleBase.EmissiveValue] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -1029,26 +1162,31 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.VertexStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDisplacement, r] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderMixinSource Mixins: - - ClassName: ComputeColorSubtract + - !ShaderClassSource + ClassName: ComputeColorSubtract Compositions: color1: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantFloatLink @@ -1067,17 +1205,21 @@ UsedParameters: GenericArguments: [Position, meshNormal, false] Material.VertexStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialDisplacementStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialDisplacementStream Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -1085,7 +1227,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -1093,7 +1236,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -1101,7 +1245,8 @@ UsedParameters: GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -1114,8 +1259,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: AmbientOcclusionRawAOEffect diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingEffectLit.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingEffectLit.xkeffectlog index 8afc7f1e61..887427e66e 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingEffectLit.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingEffectLit.xkeffectlog @@ -12,8 +12,10 @@ UsedParameters: Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Name: null Material.PixelStageSurfaceFilter: null Material.PixelStageSurfaceShaders: !ShaderMixinSource @@ -33,7 +35,8 @@ UsedParameters: - Material.TextureOffset Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Name: null - !ShaderMixinSource Compositions: @@ -45,11 +48,13 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Name: null Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Name: null Material.TessellationShader: null Material.VertexStageSurfaceShaders: null @@ -70,8 +75,10 @@ UsedParameters: Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Name: null Material.PixelStageSurfaceFilter: null Material.PixelStageSurfaceShaders: !ShaderMixinSource @@ -91,7 +98,8 @@ UsedParameters: - Material.TextureOffset Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Name: null - !ShaderMixinSource Compositions: @@ -103,11 +111,13 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Name: null Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Name: null Material.TessellationShader: null Material.VertexStageSurfaceShaders: null diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingHighlight.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingHighlight.xkeffectlog index 190175923e..3e0ee1f00c 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingHighlight.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingHighlight.xkeffectlog @@ -14,7 +14,8 @@ UsedParameters: - Material.DiffuseValue Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -25,16 +26,20 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.EnvironmentLights: - !ShaderClassSource ClassName: LightConstantWhite @@ -59,7 +64,8 @@ UsedParameters: - Material.TextureOffset Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -70,23 +76,28 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: - !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: LightConstantWhite + - !ShaderClassSource + ClassName: LightConstantWhite --- !EffectCompileRequest EffectName: XenkoEditorForwardShadingEffect.Highlight @@ -111,7 +122,8 @@ UsedParameters: - Material.TextureScale - Material.TextureOffset Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -121,13 +133,17 @@ UsedParameters: GenericArguments: - false Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.EnvironmentLights: - !ShaderClassSource ClassName: LightConstantWhite diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingPicking.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingPicking.xkeffectlog index d4f1454336..73d5eac51c 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingPicking.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingPicking.xkeffectlog @@ -18,7 +18,8 @@ UsedParameters: - Material.DiffuseValue Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -29,16 +30,20 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.EnvironmentLights: - !ShaderClassSource ClassName: LightConstantWhite @@ -63,7 +68,8 @@ UsedParameters: - Material.TextureOffset Macros: [] Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -74,20 +80,25 @@ UsedParameters: - false Macros: [] Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Macros: [] Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: - !ShaderMixinSource Compositions: {} Macros: [] Mixins: - - ClassName: LightConstantWhite + - !ShaderClassSource + ClassName: LightConstantWhite diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingWireframe.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingWireframe.xkeffectlog index f9a16e3e02..8de5becbbe 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingWireframe.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/LoadingWireframe.xkeffectlog @@ -13,7 +13,8 @@ UsedParameters: GenericArguments: - Material.DiffuseValue Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -23,13 +24,17 @@ UsedParameters: GenericArguments: - false Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.EnvironmentLights: - !ShaderClassSource ClassName: LightConstantWhite @@ -53,7 +58,8 @@ UsedParameters: - Material.TextureScale - Material.TextureOffset Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -63,18 +69,23 @@ UsedParameters: GenericArguments: - false Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: [] Lighting.EnvironmentLights: - !ShaderMixinSource Mixins: - - ClassName: LightConstantWhite + - !ShaderClassSource + ClassName: LightConstantWhite --- !EffectCompileRequest EffectName: XenkoEditorForwardShadingEffect.Wireframe @@ -99,7 +110,8 @@ UsedParameters: - Material.TextureScale - Material.TextureOffset Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse - !ShaderMixinSource Compositions: surfaces: !ShaderArraySource @@ -109,13 +121,17 @@ UsedParameters: GenericArguments: - false Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.EnvironmentLights: - !ShaderClassSource ClassName: LightConstantWhite diff --git a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/PostEffects.xkeffectlog b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/PostEffects.xkeffectlog index 14a63d3b07..8d868dcfc2 100644 --- a/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/PostEffects.xkeffectlog +++ b/sources/editor/Xenko.Assets.Presentation/EditorPackage/Assets/PostEffects.xkeffectlog @@ -4,17 +4,20 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderMixinSource Mixins: - - ClassName: ComputeColorAdd3ds + - !ShaderClassSource + ClassName: ComputeColorAdd3ds Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -24,7 +27,8 @@ UsedParameters: GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -32,14 +36,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -48,7 +54,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -58,21 +65,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -90,20 +103,23 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler GenericArguments: [Material.DiffuseMap, TEXCOORD0, Material.Sampler.i0, rgba, Material.TextureScale, Material.TextureOffset] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -111,14 +127,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -127,7 +145,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -137,21 +156,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -173,20 +198,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -194,14 +222,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -209,7 +239,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -217,7 +248,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -225,7 +257,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -233,7 +266,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -241,7 +275,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -250,7 +285,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -260,8 +296,10 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect @@ -272,20 +310,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -293,14 +334,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -309,7 +352,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -319,21 +363,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -355,20 +405,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -377,8 +430,10 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: XenkoForwardShadingEffect @@ -389,20 +444,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -410,14 +468,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -425,7 +485,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -433,7 +494,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -442,7 +504,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -455,21 +518,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -491,20 +560,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -513,21 +585,27 @@ UsedParameters: GenericArguments: [false] Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -549,20 +627,23 @@ UsedParameters: Material.SkinningMaxBones: 56 Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceDiffuse + - !ShaderClassSource + ClassName: MaterialSurfaceDiffuse Compositions: diffuseMap: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [Material.DiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceGlossinessMap + - !ShaderClassSource + ClassName: MaterialSurfaceGlossinessMap GenericArguments: [false] Compositions: glossinessMap: !ShaderClassSource @@ -570,14 +651,16 @@ UsedParameters: GenericArguments: [Material.GlossinessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceMetalness + - !ShaderClassSource + ClassName: MaterialSurfaceMetalness Compositions: metalnessMap: !ShaderClassSource ClassName: ComputeColorConstantFloatLink GenericArguments: [Material.MetalnessValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusion, r] Compositions: computeColorSource: !ShaderClassSource @@ -585,7 +668,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAmbientOcclusionDirectLightingFactor, r] Compositions: computeColorSource: !ShaderClassSource @@ -593,7 +677,8 @@ UsedParameters: GenericArguments: [Material.AmbientOcclusionDirectLightingFactorValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavity, r] Compositions: computeColorSource: !ShaderClassSource @@ -601,7 +686,8 @@ UsedParameters: GenericArguments: [Material.CavityValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavityDiffuse, r] Compositions: computeColorSource: !ShaderClassSource @@ -609,7 +695,8 @@ UsedParameters: GenericArguments: [Material.CavityDiffuseValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matCavitySpecular, r] Compositions: computeColorSource: !ShaderClassSource @@ -617,7 +704,8 @@ UsedParameters: GenericArguments: [Material.CavitySpecularValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceLightingAndShading + - !ShaderClassSource + ClassName: MaterialSurfaceLightingAndShading Compositions: surfaces: !ShaderArraySource Values: @@ -626,7 +714,8 @@ UsedParameters: GenericArguments: [false] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceShadingSpecularMicrofacet + - !ShaderClassSource + ClassName: MaterialSurfaceShadingSpecularMicrofacet Compositions: fresnelFunction: !ShaderClassSource ClassName: MaterialSpecularMicrofacetFresnelSchlick @@ -636,21 +725,27 @@ UsedParameters: ClassName: MaterialSpecularMicrofacetNormalDistributionGGX Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream Lighting.DirectLightGroups: - !ShaderMixinSource Mixins: - - ClassName: LightClusteredPointGroup + - !ShaderClassSource + ClassName: LightClusteredPointGroup - !ShaderClassSource ClassName: LightClusteredSpotGroup - !ShaderMixinSource Mixins: - - ClassName: LightDirectionalGroup + - !ShaderClassSource + ClassName: LightDirectionalGroup GenericArguments: [1] - - ClassName: ShadowMapReceiverDirectional + - !ShaderClassSource + ClassName: ShadowMapReceiverDirectional GenericArguments: [4, 1, false, true, false] - - ClassName: ShadowMapFilterPcf + - !ShaderClassSource + ClassName: ShadowMapFilterPcf GenericArguments: [PerView.Lighting, 5] Lighting.EnvironmentLights: - !ShaderClassSource @@ -739,7 +834,8 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -754,14 +850,16 @@ UsedParameters: ParticleBase.UsesSoftEdge: 0 ParticleBase.BaseColor: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantColorLink GenericArguments: [ParticleBase.EmissiveValue] color2: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorTextureScaledOffsetDynamicSampler @@ -775,26 +873,31 @@ EffectName: XenkoForwardShadingEffect UsedParameters: Material.VertexStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDisplacement, r] Compositions: computeColorSource: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderMixinSource Mixins: - - ClassName: ComputeColorSubtract + - !ShaderClassSource + ClassName: ComputeColorSubtract Compositions: color1: !ShaderMixinSource Mixins: - - ClassName: ComputeColorMultiply + - !ShaderClassSource + ClassName: ComputeColorMultiply Compositions: color1: !ShaderClassSource ClassName: ComputeColorConstantFloatLink @@ -813,17 +916,21 @@ UsedParameters: GenericArguments: [Position, meshNormal, false] Material.VertexStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialDisplacementStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialDisplacementStream Material.PixelStageSurfaceShaders: !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceArray + - !ShaderClassSource + ClassName: MaterialSurfaceArray Compositions: layers: !ShaderArraySource Values: - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissive, rgba] Compositions: computeColorSource: !ShaderClassSource @@ -831,7 +938,8 @@ UsedParameters: GenericArguments: [Material.EmissiveValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matEmissiveIntensity, r] Compositions: computeColorSource: !ShaderClassSource @@ -839,7 +947,8 @@ UsedParameters: GenericArguments: [Material.EmissiveIntensity] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matDiffuseSpecularAlphaBlend, r] Compositions: computeColorSource: !ShaderClassSource @@ -847,7 +956,8 @@ UsedParameters: GenericArguments: [Material.DiffuseSpecularAlphaBlendValue] - !ShaderMixinSource Mixins: - - ClassName: MaterialSurfaceSetStreamFromComputeColor + - !ShaderClassSource + ClassName: MaterialSurfaceSetStreamFromComputeColor GenericArguments: [matAlphaBlendColor, rgb] Compositions: computeColorSource: !ShaderClassSource @@ -860,8 +970,10 @@ UsedParameters: ClassName: MaterialSurfaceDiffuseSpecularAlphaBlendColor Material.PixelStageStreamInitializer: !ShaderMixinSource Mixins: - - ClassName: MaterialStream - - ClassName: MaterialPixelShadingStream + - !ShaderClassSource + ClassName: MaterialStream + - !ShaderClassSource + ClassName: MaterialPixelShadingStream --- !EffectCompileRequest EffectName: AmbientOcclusionRawAOEffect diff --git a/sources/editor/Xenko.Assets.Presentation/EffectCompilerServerSession.cs b/sources/editor/Xenko.Assets.Presentation/EffectCompilerServerSession.cs deleted file mode 100644 index 2f429751a5..0000000000 --- a/sources/editor/Xenko.Assets.Presentation/EffectCompilerServerSession.cs +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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.Collections.Specialized; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Xenko.Core.Assets; -using Xenko.Core.Assets.Editor.Services; -using Xenko.Core.Assets.Editor.ViewModel; -using Xenko.Core.Serialization; -using Xenko.Assets.Effect; -using Xenko.Assets.Presentation.ViewModel; -using Xenko.ConnectionRouter; -using Xenko.Engine.Network; -using Xenko.Shaders.Compiler; -using Xenko.Core.Presentation.Commands; -using Xenko.Core.Presentation.Dirtiables; -using Xenko.Core.Presentation.Services; -using Xenko.Core.Extensions; - -namespace Xenko.Assets.Presentation -{ - /// - /// Handle connection to EffectCompilerServer for a given . - /// It will let user knows that some new effects were compiled and might need to be imported in your assets. - /// - class EffectCompilerServerSession : IDisposable - { - class TrackedPackage : IDisposable - { - private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); - - public CancellationToken CancellationToken => cancellationTokenSource.Token; - - public PackageViewModel Package { get; } - - public TrackedPackage(PackageViewModel package) - { - Package = package; - } - - public void Dispose() - { - cancellationTokenSource.Cancel(); - } - } - - private readonly SessionViewModel session; - private readonly IDispatcherService dispatcher; - private HashSet pendingEffects = new HashSet(); - private readonly Task routerLaunchedTask; - private readonly List trackedPackages = new List(); - - // Updated by CheckEffectLogAsset() - private EffectLogViewModel effectLogViewModel; - private string effectLogText; // to test for change - private EffectLogStore effectLogStore; - private MemoryStream effectLogStream; - private bool isDisposed; - - public EffectCompilerServerSession(SessionViewModel session) - { - if (session == null) throw new ArgumentNullException(nameof(session)); - - this.session = session; - this.dispatcher = session.ServiceProvider.Get(); - - routerLaunchedTask = Task.Run(() => - { - RouterHelper.EnsureRouterLaunched(); - }); - - TrackPackages(session.LocalPackages); - session.LocalPackages.CollectionChanged += LocalPackages_CollectionChanged; - - session.ImportEffectLogCommand = new AnonymousCommand(session.ServiceProvider, () => - { - if (session.CurrentProject != null) - ImportEffectLog(session.CurrentProject); - }, () => session.CurrentProject?.Package != null); - } - - private async void Start(PackageViewModel package, CancellationToken cancellationToken) - { - // Load existing effect log - try - { - // Connect to effect compiler server - await routerLaunchedTask; - var effectCompilerServerSocket = await RouterClient.RequestServer($"/service/Xenko.EffectCompilerServer/{XenkoVersion.NuGetVersion}/Xenko.EffectCompilerServer.exe?mode=gamestudio&packagename={package.Package.Meta.Name}"); - - // Cancellation by closing the socket handle - cancellationToken.Register(effectCompilerServerSocket.Dispose); - - var effectCompilerMessageLayer = new SocketMessageLayer(effectCompilerServerSocket, false); - - // Load existing asset - dispatcher.Invoke(() => CheckEffectLogAsset(package)); - - effectCompilerMessageLayer.AddPacketHandler(packet => HandleEffectCompilerRequestedPacket(packet, package)); - - // Run main socket loop - Task.Run(() => effectCompilerMessageLayer.MessageLoop()); - } - catch - { - // TODO: Log error - } - } - - public void Dispose() - { - if (!isDisposed) - { - isDisposed = true; - - // Untrack packages - session.LocalPackages.CollectionChanged -= LocalPackages_CollectionChanged; - UntrackPackages(trackedPackages.Select(x => x.Package)); - - // Remove import effect log command - session.ImportEffectLogCommand = null; - } - } - - private void LocalPackages_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) - { - if (e.NewItems != null) - { - TrackPackages(e.NewItems.OfType()); - } - - if (e.OldItems != null) - { - UntrackPackages(e.OldItems.OfType()); - } - } - - private void TrackPackages(IEnumerable packages) - { - foreach (var package in packages) - { - var trackedPackage = new TrackedPackage(package); - trackedPackages.Add(trackedPackage); - - Task.Run(() => Start(package, trackedPackage.CancellationToken)); - } - } - - private void UntrackPackages(IEnumerable packages) - { - var packagesCopy = packages.ToList(); - - trackedPackages.RemoveAll(trackedPackage => - { - if (packagesCopy.Contains(trackedPackage.Package)) - { - trackedPackage.Dispose(); - return true; - } - - return false; - }); - } - - /// - /// Checks if the effect log asset changed since last check. - /// - private void CheckEffectLogAsset(PackageViewModel package) - { - var newEffectLogViewModel = package.Assets.FirstOrDefault(x => x.Name == EffectLogAsset.DefaultFile) as EffectLogViewModel; - var newEffectLogText = newEffectLogViewModel?.Text; - - if (newEffectLogText != effectLogText // Asset changed? - || effectLogStore == null) // First run? - { - effectLogText = newEffectLogText; - effectLogViewModel = newEffectLogViewModel; - - // Asset changed, update with new data - effectLogStream = new MemoryStream(); - - if (effectLogText != null) - { - var effectLogData = Encoding.UTF8.GetBytes(effectLogText); - effectLogStream.Write(effectLogData, 0, effectLogData.Length); - effectLogStream.Position = 0; - } - - effectLogStore = new EffectLogStore(effectLogStream); - effectLogStore.LoadNewValues(); - - // Update pending effects count (against new asset) - int importEffectLogPendingCount = 0; - foreach (var effectCompilerResult in pendingEffects) - { - if (!effectLogStore.Contains(effectCompilerResult)) - { - importEffectLogPendingCount++; - } - } - - UpdateImportEffectLogPendingCount(importEffectLogPendingCount); - } - } - - /// - /// Imports the effect log as an asset. - /// - private void ImportEffectLog(PackageViewModel package) - { - using (var transaction = session.UndoRedoService.CreateTransaction()) - { - CheckEffectLogAsset(package); - - // Create asset (on first time) - if (effectLogViewModel == null) - { - var effectLogAsset = new EffectLogAsset(); - var assetItem = new AssetItem(EffectLogAsset.DefaultFile, effectLogAsset); - - // Add created asset to project - effectLogViewModel = (EffectLogViewModel)package.CreateAsset(package.AssetMountPoint, assetItem, true, null); - - CheckEffectLogAsset(package); - } - - // Import shaders - foreach (var effectCompilerResult in pendingEffects) - { - if (!effectLogStore.Contains(effectCompilerResult)) - effectLogStore[effectCompilerResult] = true; - } - - // Reset current list of shaders to import - var oldPendingEffects = pendingEffects; - session.UndoRedoService.PushOperation(new AnonymousDirtyingOperation(Enumerable.Empty(), - () => { pendingEffects = oldPendingEffects; session.ImportEffectLogPendingCount = oldPendingEffects.Count; }, - () => { pendingEffects = new HashSet(); session.ImportEffectLogPendingCount = 0; })); - - pendingEffects = new HashSet(); - session.ImportEffectLogPendingCount = 0; - - // Extract current asset data - var effectLogData = effectLogStream.ToArray(); - - // Update asset - effectLogViewModel.Text = Encoding.UTF8.GetString(effectLogData, 0, effectLogData.Length); - effectLogText = effectLogViewModel.Text; - - // Select current asset - session.ActiveAssetView.SelectAssets(new[] { effectLogViewModel }); - - session.UndoRedoService.SetName(transaction, "Import effect log"); - } - } - - private void HandleEffectCompilerRequestedPacket(RemoteEffectCompilerEffectRequested packet, PackageViewModel package) - { - // Received a shader requested notification, add it to list of "pending shaders", and update count in UI - - dispatcher.InvokeAsync(() => - { - CheckEffectLogAsset(package); - - // Try to decode request - try - { - // Deserialize as an object - var binaryReader = new BinarySerializationReader(new MemoryStream(packet.Request)); - EffectCompileRequest effectCompileRequest = null; - binaryReader.Context.SerializerSelector = SerializerSelector.AssetWithReuse; - binaryReader.SerializeExtended(ref effectCompileRequest, ArchiveMode.Deserialize, null); - - // Record in list of pending effects and check if it would result in a new shader - // (it is still recorded in list of pending effect, in case EffectLog asset is deleted in the meantime) - if (pendingEffects.Add(effectCompileRequest) && !effectLogStore.Contains(effectCompileRequest)) - { - UpdateImportEffectLogPendingCount(session.ImportEffectLogPendingCount + 1); - } - } - catch - { - // TODO Log error - //Log.Warning("Received an effect compilation request which could not be decoded. Make sure Windows project compiled successfully and is up to date."); - } - }); - } - - private void UpdateImportEffectLogPendingCount(int importEffectLogPendingCount) - { - bool displayNotification = session.ImportEffectLogPendingCount == 0 && importEffectLogPendingCount > 0; - session.ImportEffectLogPendingCount = importEffectLogPendingCount; - if (displayNotification) - { - var dialogService = session.ServiceProvider.Get(); - dialogService.ShowNotificationWindow("New effects to import", "New effects have been compiled by the game runtime and can be imported in the effect library. Click here to import them.", session.ImportEffectLogCommand, null); - } - } - } -} diff --git a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Commands/AddNewScriptComponentCommand.cs b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Commands/AddNewScriptComponentCommand.cs index a9df41b2a0..b0ce8bc50b 100644 --- a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Commands/AddNewScriptComponentCommand.cs +++ b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Commands/AddNewScriptComponentCommand.cs @@ -82,7 +82,7 @@ protected override async void ExecuteSync(INodePresenter nodePresenter, object p using (var transaction = session.UndoRedoService.CreateTransaction()) { object component = Activator.CreateInstance(componentType); - var index = new Index(nodePresenter.Children.Count); + var index = new NodeIndex(nodePresenter.Children.Count); nodePresenter.AddItem(component); session.UndoRedoService.PushOperation( new AnonymousDirtyingOperation( diff --git a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/NavigationNodeUpdater.cs b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/NavigationNodeUpdater.cs index 8cc843e0a4..95062cdec1 100644 --- a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/NavigationNodeUpdater.cs +++ b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/NavigationNodeUpdater.cs @@ -40,7 +40,7 @@ protected override void UpdateNode(IAssetNodePresenter node) return; } - var navigationSettings = gameSettingsAsset.GetOrCreate(); + var navigationSettings = gameSettingsAsset.GetOrDefault(); foreach (var child in node.Children) child.IsVisible = false; diff --git a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/SkeletonAssetNodeUpdater.cs b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/SkeletonAssetNodeUpdater.cs index ad11723ce8..54ef451df2 100644 --- a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/SkeletonAssetNodeUpdater.cs +++ b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/SkeletonAssetNodeUpdater.cs @@ -28,7 +28,7 @@ protected override void UpdateNode(IAssetNodePresenter node) // Set the display name to be the name of the node, indented using space. node.DisplayName = $"{"".PadLeft(2 * depth)}{name}"; // Set the order to be the index, we don't want to sort alphabetically - var index = (node as AssetItemNodePresenter)?.Index ?? Index.Empty; + var index = (node as AssetItemNodePresenter)?.Index ?? NodeIndex.Empty; if (index.IsInt) { node.Order = index.Int; diff --git a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/UIAssetNodeUpdater.cs b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/UIAssetNodeUpdater.cs index 3cad5e409a..93f8728dd4 100644 --- a/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/UIAssetNodeUpdater.cs +++ b/sources/editor/Xenko.Assets.Presentation/NodePresenters/Updaters/UIAssetNodeUpdater.cs @@ -135,7 +135,7 @@ private static void GetDisplayData([NotNull] PropertyKey property, out string di private AssetVirtualNodePresenter CreateDependencyPropertyNode(IAssetNodePresenter propertyNodeParent, [NotNull] IAssetNodePresenter node, [NotNull] PropertyKey property, int? order) { var propertyType = property.PropertyType; - var propertyIndex = new Index(property); + var propertyIndex = new NodeIndex(property); var accessor = node.GetNodeAccessor(); var propertyContainerNode = ((IObjectNode)accessor.Node)[nameof(UIElement.DependencyProperties)].Target; @@ -154,7 +154,7 @@ private AssetVirtualNodePresenter CreateDependencyPropertyNode(IAssetNodePresent /// The node containing the property. /// The index of the property in the node. /// - private static object Getter([NotNull] IObjectNode propertyContainerNode, Index propertyIndex) + private static object Getter([NotNull] IObjectNode propertyContainerNode, NodeIndex propertyIndex) { return propertyContainerNode.Retrieve(propertyIndex); } @@ -166,7 +166,7 @@ private static object Getter([NotNull] IObjectNode propertyContainerNode, Index /// The node containing the property. /// The index of the property in the node. /// The value to set. - private static void Setter(IUndoRedoService undoRedoService, [NotNull] IObjectNode propertyContainerNode, Index propertyIndex, object value) + private static void Setter(IUndoRedoService undoRedoService, [NotNull] IObjectNode propertyContainerNode, NodeIndex propertyIndex, object value) { using (undoRedoService?.CreateTransaction()) { diff --git a/sources/editor/Xenko.Assets.Presentation/Preview/HeightmapPreview.cs b/sources/editor/Xenko.Assets.Presentation/Preview/HeightmapPreview.cs new file mode 100644 index 0000000000..012a13e740 --- /dev/null +++ b/sources/editor/Xenko.Assets.Presentation/Preview/HeightmapPreview.cs @@ -0,0 +1,95 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System; +using Xenko.Assets.Physics; +using Xenko.Assets.Presentation.Preview.Views; +using Xenko.Core.Mathematics; +using Xenko.Editor.Preview; +using Xenko.Graphics; +using Xenko.Physics; + +namespace Xenko.Assets.Presentation.Preview +{ + [AssetPreview(typeof(HeightmapAsset), typeof(HeightmapPreviewView))] + public class HeightmapPreview : PreviewFromSpriteBatch + { + private Heightmap heightmap; + private Texture heightmapTexture; + private BlendStateDescription adequateBlendState; + + public int Width => heightmap?.Size.X ?? 0; + public int Length => heightmap?.Size.Y ?? 0; + + /// + /// Gets or sets a callback that will be invoked when the texture is loaded. + /// + public Action NotifyHeightmapLoaded { get; set; } + + protected override Vector2 SpriteSize + { + get + { + if (heightmapTexture == null) + return base.SpriteSize; + + return new Vector2(heightmapTexture.Width, heightmapTexture.Height); + } + } + + protected virtual Vector2 ImageCenter + { + get + { + if (heightmapTexture == null) + return Vector2.Zero; + + var imageSize = new Vector2(heightmapTexture.Width, heightmapTexture.Height); + + return imageSize / 2f; + } + } + + protected override void LoadContent() + { + heightmap = LoadAsset(AssetItem.Location); + + heightmapTexture = heightmap?.CreateTexture(Game.GraphicsDevice); + + adequateBlendState = BlendStates.Opaque; + + NotifyHeightmapLoaded?.Invoke(); + + // Always use LDR + RenderingMode = RenderingMode.LDR; + } + + protected override void UnloadContent() + { + if (heightmapTexture != null) + { + heightmapTexture.Dispose(); + heightmapTexture = null; + } + + if (heightmap != null) + { + UnloadAsset(heightmap); + heightmap = null; + } + } + + protected override void RenderSprite() + { + if (heightmapTexture == null) + return; + + var origin = ImageCenter - SpriteOffsets; + var region = new RectangleF(0, 0, heightmapTexture.Width, heightmapTexture.Height); + var orientation = ImageOrientation.AsIs; + + SpriteBatch.Begin(Game.GraphicsContext, SpriteSortMode.Texture, adequateBlendState); + SpriteBatch.Draw(heightmapTexture, WindowSize / 2, region, Color.White, 0, origin, SpriteScale, SpriteEffects.None, orientation, swizzle: SwizzleMode.RRR1); + SpriteBatch.End(); + } + } +} diff --git a/sources/editor/Xenko.Assets.Presentation/Preview/Views/AnimationPreviewView.cs b/sources/editor/Xenko.Assets.Presentation/Preview/Views/AnimationPreviewView.cs index 15a71061c7..c1f6bbb41b 100644 --- a/sources/editor/Xenko.Assets.Presentation/Preview/Views/AnimationPreviewView.cs +++ b/sources/editor/Xenko.Assets.Presentation/Preview/Views/AnimationPreviewView.cs @@ -4,7 +4,7 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Presentation.Controls; using Xenko.Core.Presentation.Core; using Xenko.Editor.Preview.View; diff --git a/sources/editor/Xenko.Assets.Presentation/Preview/Views/HeightmapPreviewView.cs b/sources/editor/Xenko.Assets.Presentation/Preview/Views/HeightmapPreviewView.cs new file mode 100644 index 0000000000..0360b49f93 --- /dev/null +++ b/sources/editor/Xenko.Assets.Presentation/Preview/Views/HeightmapPreviewView.cs @@ -0,0 +1,15 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System.Windows; +using Xenko.Editor.Preview.View; + +namespace Xenko.Assets.Presentation.Preview.Views +{ + public class HeightmapPreviewView : XenkoPreviewView + { + static HeightmapPreviewView() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(HeightmapPreviewView), new FrameworkPropertyMetadata(typeof(HeightmapPreviewView))); + } + } +} diff --git a/sources/editor/Xenko.Assets.Presentation/Properties/Resources.Designer.cs b/sources/editor/Xenko.Assets.Presentation/Properties/Resources.Designer.cs new file mode 100644 index 0000000000..2541473e1e --- /dev/null +++ b/sources/editor/Xenko.Assets.Presentation/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Xenko.Assets.Presentation.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Xenko.Assets.Presentation.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraph.cs b/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraph.cs index 2637dee04e..32d2f6e7d9 100644 --- a/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraph.cs +++ b/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraph.cs @@ -35,13 +35,13 @@ public override IGraphNode FindTarget(IGraphNode sourceNode, IGraphNode target) } /// - public override bool IsChildPartReference(IGraphNode node, Index index) + public override bool IsChildPartReference(IGraphNode node, NodeIndex index) { return (node as IObjectNode)?.Type == typeof(TransformComponent.TransformChildrenCollection); } /// - protected override bool CanUpdate(IAssetNode node, ContentChangeType changeType, Index index, object value) + protected override bool CanUpdate(IAssetNode node, ContentChangeType changeType, NodeIndex index, object value) { // Check if we are in the component collection of an entity (where we actually add new components) if (IsComponentForComponentCollection(node, value) && changeType == ContentChangeType.CollectionAdd) @@ -76,7 +76,7 @@ protected override object CloneValueFromBase(object value, IAssetNode node) if (IsComponentForComponentCollection(node, value) && value is TransformComponent) { // We never clone TransformComponent, we cannot replace them. Instead, return the existing one. - var transformComponent = (TransformComponent)node.Retrieve(new Index(0)); + var transformComponent = (TransformComponent)node.Retrieve(new NodeIndex(0)); // We still reset the Entity to null to make sure it works nicely with reconcilation, etc. transformComponent.Entity = null; return transformComponent; @@ -96,7 +96,7 @@ protected override object CloneValueFromBase(object value, IAssetNode node) protected override void AddChildPartToParentPart(Entity parentPart, Entity childPart, int index) { var node = Container.NodeContainer.GetNode(parentPart.Transform); - node[nameof(TransformComponent.Children)].Target.Add(childPart.Transform, new Index(index)); + node[nameof(TransformComponent.Children)].Target.Add(childPart.Transform, new NodeIndex(index)); } /// @@ -105,7 +105,7 @@ protected override void RemoveChildPartFromParentPart(Entity parentPart, Entity var transformNode = Container.NodeContainer.GetNode(parentPart.Transform); var reference = parentPart.Transform.Children.Single(x => x.Entity.Id == childPart.Id); var childrenNode = transformNode[nameof(TransformComponent.Children)].Target; - var index = new Index(parentPart.Transform.Children.IndexOf(reference)); + var index = new NodeIndex(parentPart.Transform.Children.IndexOf(reference)); var item = childrenNode.Retrieve(index); childrenNode.Remove(item, index); } diff --git a/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraphDefinition.cs b/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraphDefinition.cs index 1c98c58756..92027ddd38 100644 --- a/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraphDefinition.cs +++ b/sources/editor/Xenko.Assets.Presentation/Quantum/EntityHierarchyPropertyGraphDefinition.cs @@ -13,7 +13,7 @@ public override bool IsMemberTargetObjectReference(IMemberNode member, object va return value is EntityComponent || base.IsMemberTargetObjectReference(member, value); } - public override bool IsTargetItemObjectReference(IObjectNode collection, Index itemIndex, object value) + public override bool IsTargetItemObjectReference(IObjectNode collection, NodeIndex itemIndex, object value) { if (value is EntityComponent) { diff --git a/sources/editor/Xenko.Assets.Presentation/Quantum/GraphicsCompositorAssetPropertyGraphDefinition.cs b/sources/editor/Xenko.Assets.Presentation/Quantum/GraphicsCompositorAssetPropertyGraphDefinition.cs index 90bf5e9a91..5bd13e043f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Quantum/GraphicsCompositorAssetPropertyGraphDefinition.cs +++ b/sources/editor/Xenko.Assets.Presentation/Quantum/GraphicsCompositorAssetPropertyGraphDefinition.cs @@ -30,7 +30,7 @@ public override bool IsMemberTargetObjectReference(IMemberNode member, object va return base.IsMemberTargetObjectReference(member, value); } - public override bool IsTargetItemObjectReference(IObjectNode collection, Index itemIndex, object value) + public override bool IsTargetItemObjectReference(IObjectNode collection, NodeIndex itemIndex, object value) { if (value is SceneCameraSlot) { diff --git a/sources/editor/Xenko.Assets.Presentation/Quantum/UIAssetPropertyGraph.cs b/sources/editor/Xenko.Assets.Presentation/Quantum/UIAssetPropertyGraph.cs index d43da6ab08..b57a05b3ba 100644 --- a/sources/editor/Xenko.Assets.Presentation/Quantum/UIAssetPropertyGraph.cs +++ b/sources/editor/Xenko.Assets.Presentation/Quantum/UIAssetPropertyGraph.cs @@ -38,7 +38,7 @@ public override IGraphNode FindTarget(IGraphNode sourceNode, IGraphNode target) } /// - public override bool IsChildPartReference(IGraphNode node, Index index) + public override bool IsChildPartReference(IGraphNode node, NodeIndex index) { if (node is IMemberNode memberContent) { @@ -72,7 +72,7 @@ protected override void AddChildPartToParentPart(UIElement parentPart, UIElement if (index < 0) node.Add(childPart); else - node.Add(childPart, new Index(index)); + node.Add(childPart, new NodeIndex(index)); return; } throw new NotSupportedException(); @@ -99,7 +99,7 @@ protected override void RemoveChildPartFromParentPart(UIElement parentPart, UIEl throw new InvalidOperationException($"The given {childPart.GetType().Name} (Name={childPart.Name}) is not a child of {nameof(Panel)} (Name={panel.Name})."); var node = Container.NodeContainer.GetOrCreateNode(panel)[nameof(Panel.Children)].Target; - node.Remove(childPart, new Index(index)); + node.Remove(childPart, new NodeIndex(index)); return; } throw new NotSupportedException(); diff --git a/sources/editor/Xenko.Assets.Presentation/SceneEditor/HighlightRenderFeature.cs b/sources/editor/Xenko.Assets.Presentation/SceneEditor/HighlightRenderFeature.cs index a7cfb8c441..f1e0d669e7 100644 --- a/sources/editor/Xenko.Assets.Presentation/SceneEditor/HighlightRenderFeature.cs +++ b/sources/editor/Xenko.Assets.Presentation/SceneEditor/HighlightRenderFeature.cs @@ -62,7 +62,7 @@ public override unsafe void Prepare(RenderDrawContext context) foreach (var renderNode in ((RootEffectRenderFeature)RootRenderFeature).RenderNodes) { - var perDrawLayout = renderNode.RenderEffect.Reflection.PerDrawLayout; + var perDrawLayout = renderNode.RenderEffect?.Reflection?.PerDrawLayout; if (perDrawLayout == null) continue; @@ -83,7 +83,7 @@ public override void ProcessPipelineState(RenderContext context, RenderNodeRefer base.ProcessPipelineState(context, renderNodeReference, ref renderNode, renderObject, pipelineState); // Check if this is a highlight rendering - var perDrawLayout = renderNode.RenderEffect.Reflection.PerDrawLayout; + var perDrawLayout = renderNode.RenderEffect?.Reflection?.PerDrawLayout; if (perDrawLayout == null) return; diff --git a/sources/editor/Xenko.Assets.Presentation/SceneEditor/MaterialFilterRenderFeature.cs b/sources/editor/Xenko.Assets.Presentation/SceneEditor/MaterialFilterRenderFeature.cs index 9c6f2d0638..c3db72b3b8 100644 --- a/sources/editor/Xenko.Assets.Presentation/SceneEditor/MaterialFilterRenderFeature.cs +++ b/sources/editor/Xenko.Assets.Presentation/SceneEditor/MaterialFilterRenderFeature.cs @@ -32,8 +32,9 @@ public override void PrepareEffectPermutations(RenderDrawContext context) var renderEffects = RootRenderFeature.RenderData.GetData(renderEffectKey); int effectSlotCount = ((RootEffectRenderFeature)RootRenderFeature).EffectPermutationSlotCount; - foreach (var renderObject in RootRenderFeature.RenderObjects) + for (int j=0; j x is DebugRenderer).Cast().FirstOrDefault(); - if (debugRenderer == null) - return; + //setup rendering in the debug entry point if we have it + var compositor = SceneSystem.GraphicsCompositor; + var debugRenderer = + ((compositor.Game as SceneCameraRenderer)?.Child as SceneRendererCollection)?.Children.Where( + x => x is DebugRenderer).Cast().FirstOrDefault(); + if (debugRenderer == null) + return; - var shapesRenderState = new RenderStage("PhysicsDebugShapes", "Main"); + var shapesRenderState = new RenderStage("PhysicsDebugShapes", "Main"); compositor.RenderStages.Add(shapesRenderState); var meshRenderFeature = compositor.RenderFeatures.OfType().First(); - meshRenderFeature.RenderStageSelectors.Add(new SimpleGroupToRenderStageSelector - { + meshRenderFeature.RenderStageSelectors.Add(new SimpleGroupToRenderStageSelector { EffectName = "XenkoForwardShadingEffect", RenderGroup = (RenderGroupMask)(1 << (int)RenderGroup), RenderStage = shapesRenderState, @@ -35,23 +34,23 @@ public override async Task Execute() debugRenderer.DebugRenderStages.Add(shapesRenderState); var simulation = this.GetSimulation(); - if (simulation != null) - simulation.ColliderShapesRenderGroup = RenderGroup; var enabled = false; - while (Game.IsRunning) - { - if (Input.IsKeyDown(Keys.LeftShift) && Input.IsKeyDown(Keys.LeftCtrl) && Input.IsKeyReleased(Keys.P)) - { + while (Game.IsRunning) { + // if we didn't get the simulation yet, try again each frame + if (simulation == null) { + simulation = this.GetSimulation(); + if (simulation != null) - { - if (enabled) - { + simulation.ColliderShapesRenderGroup = RenderGroup; + } + + if (Input.IsKeyDown(Keys.LeftShift) && Input.IsKeyDown(Keys.LeftCtrl) && Input.IsKeyReleased(Keys.P)) { + if (simulation != null) { + if (enabled) { simulation.ColliderShapesRendering = false; enabled = false; - } - else - { + } else { simulation.ColliderShapesRendering = true; enabled = true; } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/GameProfiler.cs b/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/GameProfiler.cs index 237550403b..305ea80989 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/GameProfiler.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/GameProfiler.cs @@ -119,11 +119,11 @@ public override async Task Execute() } // update the refreshing speed - if (Input.IsKeyPressed(Keys.Subtract) || Input.IsKeyPressed(Keys.OemMinus)) + if (Input.IsKeyPressed(Keys.Subtract) || Input.IsKeyPressed(Keys.Minus)) { RefreshTime = Math.Min(RefreshTime * 2, 10000); } - else if (Input.IsKeyPressed(Keys.Add) || Input.IsKeyPressed(Keys.OemPlus)) + else if (Input.IsKeyPressed(Keys.Add) || Input.IsKeyPressed(Keys.Plus)) { RefreshTime = Math.Max(RefreshTime / 2, 100); } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/SceneStreaming.cs b/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/SceneStreaming.cs index 3319057fc3..68192d7ee5 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/SceneStreaming.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Assets/Scripts/Utility/SceneStreaming.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Xenko.Core; using Xenko.Core.Mathematics; +using Xenko.Core.Serialization; using Xenko.Engine; using Xenko.Physics; @@ -27,7 +28,7 @@ public class ##Scriptname## : SyncScript /// /// The url of the scene to load /// - public string Url { get; set; } + public UrlReference Url { get; set; } /// /// The trigger volume. This should be a static collider, set to be a trigger @@ -97,14 +98,14 @@ public override void Update() if (shouldLoad) { // If we should load syncrhonously, just create a completed task and load - Instance = Content.Load(Url); + Instance = Content.Load(Url); loadingTask = Task.FromResult(Instance); } else if (shouldPreLoad) { loadCancellation = new CancellationTokenSource(); - var localLoadingTask = loadingTask = Content.LoadAsync(Url); + var localLoadingTask = loadingTask = Content.LoadAsync(Url); Script.AddTask(async () => { await loadingTask; diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Properties/AndroidManifest.xml.t4 b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Properties/AndroidManifest.xml.t4 index 4d724c2578..980f7bdc95 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Properties/AndroidManifest.xml.t4 +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Properties/AndroidManifest.xml.t4 @@ -1,7 +1,7 @@ <#@ template inherits="ProjectTemplateTransformation" language="C#" #> - + diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Resources/drawable/XenkoIcon.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Resources/drawable/XenkoIcon.png index 8e73b8a253..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Resources/drawable/XenkoIcon.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Android/Resources/drawable/XenkoIcon.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:292d75e08f432e0d3286e063c97c4da7b4b12484dc4787f5fbb96b42891944b6 -size 5072 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$PackageGameNameShort$App.cs.t4 b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$PackageGameNameShort$App.cs.t4 index 7c3f225eaf..75e0891e75 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$PackageGameNameShort$App.cs.t4 +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$PackageGameNameShort$App.cs.t4 @@ -9,6 +9,7 @@ namespace <#= Properties.Namespace #> { using (var game = new Game()) { + game.OverrideDefaultSettings(1280, 720, false); game.Run(); } } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$ProjectName$.csproj.t4 b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$ProjectName$.csproj.t4 index a576c760db..a0038d421e 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$ProjectName$.csproj.t4 +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/$ProjectName$.csproj.t4 @@ -2,8 +2,9 @@ - netcoreapp2.1 + net6.0 linux-x64 + old Resources\Icon.ico WinExe <#= Properties.Namespace #> @@ -13,12 +14,11 @@ true + true - - diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/Resources/XenkoIcon.ico b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/Resources/XenkoIcon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/Resources/XenkoIcon.ico and b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Linux/Resources/XenkoIcon.ico differ diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon100x100.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon100x100.png index f23cce0fbe..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon100x100.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon100x100.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d7e80f2fe0de13abed6a22b057cc22655ade0120b62f0703b2ae5cd185261d4 -size 2002 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon150x150.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon150x150.png index 0b0fb0491a..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon150x150.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon150x150.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee603dbeee19b2e9fc4bddb97033ee153b6c0f4d3109baccb61e1ff0a846a667 -size 5496 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon300x300.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon300x300.png index ffc8329370..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon300x300.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon300x300.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be46f6820ce95c6f8370d22756d08d92542904e732eae586dc82ecc0c669b231 -size 6035 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon44x44.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon44x44.png index d6165c5348..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon44x44.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon44x44.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ffff9fd2c7f527c2826cf2b882c96ac6e4807c6ebb7cfc2894febead4a1210a -size 969 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon50x50.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon50x50.png index abb74a6249..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon50x50.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon50x50.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9342dba0c76e8d7aac8234b7f82f3852766853205f7489cee25e7bc3169117b -size 2010 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon88x88.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon88x88.png index 587e109ee9..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon88x88.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.UWP/Assets/XenkoIcon88x88.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c4ce9d287a5860999db910782847585f47158515fd1ba606318135414279cd5 -size 1694 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$PackageGameNameShort$App.cs.t4 b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$PackageGameNameShort$App.cs.t4 index 7c3f225eaf..75e0891e75 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$PackageGameNameShort$App.cs.t4 +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$PackageGameNameShort$App.cs.t4 @@ -9,6 +9,7 @@ namespace <#= Properties.Namespace #> { using (var game = new Game()) { + game.OverrideDefaultSettings(1280, 720, false); game.Run(); } } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$ProjectName$.csproj.t4 b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$ProjectName$.csproj.t4 index 12d0e23916..ab9db967d0 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$ProjectName$.csproj.t4 +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/$ProjectName$.csproj.t4 @@ -2,7 +2,8 @@ - net461 + net6.0-windows + win-x64 Resources\Icon.ico WinExe <#= Properties.Namespace #> @@ -12,6 +13,7 @@ true + true diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/Resources/XenkoIcon.ico b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/Resources/XenkoIcon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/Resources/XenkoIcon.ico and b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.Windows/Resources/XenkoIcon.ico differ diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon114.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon114.png index f0718da3e3..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon114.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon114.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d1ff6633eb9fa5c604689513a59f436bae2a1fd266a8366f98bccdc2b4d03cb -size 5002 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon120.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon120.png index 9476abcd27..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon120.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon120.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:492fcb4de2fadbb0a605ba3b89a80929eea3703251719ac00d885d49b1e1b3b0 -size 5058 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon57.png b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon57.png index 839245c1d5..4b5059507f 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon57.png +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.iOS/Resources/XenkoIcon57.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53af998aceec75fd2f7f014616468144a6f1a8e62687fd50c52ad2feaee7f87f -size 2374 +oid sha256:555dd0c19719237ec1df15089884327ed7b8e164e9ac76f3f600136cb909eaee +size 28016 diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$PackageGameNameShort$App.cs.t4 b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$PackageGameNameShort$App.cs.t4 index 7c3f225eaf..75e0891e75 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$PackageGameNameShort$App.cs.t4 +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$PackageGameNameShort$App.cs.t4 @@ -9,6 +9,7 @@ namespace <#= Properties.Namespace #> { using (var game = new Game()) { + game.OverrideDefaultSettings(1280, 720, false); game.Run(); } } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$ProjectName$.csproj.t4 b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$ProjectName$.csproj.t4 index 6e9051c80f..bc509dc91a 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$ProjectName$.csproj.t4 +++ b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/$ProjectName$.csproj.t4 @@ -2,7 +2,7 @@ - netcoreapp2.1 + net6.0 osx-x64 Resources\Icon.ico WinExe @@ -13,12 +13,11 @@ true + true - - diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/Resources/XenkoIcon.ico b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/Resources/XenkoIcon.ico index 29256adf26..cf8c0e9594 100644 Binary files a/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/Resources/XenkoIcon.ico and b/sources/editor/Xenko.Assets.Presentation/Templates/Core/ProjectExecutable.macOS/Resources/XenkoIcon.ico differ diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateParameters.cs b/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateParameters.cs index 2580f10081..df9872d251 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateParameters.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateParameters.cs @@ -22,16 +22,11 @@ public XenkoTemplateParameters() public class GameTemplateParameters : XenkoTemplateParameters { - public GameTemplateParameters() - { - GraphicsProfile = GraphicsProfile.Level_10_0; - } - public List Platforms { get; set; } public bool IsHDR { get; set; } - public GraphicsProfile GraphicsProfile { get; set; } + public GraphicsProfile GraphicsProfile => GraphicsProfile.Level_11_2; public bool ForcePlatformRegeneration { get; set; } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateWindow.xaml.cs b/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateWindow.xaml.cs index 71b370f2e4..6ce4252736 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateWindow.xaml.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/GameTemplateWindow.xaml.cs @@ -61,7 +61,7 @@ public GameTemplateWindow(IEnumerable availablePlatforms, stri Orientation = DisplayOrientation.LandscapeRight; InitializeComponent(); DataContext = this; - SelectedGraphicsProfile = GraphicsProfile.Level_10_0; + SelectedGraphicsProfile = GraphicsProfile.Level_11_2; IsHDR = true; } @@ -77,7 +77,7 @@ public GameTemplateWindow(IEnumerable availablePlatforms, stri public IEnumerable SelectedPackages { get { return AssetPackages.Where(x => x.IsSelected).Select(x => x.PackageLocation); } } - public GraphicsProfile SelectedGraphicsProfile { get { return selectedGraphicsProfile; } set { selectedGraphicsProfile = value; if (value < GraphicsProfile.Level_10_0) IsHDR = false; OnPropertyChanged(); } } + public GraphicsProfile SelectedGraphicsProfile { get { return selectedGraphicsProfile; } set { selectedGraphicsProfile = GraphicsProfile.Level_11_2; if (value < GraphicsProfile.Level_10_0) IsHDR = false; OnPropertyChanged(); } } public bool IsHDR { get { return isHDR; } set { isHDR = value; OnPropertyChanged(); } } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/GraphicsCompositorTemplateGenerator.cs b/sources/editor/Xenko.Assets.Presentation/Templates/GraphicsCompositorTemplateGenerator.cs index 88d2a8bd53..e0810286f6 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/GraphicsCompositorTemplateGenerator.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/GraphicsCompositorTemplateGenerator.cs @@ -13,20 +13,23 @@ public class GraphicsCompositorTemplateGenerator : AssetFactoryTemplateGenerator { public new static readonly GraphicsCompositorTemplateGenerator Default = new GraphicsCompositorTemplateGenerator(); - public static readonly Guid Level9TemplateId = new Guid("20947F4A-7B50-4716-AC85-D10EFF58CD33"); - public static readonly Guid Level10TemplateId = new Guid("D4EE3BD3-9B06-460E-9175-D6AFB2459463"); + public static readonly Dictionary SupportedTemplatesToUrl = new Dictionary + { + { new Guid("20947F4A-7B50-4716-AC85-D10EFF58CD33"), XenkoPackageUpgrader.DefaultGraphicsCompositorLevel9Url }, + { new Guid("D4EE3BD3-9B06-460E-9175-D6AFB2459463"), XenkoPackageUpgrader.DefaultGraphicsCompositorLevel10Url }, + { new Guid("4BC182D7-69D5-4BE2-9AF3-1C82F67B629D"), "GraphicsCompositor/DefaultGraphicsCompositorVoxels" }, + }; public override bool IsSupportingTemplate(TemplateDescription templateDescription) { if (templateDescription == null) throw new ArgumentNullException(nameof(templateDescription)); - return templateDescription.Id == Level9TemplateId || templateDescription.Id == Level10TemplateId; + return SupportedTemplatesToUrl.ContainsKey(templateDescription.Id); } protected override IEnumerable CreateAssets(AssetTemplateGeneratorParameters parameters) { // Find default graphics compositor to create a derived asset from - var graphicsCompositorUrl = parameters.Description.Id == Level9TemplateId ? XenkoPackageUpgrader.DefaultGraphicsCompositorLevel9Url : XenkoPackageUpgrader.DefaultGraphicsCompositorLevel10Url; - var graphicsCompositor = parameters.Package.FindAsset(graphicsCompositorUrl); + var graphicsCompositor = SupportedTemplatesToUrl.TryGetValue(parameters.Description.Id, out var graphicsCompositorUrl) ? parameters.Package.FindAsset(graphicsCompositorUrl) : null; // Something went wrong, create an empty asset if (graphicsCompositor == null) diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/HeightmapFactoryTemplateGenerator.cs b/sources/editor/Xenko.Assets.Presentation/Templates/HeightmapFactoryTemplateGenerator.cs new file mode 100644 index 0000000000..37f27119d0 --- /dev/null +++ b/sources/editor/Xenko.Assets.Presentation/Templates/HeightmapFactoryTemplateGenerator.cs @@ -0,0 +1,45 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// 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.Linq; +using System.Threading.Tasks; +using Xenko.Assets.Textures; +using Xenko.Core; +using Xenko.Core.Assets.Editor.Settings; +using Xenko.Core.Assets.IO; +using Xenko.Core.Assets.Templates; +using Xenko.Core.IO; +using Xenko.Core.Reflection; + +namespace Xenko.Assets.Presentation.Templates +{ + public class HeightmapFactoryTemplateGenerator : AssetFromFileTemplateGenerator + { + public new static readonly HeightmapFactoryTemplateGenerator Default = new HeightmapFactoryTemplateGenerator(); + + public static readonly Guid TemplateId = new Guid("127EC64F-6E15-4964-98F4-DB735B39AE09"); + + public override bool IsSupportingTemplate(TemplateDescription templateDescription) + { + if (templateDescription == null) throw new ArgumentNullException(nameof(templateDescription)); + return templateDescription.Id == TemplateId; + } + + protected override async Task> BrowseForSourceFiles(TemplateAssetDescription description, bool allowMultiSelection) + { + var assetType = description.GetAssetType(); + var assetTypeName = TypeDescriptorFactory.Default.AttributeRegistry.GetAttribute(assetType)?.Name ?? assetType.Name; + var extensions = new FileExtensionCollection($"Source files for {assetTypeName}", TextureImporter.FileExtensions); + var result = await BrowseForFiles(extensions, allowMultiSelection, true, InternalSettings.FileDialogLastImportDirectory.GetValue()); + if (result != null) + { + var list = result.ToList(); + InternalSettings.FileDialogLastImportDirectory.SetValue(list.First()); + InternalSettings.Save(); + return list; + } + return null; + } + } +} diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml b/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml index 71281e618d..61e963a1c6 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml +++ b/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:xk="http://schemas.xenko.com/xaml/presentation" xmlns:templates="clr-namespace:Xenko.Assets.Presentation.Templates" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" mc:Ignorable="d" SizeToContent="Height" Width="480" Style="{DynamicResource WindowChromeStyle}" Title="{xk:Localize Import from model}" d:DataContext="{d:DesignInstance templates:ImportModelFromFileViewModel}"> @@ -24,6 +24,8 @@ + + diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml.cs b/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml.cs index 84b1782d60..2020b2ded7 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/ModelAssetTemplateWindow.xaml.cs @@ -34,12 +34,15 @@ public DummyReferenceContainer() bool IPropertyProviderViewModel.ShouldConstructMember(IMemberNode member) => true; - bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, Index index) => true; + bool IPropertyProviderViewModel.ShouldConstructItem(IObjectNode collection, NodeIndex index) => true; } private readonly DummyReferenceContainer referenceContainer = new DummyReferenceContainer(); private bool importMaterials = true; + private bool showDeduplicateMaterialsCheckBox = true; + private bool showFbxDedupeNotSupportedWarning = false; + private bool deduplicateMaterials = true; private bool importTextures = true; private bool importSkeleton = true; private bool dontImportSkeleton; @@ -53,6 +56,10 @@ public ImportModelFromFileViewModel(IViewModelServiceProvider serviceProvider) public bool ImportMaterials { get { return importMaterials; } set { SetValue(ref importMaterials, value); } } + public bool ShowDeduplicateMaterialsCheckBox { get { return showDeduplicateMaterialsCheckBox; } set { SetValue(ref showDeduplicateMaterialsCheckBox, value); } } + public bool ShowFbxDedupeNotSupportedWarning { get { return showFbxDedupeNotSupportedWarning; } set { SetValue(ref showFbxDedupeNotSupportedWarning, value); } } + public bool DeduplicateMaterials { get { return deduplicateMaterials; } set { SetValue(ref deduplicateMaterials, value); } } + public bool ImportTextures { get { return importTextures; } set { SetValue(ref importTextures, value); } } public bool ImportSkeleton { get { return importSkeleton; } set { SetValue(ref importSkeleton, value); } } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/ModelFromFileTemplateGenerator.cs b/sources/editor/Xenko.Assets.Presentation/Templates/ModelFromFileTemplateGenerator.cs index 8f532fa9fe..306cc708eb 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/ModelFromFileTemplateGenerator.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/ModelFromFileTemplateGenerator.cs @@ -24,6 +24,7 @@ namespace Xenko.Assets.Presentation.Templates public static class ModelFromFileTemplateSettings { public static SettingsKey ImportMaterials = new SettingsKey("Templates/ModelFromFile/ImportMaterials", PackageUserSettings.SettingsContainer, true); + public static SettingsKey DeduplicateMaterials = new SettingsKey("Templates/ModelFromFile/DeduplicateMaterials", PackageUserSettings.SettingsContainer, true); public static SettingsKey ImportTextures = new SettingsKey("Templates/ModelFromFile/ImportTextures", PackageUserSettings.SettingsContainer, true); public static SettingsKey ImportSkeleton = new SettingsKey("Templates/ModelFromFile/ImportSkeleton", PackageUserSettings.SettingsContainer, true); public static SettingsKey DefaultSkeleton = new SettingsKey("Templates/ModelFromFile/DefaultSkeleton", PackageUserSettings.SettingsContainer, AssetId.Empty); @@ -36,6 +37,7 @@ public class ModelFromFileTemplateGenerator : AssetFromFileTemplateGenerator public static Guid Id = new Guid("3B778954-54C4-4FF3-97EF-4CD7AEA0B97D"); protected static readonly PropertyKey ImportMaterialsKey = new PropertyKey("ImportMaterials", typeof(ModelFromFileTemplateGenerator)); + protected static readonly PropertyKey DeduplicateMaterialsKey = new PropertyKey("DeduplicateMaterials", typeof(ModelFromFileTemplateGenerator)); protected static readonly PropertyKey ImportTexturesKey = new PropertyKey("ImportTextures", typeof(ModelFromFileTemplateGenerator)); protected static readonly PropertyKey ImportSkeletonKey = new PropertyKey("ImportSkeleton", typeof(ModelFromFileTemplateGenerator)); protected static readonly PropertyKey SkeletonToUseKey = new PropertyKey("SkeletonToUse", typeof(ModelFromFileTemplateGenerator)); @@ -55,6 +57,8 @@ protected override async Task PrepareAssetCreation(AssetTemplateGeneratorP if (files == null) return true; + var showDeduplicateMaterialsCheckBox = files.Any(x => ImportAssimpCommand.IsSupportingExtensions(x.GetFileExtension())); + var showFbxDedupeNotSupportedWarning = showDeduplicateMaterialsCheckBox && files.Any(x => ImportFbxCommand.IsSupportingExtensions(x.GetFileExtension())); // Load settings from the last time this template was used for this project var profile = parameters.Package.UserSettings.Profile; var window = new ModelAssetTemplateWindow @@ -62,6 +66,9 @@ protected override async Task PrepareAssetCreation(AssetTemplateGeneratorP Parameters = { ImportMaterials = ModelFromFileTemplateSettings.ImportMaterials.GetValue(profile, true), + ShowDeduplicateMaterialsCheckBox = showDeduplicateMaterialsCheckBox, + ShowFbxDedupeNotSupportedWarning = showFbxDedupeNotSupportedWarning, + DeduplicateMaterials = ModelFromFileTemplateSettings.DeduplicateMaterials.GetValue(profile, true), ImportTextures = ModelFromFileTemplateSettings.ImportTextures.GetValue(profile, true), ImportSkeleton = ModelFromFileTemplateSettings.ImportSkeleton.GetValue(profile, true) } @@ -83,12 +90,14 @@ protected override async Task PrepareAssetCreation(AssetTemplateGeneratorP // Apply settings var skeletonToReuse = window.Parameters.ReuseSkeleton ? window.Parameters.SkeletonToReuse : null; parameters.Tags.Set(ImportMaterialsKey, window.Parameters.ImportMaterials); + parameters.Tags.Set(DeduplicateMaterialsKey, window.Parameters.DeduplicateMaterials); parameters.Tags.Set(ImportTexturesKey, window.Parameters.ImportTextures); parameters.Tags.Set(ImportSkeletonKey, window.Parameters.ImportSkeleton); parameters.Tags.Set(SkeletonToUseKey, skeletonToReuse); // Save settings ModelFromFileTemplateSettings.ImportMaterials.SetValue(window.Parameters.ImportMaterials, profile); + ModelFromFileTemplateSettings.DeduplicateMaterials.SetValue(window.Parameters.DeduplicateMaterials, profile); ModelFromFileTemplateSettings.ImportTextures.SetValue(window.Parameters.ImportTextures, profile); ModelFromFileTemplateSettings.ImportSkeleton.SetValue(window.Parameters.ImportSkeleton, profile); skeletonId = AttachedReferenceManager.GetAttachedReference(skeletonToReuse)?.Id ?? AssetId.Empty; @@ -105,11 +114,13 @@ protected override IEnumerable CreateAssets(AssetTemplateGeneratorPar return base.CreateAssets(parameters); var importMaterials = parameters.Tags.Get(ImportMaterialsKey); + var deduplicateMaterials = parameters.Tags.Get(DeduplicateMaterialsKey); var importTextures = parameters.Tags.Get(ImportTexturesKey); var importSkeleton = parameters.Tags.Get(ImportSkeletonKey); var skeletonToReuse = parameters.Tags.Get(SkeletonToUseKey); var importParameters = new AssetImporterParameters { Logger = parameters.Logger }; + importParameters.InputParameters.Set(ModelAssetImporter.DeduplicateMaterialsKey, deduplicateMaterials); importParameters.SelectedOutputTypes.Add(typeof(ModelAsset), true); importParameters.SelectedOutputTypes.Add(typeof(MaterialAsset), importMaterials); importParameters.SelectedOutputTypes.Add(typeof(TextureAsset), importTextures); diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/NewGameTemplateGenerator.cs b/sources/editor/Xenko.Assets.Presentation/Templates/NewGameTemplateGenerator.cs index 5fdf614ef0..432068cca4 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/NewGameTemplateGenerator.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/NewGameTemplateGenerator.cs @@ -156,6 +156,7 @@ protected override bool Generate(SessionTemplateGeneratorParameters parameters) Description = parameters.Description, Package = package, Logger = parameters.Logger, + Namespace = parameters.Namespace }; // Generate executable projects for each platform @@ -207,7 +208,6 @@ protected override bool Generate(SessionTemplateGeneratorParameters parameters) gameSettingsAsset.GraphicsCompositor = AttachedReferenceManager.CreateProxyObject(graphicsCompositor.ToReference()); var renderingSettings = gameSettingsAsset.GetOrCreate(); - renderingSettings.DefaultGraphicsProfile = parameters.GetTag(GraphicsProfileKey); renderingSettings.DisplayOrientation = (RequiredDisplayOrientation)orientation; var gameSettingsAssetItem = new AssetItem(GameSettingsAsset.GameSettingsLocation, gameSettingsAsset); @@ -326,39 +326,6 @@ private void CreateAndSetNewScene(SessionTemplateGeneratorParameters parameters, // Create the ground entity var groundEntity = new Entity("Ground") { new ModelComponent(AttachedReferenceManager.CreateProxyObject(groundModelAssetItem.Id, groundModelAssetItem.Location)) }; - // Copy file in Resources - var skyboxFilename = (UFile)(isHDR ? "skybox_texture_hdr.dds" : "skybox_texture_ldr.dds"); - try - { - var resources = UPath.Combine(package.RootDirectory, (UDirectory)"Resources"); - Directory.CreateDirectory(resources.ToWindowsPath()); - - // TODO: Hardcoded due to the fact that part of the template is in another folder in dev build - // We might want to extend TemplateFolder to support those cases - var dataDirectory = ProjectTemplateGeneratorHelper.GetTemplateDataDirectory(parameters.Description); - var skyboxFullPath = UPath.Combine(dataDirectory, skyboxFilename).ToWindowsPath(); - File.Copy(skyboxFullPath, UPath.Combine(resources, skyboxFilename).ToWindowsPath(), true); - } - catch (Exception ex) - { - logger.Error("Unexpected exception while copying cubemap", ex); - } - - // Create the texture asset - var skyboxTextureAsset = new TextureAsset { Source = Path.Combine(@"../Resources", skyboxFilename), IsCompressed = isHDR, Type = new ColorTextureType { UseSRgbSampling = false } }; - var skyboxTextureAssetItem = new AssetItem("Skybox texture", skyboxTextureAsset); - package.Assets.Add(skyboxTextureAssetItem); - skyboxTextureAssetItem.IsDirty = true; - - // Create the skybox asset - var skyboxAsset = new SkyboxAsset - { - CubeMap = AttachedReferenceManager.CreateProxyObject(skyboxTextureAssetItem.Id, skyboxTextureAssetItem.Location) - }; - var skyboxAssetItem = new AssetItem("Skybox", skyboxAsset); - package.Assets.Add(skyboxAssetItem); - skyboxAssetItem.IsDirty = true; - // Create the scene var defaultSceneAsset = isHDR ? SceneHDRFactory.Create() : SceneLDRFactory.Create(); @@ -380,16 +347,6 @@ private void CreateAndSetNewScene(SessionTemplateGeneratorParameters parameters, gameSettingsAsset.IsDirty = true; } - var skyboxEntity = defaultSceneAsset.Hierarchy.Parts.Select(x => x.Value.Entity).Single(x => x.Name == SceneBaseFactory.SkyboxEntityName); - skyboxEntity.Get().Texture = skyboxAsset.CubeMap; - if (isHDR) - { - skyboxEntity.Get().Type = new LightSkybox - { - Skybox = AttachedReferenceManager.CreateProxyObject(skyboxAssetItem.Id, skyboxAssetItem.Location) - }; - } - var cameraEntity = defaultSceneAsset.Hierarchy.Parts.Select(x => x.Value.Entity).Single(x => x.Name == SceneBaseFactory.CameraEntityName); var graphicsCompositor = package.Assets.Select(x => x.Asset).OfType().Single(); cameraEntity.Components.Get().Slot = graphicsCompositor.Cameras.Single().ToSlotId(); @@ -405,7 +362,8 @@ private static void CopyAssetPacks(SessionTemplateGeneratorParameters parameters { var logger = parameters.Logger; - var presentationPackageFile = PackageStore.Instance.GetPackageFileName("Xenko.Samples.Templates", new PackageVersionRange(new PackageVersion(XenkoVersion.NuGetVersionSuffix != string.Empty ? "3.1.0.1-beta02" : "3.1.0.1"))); + var presentationPackageFile = PackageStore.Instance.GetPackageFileName("Xenko.Samples.Templates", new PackageVersionRange(new PackageVersion(Xenko.Samples.Templates.ThisPackageVersion.Current))); + if (presentationPackageFile == null) return; var assetPackagesDir = UDirectory.Combine(presentationPackageFile.GetFullDirectory(), @"Templates\Samples\Templates\Packs"); var assetPacks = parameters.TryGetTag(AssetsKey); if (assetPacks == null) diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/SoundFromFileTemplateGenerator.cs b/sources/editor/Xenko.Assets.Presentation/Templates/SoundFromFileTemplateGenerator.cs index c9b2f0453e..7dc5e37540 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/SoundFromFileTemplateGenerator.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/SoundFromFileTemplateGenerator.cs @@ -39,20 +39,20 @@ public override bool IsSupportingTemplate(TemplateDescription templateDescriptio protected override IEnumerable CreateAssets(AssetTemplateGeneratorParameters parameters) { var importedAssets = new List(); - using (var media = new FFmpegMedia()) + foreach (var assetItem in base.CreateAssets(parameters)) { - foreach (var assetItem in base.CreateAssets(parameters)) + if (assetItem.Asset is SoundAsset soundAsset) { - if (assetItem.Asset is SoundAsset soundAsset) + using (var media = new FFmpegMedia()) { media.Open(soundAsset.Source.ToWindowsPath()); - foreach( var audioTrack in media.Streams.OfType().ToList()) + foreach (var audioTrack in media.Streams.OfType().ToList()) { var assetCopy = AssetCloner.Clone(soundAsset); assetCopy.Index = audioTrack.Index; assetCopy.SampleRate = audioTrack.SampleRate; - importedAssets.Add(new AssetItem(assetItem.Location + " track " + audioTrack.Index, assetCopy)); + importedAssets.Add(new AssetItem(assetItem.Location + (audioTrack.Index > 0 ? " track " + audioTrack.Index : ""), assetCopy)); } } } diff --git a/sources/editor/Xenko.Assets.Presentation/Templates/XenkoTemplates.cs b/sources/editor/Xenko.Assets.Presentation/Templates/XenkoTemplates.cs index 7da97da3e4..5c7919ce70 100644 --- a/sources/editor/Xenko.Assets.Presentation/Templates/XenkoTemplates.cs +++ b/sources/editor/Xenko.Assets.Presentation/Templates/XenkoTemplates.cs @@ -16,6 +16,7 @@ public static void Register() TemplateManager.Register(AssetFactoryTemplateGenerator.Default); TemplateManager.Register(AssetFromFileTemplateGenerator.Default); // Specific asset templates must be registered after AssetFactoryTemplateGenerator + TemplateManager.Register(HeightmapFactoryTemplateGenerator.Default); TemplateManager.Register(ColliderShapeHullFactoryTemplateGenerator.Default); TemplateManager.Register(ProceduralModelFactoryTemplateGenerator.Default); TemplateManager.Register(SkyboxFactoryTemplateGenerator.Default); diff --git a/sources/editor/Xenko.Assets.Presentation/Test/TestAsset.cs b/sources/editor/Xenko.Assets.Presentation/Test/TestAsset.cs index 0dec43de22..d276f973d4 100644 --- a/sources/editor/Xenko.Assets.Presentation/Test/TestAsset.cs +++ b/sources/editor/Xenko.Assets.Presentation/Test/TestAsset.cs @@ -195,43 +195,31 @@ public sealed class TestAsset : Asset public Vector4 Vector4 { get; set; } [DataMember(48)] - [Display("Int2", "Int types")] - public Int2 Int2 { get; set; } - - [DataMember(49)] - [Display("Int3", "Int types")] - public Int3 Int3 { get; set; } - - [DataMember(50)] - [Display("Int4", "Int types")] - public Int4 Int4 { get; set; } - - [DataMember(51)] [Display("RectangleF", "Vector types")] public RectangleF RectangleF { get; set; } - [DataMember(52)] + [DataMember(49)] [Display("Rectangle", "Vector types")] public Rectangle Rectangle { get; set; } - [DataMember(53)] + [DataMember(50)] [Display("Angle", "Vector types")] public AngleSingle Angle { get; set; } - [DataMember(54)] + [DataMember(51)] [Display("Rotation", "Vector types")] public Quaternion Rotation { get; set; } - [DataMember(55)] + [DataMember(52)] [Display("Matrix", "Vector types")] public Matrix Matrix { get; set; } // TODO: Add ImageEnum and ImageFlagEnum - [DataMember(56)] + [DataMember(53)] [Display("Nullable Enum", "Class & Struct types")] public TestEnum? NullableEnum { get; set; } - [DataMember(57)] + [DataMember(55)] [Display("Nullable Rectangle", "Class & Struct types")] public Rectangle? NullableRectangle { get; set; } diff --git a/sources/editor/Xenko.Assets.Presentation/Themes/Generic.xaml b/sources/editor/Xenko.Assets.Presentation/Themes/Generic.xaml index bc0125d76b..9558453c1e 100644 --- a/sources/editor/Xenko.Assets.Presentation/Themes/Generic.xaml +++ b/sources/editor/Xenko.Assets.Presentation/Themes/Generic.xaml @@ -4,7 +4,7 @@ xmlns:xk="http://schemas.xenko.com/xaml/presentation" xmlns:views="clr-namespace:Xenko.Assets.Presentation.Preview.Views" xmlns:valueConverters="clr-namespace:Xenko.Core.Assets.Editor.View.ValueConverters;assembly=Xenko.Core.Assets.Editor" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:behaviors="clr-namespace:Xenko.Assets.Presentation.View.Behaviors" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" @@ -397,4 +397,61 @@ + + diff --git a/sources/editor/Xenko.Assets.Presentation/Thumbnails/HeightmapThumbnailCompiler.cs b/sources/editor/Xenko.Assets.Presentation/Thumbnails/HeightmapThumbnailCompiler.cs new file mode 100644 index 0000000000..c9872d02a3 --- /dev/null +++ b/sources/editor/Xenko.Assets.Presentation/Thumbnails/HeightmapThumbnailCompiler.cs @@ -0,0 +1,87 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using System.Collections.Generic; +using Xenko.Assets.Physics; +using Xenko.Core.Assets; +using Xenko.Core.Assets.Compiler; +using Xenko.Core.Mathematics; +using Xenko.Core.Serialization.Contents; +using Xenko.Editor.Thumbnails; +using Xenko.Graphics; +using Xenko.Physics; +using Xenko.Rendering; + +namespace Xenko.Assets.Presentation.Thumbnails +{ + [AssetCompiler(typeof(HeightmapAsset), typeof(ThumbnailCompilationContext))] + public class HeightmapThumbnailCompiler : ThumbnailCompilerBase + { + public HeightmapThumbnailCompiler() + { + IsStatic = false; + Priority = 10050; + } + + public override IEnumerable GetInputFiles(AssetItem assetItem) + { + var asset = (HeightmapAsset)assetItem.Asset; + var url = asset.Source.FullPath; + if (!string.IsNullOrEmpty(url)) + { + yield return new ObjectUrl(UrlType.File, url); + } + } + + protected override void CompileThumbnail(ThumbnailCompilerContext context, string thumbnailStorageUrl, AssetItem assetItem, Package originalPackage, AssetCompilerResult result) + { + result.BuildSteps.Add(new ThumbnailBuildStep(new HeightmapThumbnailCommand(context, assetItem, originalPackage, thumbnailStorageUrl, + new ThumbnailCommandParameters(assetItem.Asset, thumbnailStorageUrl, context.ThumbnailResolution)) + { InputFilesGetter = () => GetInputFiles(assetItem) })); + } + + /// + /// Command used to build the thumbnail of the texture in the storage + /// + public class HeightmapThumbnailCommand : ThumbnailFromSpriteBatchCommand + { + private Texture texture; + + public HeightmapThumbnailCommand(ThumbnailCompilerContext context, AssetItem assetItem, IAssetFinder assetFinder, string url, ThumbnailCommandParameters parameters) + : base(context, assetItem, assetFinder, url, parameters) + { + parameters.ColorSpace = ColorSpace.Linear; + } + + protected override void PreloadAsset() + { + base.PreloadAsset(); + + texture = LoadedAsset?.CreateTexture(GraphicsDevice); + } + + protected override void UnloadAsset() + { + if (texture != null) + { + texture.Dispose(); + texture = null; + } + + base.UnloadAsset(); + } + + protected override void RenderSprites(RenderDrawContext context) + { + if (LoadedAsset == null) + return; + + if (texture != null) + { + var destinationRectangle = new RectangleF(0, 0, Parameters.ThumbnailSize.X, Parameters.ThumbnailSize.Y); + + SpriteBatch.Draw(texture, destinationRectangle, new RectangleF(0, 0, texture.Width, texture.Height), Color.White, 0f, new Vector2(0, 0), SpriteEffects.None, swizzle: SwizzleMode.RRR1); + } + } + } + } +} diff --git a/sources/editor/Xenko.Assets.Presentation/Thumbnails/UIPageThumbnailCompiler.cs b/sources/editor/Xenko.Assets.Presentation/Thumbnails/UIPageThumbnailCompiler.cs index caa97d1100..ec8350c01b 100644 --- a/sources/editor/Xenko.Assets.Presentation/Thumbnails/UIPageThumbnailCompiler.cs +++ b/sources/editor/Xenko.Assets.Presentation/Thumbnails/UIPageThumbnailCompiler.cs @@ -73,7 +73,6 @@ protected override Entity CreateEntity() { Page = LoadedAsset, Resolution = designResolution, - Size = designResolution / UIEditorController.DesignDensity, IsFullScreen = false, }); diff --git a/sources/editor/Xenko.Assets.Presentation/View/AddEntityComponentUserControl.xaml b/sources/editor/Xenko.Assets.Presentation/View/AddEntityComponentUserControl.xaml index 7d1dc29b78..6168e32805 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/AddEntityComponentUserControl.xaml +++ b/sources/editor/Xenko.Assets.Presentation/View/AddEntityComponentUserControl.xaml @@ -4,7 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:xk="http://schemas.xenko.com/xaml/presentation" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:local="clr-namespace:Xenko.Assets.Presentation.View" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> diff --git a/sources/editor/Xenko.Assets.Presentation/View/AnimationPropertyTemplates.xaml b/sources/editor/Xenko.Assets.Presentation/View/AnimationPropertyTemplates.xaml index fb1b7f8d2b..4da955c5f9 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/AnimationPropertyTemplates.xaml +++ b/sources/editor/Xenko.Assets.Presentation/View/AnimationPropertyTemplates.xaml @@ -2,7 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:xk="http://schemas.xenko.com/xaml/presentation" xmlns:tp="clr-namespace:Xenko.Assets.Presentation.TemplateProviders" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:valueConverters="clr-namespace:Xenko.Assets.Presentation.ValueConverters" xmlns:qvm="clr-namespace:Xenko.Core.Presentation.Quantum.ViewModels;assembly=Xenko.Core.Presentation.Quantum"> diff --git a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindActualSizeBehavior.cs b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindActualSizeBehavior.cs index a41d1ef262..2e1566800f 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindActualSizeBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindActualSizeBehavior.cs @@ -2,7 +2,7 @@ // Distributed under the MIT license. See the LICENSE.md file in the project root for more information. using System; using System.Windows; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Presentation.Core; diff --git a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindScrollOffsetBehavior.cs b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindScrollOffsetBehavior.cs index a7c5ace760..b23081685f 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindScrollOffsetBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/BindScrollOffsetBehavior.cs @@ -3,7 +3,7 @@ using System; using System.Windows; using System.Windows.Controls; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Presentation.Core; diff --git a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/SuspendAnimationDuringSliderDragBehavior.cs b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/SuspendAnimationDuringSliderDragBehavior.cs index ef1db19e3f..6a93afbb6c 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/SuspendAnimationDuringSliderDragBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/SuspendAnimationDuringSliderDragBehavior.cs @@ -5,7 +5,7 @@ using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Assets.Presentation.ViewModel; diff --git a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbBehavior.cs b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbBehavior.cs index 29a10cd721..c8bab1e2fd 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbBehavior.cs @@ -2,7 +2,7 @@ // Distributed under the MIT license. See the LICENSE.md file in the project root for more information. using System.Windows; using System.Windows.Controls.Primitives; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Assets.Presentation.ViewModel; namespace Xenko.Assets.Presentation.View.Behaviors diff --git a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbLikeBehavior.cs b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbLikeBehavior.cs index cf7bda1ae3..5006d664a3 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbLikeBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ThumbLikeBehavior.cs @@ -39,7 +39,7 @@ public sealed class ThumbLikeBehavior : MouseMoveCaptureBehaviorBase /// /// The reference from which deltas are calculated. - /// When null, will be used instead. + /// When null, will be used instead. /// public UIElement Reference { get { return (UIElement)GetValue(ReferenceProperty); } set { SetValue(ReferenceProperty, value); } } diff --git a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportPaneBehavior.cs b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportPaneBehavior.cs index 6ef1dc6a27..a1f2a2a4f6 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportPaneBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportPaneBehavior.cs @@ -3,7 +3,7 @@ using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Input; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Assets.Presentation.AssetEditors.SpriteEditor.ViewModels; using Xenko.Assets.Presentation.ViewModel; diff --git a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportZoomBehavior.cs b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportZoomBehavior.cs index 5efd97c16a..17441ea52e 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportZoomBehavior.cs +++ b/sources/editor/Xenko.Assets.Presentation/View/Behaviors/ViewportZoomBehavior.cs @@ -2,7 +2,7 @@ // Distributed under the MIT license. See the LICENSE.md file in the project root for more information. using System.Windows; using System.Windows.Input; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Assets.Presentation.AssetEditors.SpriteEditor.ViewModels; using Xenko.Assets.Presentation.ViewModel; diff --git a/sources/editor/Xenko.Assets.Presentation/View/DebuggerPickerWindow.xaml b/sources/editor/Xenko.Assets.Presentation/View/DebuggerPickerWindow.xaml index f1bd41230d..03928f47e2 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/DebuggerPickerWindow.xaml +++ b/sources/editor/Xenko.Assets.Presentation/View/DebuggerPickerWindow.xaml @@ -1,7 +1,7 @@ diff --git a/sources/editor/Xenko.Assets.Presentation/View/ImageDictionary.xaml b/sources/editor/Xenko.Assets.Presentation/View/ImageDictionary.xaml index c2bdd5539f..d441b95a93 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/ImageDictionary.xaml +++ b/sources/editor/Xenko.Assets.Presentation/View/ImageDictionary.xaml @@ -676,6 +676,17 @@ + + + + + + + + + + + @@ -888,16 +899,6 @@ - - - - - - - - - - diff --git a/sources/editor/Xenko.Assets.Presentation/View/SkeletonPropertyTemplates.xaml b/sources/editor/Xenko.Assets.Presentation/View/SkeletonPropertyTemplates.xaml index c7ee6425ed..05d0659ad8 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/SkeletonPropertyTemplates.xaml +++ b/sources/editor/Xenko.Assets.Presentation/View/SkeletonPropertyTemplates.xaml @@ -2,7 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:templateProviders="clr-namespace:Xenko.Assets.Presentation.TemplateProviders" xmlns:xk="http://schemas.xenko.com/xaml/presentation" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:qvm="clr-namespace:Xenko.Core.Presentation.Quantum.ViewModels;assembly=Xenko.Core.Presentation.Quantum" xmlns:view="clr-namespace:Xenko.Core.Presentation.Quantum.View;assembly=Xenko.Core.Presentation.Quantum"> diff --git a/sources/editor/Xenko.Assets.Presentation/View/VisualScriptingTemplates.xaml b/sources/editor/Xenko.Assets.Presentation/View/VisualScriptingTemplates.xaml index 1c5c5ad0b5..87fc2380be 100644 --- a/sources/editor/Xenko.Assets.Presentation/View/VisualScriptingTemplates.xaml +++ b/sources/editor/Xenko.Assets.Presentation/View/VisualScriptingTemplates.xaml @@ -1,7 +1,7 @@  diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs index a8795faf0c..c8e8731d5c 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/Commands/MoveItemCommand.cs @@ -46,8 +46,8 @@ protected override void ExecuteSync(INodePresenter nodePresenter, object paramet var itemNode = (ItemNodePresenter)nodePresenter; var collectionNode = itemNode.OwnerCollection; var indices = (Tuple)parameter; - var sourceIndex = new Index(indices.Item1); - var targetIndex = new Index(indices.Item2); + var sourceIndex = new NodeIndex(indices.Item1); + var targetIndex = new NodeIndex(indices.Item2); var value = itemNode.Value; collectionNode.RemoveItem(value, sourceIndex); collectionNode.AddItem(value, targetIndex); diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/CopyPasteProcessors/EntityComponentPasteProcessor.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/CopyPasteProcessors/EntityComponentPasteProcessor.cs index c36de458ef..0711ea2e69 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/CopyPasteProcessors/EntityComponentPasteProcessor.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/CopyPasteProcessors/EntityComponentPasteProcessor.cs @@ -21,7 +21,7 @@ public override bool Accept(Type targetRootType, Type targetMemberType, Type pas } /// - protected override bool CanRemoveItem(IObjectNode collection, Index index) + protected override bool CanRemoveItem(IObjectNode collection, NodeIndex index) { if (collection.Type != typeof(EntityComponentCollection)) return base.CanRemoveItem(collection, index); @@ -34,7 +34,7 @@ protected override bool CanRemoveItem(IObjectNode collection, Index index) } /// - protected override bool CanInsertItem(IObjectNode collection, Index index, object newItem) + protected override bool CanInsertItem(IObjectNode collection, NodeIndex index, object newItem) { if (collection.Type != typeof(EntityComponentCollection)) return base.CanInsertItem(collection, index, newItem); @@ -54,7 +54,7 @@ protected override bool CanInsertItem(IObjectNode collection, Index index, objec } /// - protected override bool CanReplaceItem(IObjectNode collection, Index index, object newItem) + protected override bool CanReplaceItem(IObjectNode collection, NodeIndex index, object newItem) { if (collection.Type != typeof(EntityComponentCollection)) return base.CanReplaceItem(collection, index, newItem); @@ -78,7 +78,7 @@ protected override bool CanReplaceItem(IObjectNode collection, Index index, obje } /// - protected override void ReplaceItem(IObjectNode collection, Index index, object newItem) + protected override void ReplaceItem(IObjectNode collection, NodeIndex index, object newItem) { // If we're replacing the transform component, only manually copy allowed properties to the existing one. if (collection.Type == typeof(EntityComponentCollection) && newItem is TransformComponent newTransform) diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/GraphicsCompositorViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/GraphicsCompositorViewModel.cs index b75496b4f4..81521eb088 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/GraphicsCompositorViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/GraphicsCompositorViewModel.cs @@ -21,7 +21,7 @@ public GraphicsCompositorViewModel(AssetViewModelConstructionParameters paramete } [Obsolete] - protected override void OnAssetPropertyChanged(string propertyName, IGraphNode node, Index index, object oldValue, object newValue) + protected override void OnAssetPropertyChanged(string propertyName, IGraphNode node, NodeIndex index, object oldValue, object newValue) { base.OnAssetPropertyChanged(propertyName, node, index, oldValue, newValue); diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/MaterialViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/MaterialViewModel.cs index f87960b588..1f00dd89c8 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/MaterialViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/MaterialViewModel.cs @@ -27,7 +27,7 @@ public MaterialViewModel(AssetViewModelConstructionParameters parameters) public static Type RootNodeType => typeof(MaterialAsset); [Obsolete] - protected override void OnAssetPropertyChanged(string propertyName, IGraphNode node, Index index, object oldValue, object newValue) + protected override void OnAssetPropertyChanged(string propertyName, IGraphNode node, NodeIndex index, object oldValue, object newValue) { base.OnAssetPropertyChanged(propertyName, node, index, oldValue, newValue); if (!PropertyGraph.UpdatingPropertyFromBase) @@ -105,7 +105,7 @@ private void UpdateGenerics(ShaderClassType shader, ComputeShaderClassBase if (parameterType == null) continue; - var index = new Index(generic.Name.Text); + var index = new NodeIndex(generic.Name.Text); if (genericsNode.Indices.Any(x => Equals(x, index))) { var value = genericsNode.Retrieve(index); @@ -131,7 +131,7 @@ private void UpdateGenerics(ShaderClassType shader, ComputeShaderClassBase } // Remove all generics that we don't have anymore - keysToRemove.Select(x => new Index(x)).ForEach(x => genericsNode.Remove(genericsNode.Retrieve(x), x)); + keysToRemove.Select(x => new NodeIndex(x)).ForEach(x => genericsNode.Remove(genericsNode.Retrieve(x), x)); } private void UpdateCompositionNodes(ShaderClassType shader, ComputeShaderClassBase node, IObjectNode ownerNode) @@ -147,7 +147,7 @@ private void UpdateCompositionNodes(ShaderClassType shader, ComputeShaderClas // ComputeColor only if (member.Type.Name.Text == "ComputeColor") { - var index = new Index(member.Name.Text); + var index = new NodeIndex(member.Name.Text); if (compositionNodesNode.Indices.Any(x => Equals(x, index))) { // This composition node already exists, keep it in the list @@ -163,7 +163,7 @@ private void UpdateCompositionNodes(ShaderClassType shader, ComputeShaderClas } // Remove all composition nodes that we don't have anymore - keysToRemove.Select(x => new Index(x)).ForEach(x => compositionNodesNode.Remove(compositionNodesNode.Retrieve(x), x)); + keysToRemove.Select(x => new NodeIndex(x)).ForEach(x => compositionNodesNode.Remove(compositionNodesNode.Retrieve(x), x)); } } } diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelComponentViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelComponentViewModel.cs index 959c8ff8c2..017419de85 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelComponentViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelComponentViewModel.cs @@ -74,7 +74,7 @@ internal void UpdateNodePresenter(INodePresenter node) { var modelMaterial = model.Materials.Count > i ? model.Materials[i] : null; var materialName = modelMaterial?.Name ?? $"(Material {i + 1})"; - var index = new Index(i); + var index = new NodeIndex(i); var virtualMaterial = factory.CreateVirtualNodePresenter(node, material.Name + "___Virtual", typeof(Material), i, () => GetMaterial(materialsNode, index), x => SetMaterial(materialsNode, index, (Material)x), @@ -106,13 +106,13 @@ internal void UpdateNodePresenter(INodePresenter node) } } - private Task FetchMaterial(IObjectNode materialsNode, Index index) + private Task FetchMaterial(IObjectNode materialsNode, NodeIndex index) { var material = GetMaterial(materialsNode, index); return FetchAssetCommand.Fetch(entity.Editor.Session, material); } - private static void SetMaterial(IObjectNode materialNode, Index index, Material value) + private static void SetMaterial(IObjectNode materialNode, NodeIndex index, Material value) { if (materialNode.Indices.Contains(index)) { @@ -124,7 +124,7 @@ private static void SetMaterial(IObjectNode materialNode, Index index, Material } } - private object GetMaterial(IObjectNode materialNode, Index index) + private object GetMaterial(IObjectNode materialNode, NodeIndex index) { if (materialNode.Indices.Contains(index)) { @@ -143,7 +143,7 @@ private object GetMaterial(IObjectNode materialNode, Index index) return model?.Materials[index.Int].MaterialInstance.Material; } - private void SetMaterialEnabled(IObjectNode materialNode, Index index, bool value) + private void SetMaterialEnabled(IObjectNode materialNode, NodeIndex index, bool value) { if (value) { @@ -157,7 +157,7 @@ private void SetMaterialEnabled(IObjectNode materialNode, Index index, bool valu } } - private static object IsMaterialEnabled(IObjectNode materialNode, Index index) + private static object IsMaterialEnabled(IObjectNode materialNode, NodeIndex index) { return materialNode.Indices.Contains(index); } diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelViewModel.cs index c881b54bb9..c0f342935e 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/ModelViewModel.cs @@ -47,6 +47,12 @@ protected override IAssetImporter GetImporter() return AssetRegistry.FindImporterForFile(Asset.Source).OfType().FirstOrDefault(); } + protected override void PrepareImporterInputParametersForUpdateFromSource(PropertyCollection importerInputParameters, ModelAsset asset) + { + // This setting will be ignored if it's the FBX importer + importerInputParameters.Set(ModelAssetImporter.DeduplicateMaterialsKey, asset.DeduplicateMaterials); + } + protected override void UpdateAssetFromSource(ModelAsset assetToMerge) { // Create a dictionary containing all new and old materials, favoring old ones to maintain existing references @@ -60,7 +66,7 @@ protected override void UpdateAssetFromSource(ModelAsset assetToMerge) var materialsNode = AssetRootNode[nameof(ModelAsset.Materials)].Target; while (Asset.Materials.Count > 0) { - materialsNode.Remove(Asset.Materials[0], new Index(0)); + materialsNode.Remove(Asset.Materials[0], new NodeIndex(0)); } // Repopulate the list of materials @@ -72,7 +78,7 @@ protected override void UpdateAssetFromSource(ModelAsset assetToMerge) id = ItemId.New(); // Use Restore to allow to set manually the id. - materialsNode.Restore(dictionary[assetToMerge.Materials[i].Name], new Index(i), id); + materialsNode.Restore(dictionary[assetToMerge.Materials[i].Name], new NodeIndex(i), id); } } diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/Preview/HeightmapPreviewViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/Preview/HeightmapPreviewViewModel.cs new file mode 100644 index 0000000000..6ed79b697d --- /dev/null +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/Preview/HeightmapPreviewViewModel.cs @@ -0,0 +1,40 @@ +// Copyright (c) Xenko contributors (https://xenko.com) +// Distributed under the MIT license. See the LICENSE.md file in the project root for more information. +using Xenko.Assets.Presentation.Preview; +using Xenko.Core.Assets.Editor.ViewModel; +using Xenko.Editor.Preview; +using Xenko.Editor.Preview.ViewModel; + +namespace Xenko.Assets.Presentation.ViewModel.Preview +{ + [AssetPreviewViewModel(typeof(HeightmapPreview))] + public class HeightmapPreviewViewModel : TextureBasePreviewViewModel + { + private HeightmapPreview heightmapPreview; + private int previewHeightmapLength; + private int previewHeightmapWidth; + + public HeightmapPreviewViewModel(SessionViewModel session) + : base(session) + { + } + + public int PreviewHeightmapLength { get { return previewHeightmapLength; } private set { SetValue(ref previewHeightmapLength, value); } } + + public int PreviewHeightmapWidth { get { return previewHeightmapWidth; } private set { SetValue(ref previewHeightmapWidth, value); } } + + public override void AttachPreview(IAssetPreview preview) + { + heightmapPreview = (HeightmapPreview)preview; + heightmapPreview.NotifyHeightmapLoaded += UpdateHeightmapInfo; + UpdateHeightmapInfo(); + AttachPreviewTexture(preview); + } + + private void UpdateHeightmapInfo() + { + PreviewHeightmapWidth = heightmapPreview.Width; + PreviewHeightmapLength = heightmapPreview.Length; + } + } +} diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/SceneViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/SceneViewModel.cs index 6a539267bd..8d4ad58e0b 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/SceneViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/SceneViewModel.cs @@ -171,7 +171,7 @@ protected override void Initialize() } foreach (var index in invalidIndices) { - childrenNode.Remove(Asset.ChildrenIds[index], new Index(index)); + childrenNode.Remove(Asset.ChildrenIds[index], new NodeIndex(index)); } if (Parent?.isInitialized == true) @@ -251,7 +251,7 @@ private void ChildrenCollectionChanged(object sender, [NotNull] NotifyCollection foreach (var scene in e.OldItems.Cast()) { scene.Parent = null; - childrenNode.Remove(scene.Id, new Index(e.OldStartingIndex)); + childrenNode.Remove(scene.Id, new NodeIndex(e.OldStartingIndex)); } } if (e.NewItems?.Count > 0) @@ -265,7 +265,7 @@ private void ChildrenCollectionChanged(object sender, [NotNull] NotifyCollection scene.Parent?.Children.Remove(scene); scene.Parent = this; } - childrenNode.Add(scene.Id, new Index(index++)); + childrenNode.Add(scene.Id, new NodeIndex(index++)); } } break; diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/SkeletonViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/SkeletonViewModel.cs index 7166e6c3d3..d6802d7bb3 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/SkeletonViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/SkeletonViewModel.cs @@ -36,7 +36,7 @@ protected override void UpdateAssetFromSource(SkeletonAsset assetToMerge) var skeletonNodes = AssetRootNode[nameof(SkeletonAsset.Nodes)].Target; while (Asset.Nodes.Count > 0) { - skeletonNodes.Remove(Asset.Nodes[0], new Index(0)); + skeletonNodes.Remove(Asset.Nodes[0], new NodeIndex(0)); } // Repopulate the list of nodes @@ -52,7 +52,7 @@ protected override void UpdateAssetFromSource(SkeletonAsset assetToMerge) if (!ids.TryGetValue(assetToMerge.Nodes[i].Name, out id)) id = ItemId.New(); - skeletonNodes.Restore(newNode, new Index(i), id); + skeletonNodes.Restore(newNode, new NodeIndex(i), id); } } } diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs index 7de4adc39e..f3fcab4f09 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptMethodViewModel.cs @@ -24,7 +24,7 @@ public class VisualScriptMethodViewModel : DispatcherViewModel private readonly IObjectNode blocksContent; private readonly IObjectNode linksContent; private readonly IObjectNode parametersContent; - private readonly MemberGraphNodeBinding accessibilityNodeBinding; + private readonly MemberGraphNodeBinding accessibilityNodeBinding; private readonly MemberGraphNodeBinding virtualModifierNodeBinding; private readonly MemberGraphNodeBinding isStaticNodeBinding; private readonly MemberGraphNodeBinding nameNodeBinding; @@ -40,7 +40,7 @@ public VisualScriptMethodViewModel(VisualScriptViewModel visualScript, Method me parametersContent = methodNode[nameof(method.Parameters)].Target; // Create bindings - accessibilityNodeBinding = new MemberGraphNodeBinding(methodNode[nameof(method.Accessibility)], nameof(Accessibility), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); + accessibilityNodeBinding = new MemberGraphNodeBinding(methodNode[nameof(method.Accessibility)], nameof(Scripts.Accessibility), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); virtualModifierNodeBinding = new MemberGraphNodeBinding(methodNode[nameof(method.VirtualModifier)], nameof(VirtualModifier), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); isStaticNodeBinding = new MemberGraphNodeBinding(methodNode[nameof(method.IsStatic)], nameof(IsStatic), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); nameNodeBinding = new MemberGraphNodeBinding(methodNode[nameof(method.Name)], nameof(Name), OnPropertyChanging, OnPropertyChanged, visualScript.UndoRedoService); @@ -58,7 +58,7 @@ public override void Destroy() base.Destroy(); } - public Accessibility Accessibility { get { return accessibilityNodeBinding.Value; } set { accessibilityNodeBinding.Value = value; } } + public Scripts.Accessibility Accessibility { get { return accessibilityNodeBinding.Value; } set { accessibilityNodeBinding.Value = value; } } public VirtualModifier VirtualModifier { get { return virtualModifierNodeBinding.Value; } set { virtualModifierNodeBinding.Value = value; } } @@ -85,7 +85,7 @@ public void RemoveParameter(Parameter parameter) // TODO: Cleanup references to this parameter // Remove - var itemIndex = new Index(index); + var itemIndex = new NodeIndex(index); parametersContent.Remove(parameter, itemIndex); } @@ -102,7 +102,7 @@ public void RemoveBlock(Block block) { if (link.Source.Owner == block || link.Target.Owner == block) { - var linkItemIndex = new Index(i); + var linkItemIndex = new NodeIndex(i); linksContent.Remove(link, linkItemIndex); // Since we removed an item, fix index of next check @@ -111,7 +111,7 @@ public void RemoveBlock(Block block) } // Remove - var itemIndex = new Index(block.Id); + var itemIndex = new NodeIndex(block.Id); blocksContent.Remove(block, itemIndex); } @@ -123,7 +123,7 @@ public void AddLink(Link link) public void RemoveLink(Link link) { // Remove - var itemIndex = new Index(link.Id); + var itemIndex = new NodeIndex(link.Id); linksContent.Remove(link, itemIndex); } @@ -297,7 +297,7 @@ private void UpdateSlots(Block block, List newSlots) // TODO: we could use diff to minimize changes, but probably not worth the effort // Note that we can't simply overwrite slots, since the Slot.Owner would become invalid if added before it is removed at another index for (int i = block.Slots.Count - 1; i >= 0; --i) - blockSlots.Remove(block.Slots[i], new Index(i)); + blockSlots.Remove(block.Slots[i], new NodeIndex(i)); // Add new slots (and try to reduce changes) foreach (var slot in newSlots) diff --git a/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptViewModel.cs b/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptViewModel.cs index 59548c209a..bf44dad28d 100644 --- a/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptViewModel.cs +++ b/sources/editor/Xenko.Assets.Presentation/ViewModel/VisualScriptViewModel.cs @@ -45,7 +45,7 @@ public void RemoveProperty(Property property) // TODO: Cleanup references to this variable // Remove - var itemIndex = new Index(index); + var itemIndex = new NodeIndex(index); propertiesContent.Remove(property, itemIndex); } @@ -64,7 +64,7 @@ public void RemoveMethod(Method method) // TODO: Cleanup references to this function // Remove - var itemIndex = new Index(index); + var itemIndex = new NodeIndex(index); methodsContent.Remove(method, itemIndex); } diff --git a/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.csproj b/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.csproj index 1a7b69abe7..83f17207ea 100644 --- a/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.csproj +++ b/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.csproj @@ -1,6 +1,6 @@ - + - + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true @@ -18,34 +18,22 @@ x64 - - - - - - - $(XenkoCommonDependenciesDir)GraphX\QuickGraph.dll - - - $(XenkoCommonDependenciesDir)GraphX\GraphX.PCL.Common.dll - - - $(XenkoCommonDependenciesDir)GraphX\GraphX.WPF.Controls.dll - + + + + + - $(XenkoCommonDependenciesDir)RoslynPad\RoslynPad.Editor.Windows.dll + $(XenkoCommonDependenciesDir)RoslynPad\net462\RoslynPad.Editor.Windows.dll - $(XenkoCommonDependenciesDir)RoslynPad\RoslynPad.Roslyn.Windows.dll + $(XenkoCommonDependenciesDir)RoslynPad\net462\RoslynPad.Roslyn.Windows.dll - $(XenkoCommonDependenciesDir)RoslynPad\RoslynPad.Roslyn.dll + $(XenkoCommonDependenciesDir)RoslynPad\net462\RoslynPad.Roslyn.dll - - $(XenkoCommonDependenciesDir)ExpressionBlendSDK\System.Windows.Interactivity.dll - 4.0 @@ -57,6 +45,7 @@ Properties\SharedAssemblyInfo.cs + @@ -81,20 +70,18 @@ Settings.Designer.cs - - + + - - @@ -126,19 +113,6 @@ - - - - True - True - True - %(Filename).xkfx - - - XenkoShaderKeyGenerator - %(Filename).cs - - @@ -146,8 +120,13 @@ + + + MSBuild:Compile + + - + $(TargetsForTfmSpecificBuildOutput);IncludeExtraAssemblies diff --git a/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.xkpkg b/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.xkpkg index 9fbf279722..2c04441615 100644 --- a/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.xkpkg +++ b/sources/editor/Xenko.Assets.Presentation/Xenko.Assets.Presentation.xkpkg @@ -32,6 +32,7 @@ TemplateFolders: - !file Templates/Assets/Misc/DefaultGameSettings.xktpl - !file Templates/Assets/Misc/DefaultGraphicsCompositorLevel10.xktpl - !file Templates/Assets/Misc/DefaultGraphicsCompositorLevel9.xktpl + - !file Templates/Assets/Misc/DefaultGraphicsCompositorVoxels.xktpl - !file Templates/Assets/Misc/DefaultRawAsset.xktpl - !file Templates/Assets/Misc/DefaultSkybox.xktpl - !file Templates/Assets/Models/DefaultModel.xktpl @@ -52,6 +53,8 @@ TemplateFolders: - !file Templates/Assets/Physics/ColliderShapePlane.xktpl - !file Templates/Assets/Physics/ColliderShapeSphere.xktpl - !file Templates/Assets/Physics/ColliderShapeCone.xktpl + - !file Templates/Assets/Physics/ColliderShapeHeightfield.xktpl + - !file Templates/Assets/Physics/Heightmap.xktpl - !file Templates/Assets/Scenes/DefaultPrefab.xktpl - !file Templates/Assets/Scenes/DefaultNavigationMesh.xktpl - !file Templates/Assets/Scenes/DefaultScene.xktpl diff --git a/sources/editor/Xenko.Assets.Presentation/XenkoDefaultAssetsPlugin.cs b/sources/editor/Xenko.Assets.Presentation/XenkoDefaultAssetsPlugin.cs index d81b68a187..108ec46de9 100644 --- a/sources/editor/Xenko.Assets.Presentation/XenkoDefaultAssetsPlugin.cs +++ b/sources/editor/Xenko.Assets.Presentation/XenkoDefaultAssetsPlugin.cs @@ -25,6 +25,7 @@ using Xenko.Editor; using Xenko.Engine; using Xenko.Core.Assets.Templates; +using Xenko.Core.Packages; namespace Xenko.Assets.Presentation { @@ -53,8 +54,6 @@ public override int GetHashCode(Type obj) } } - private EffectCompilerServerSession effectCompilerServerSession; - private static ResourceDictionary imageDictionary; private static ResourceDictionary animationPropertyTemplateDictionary; private static ResourceDictionary entityPropertyTemplateDictionary; @@ -79,7 +78,6 @@ public override int GetHashCode(Type obj) public XenkoDefaultAssetsPlugin() { ProfileSettings.Add(new PackageSettingsEntry(GameUserSettings.Effect.EffectCompilation, TargetPackage.Executable)); - ProfileSettings.Add(new PackageSettingsEntry(GameUserSettings.Effect.RecordUsedEffects, TargetPackage.Executable)); LoadDefaultTemplates(); } @@ -88,13 +86,17 @@ public static void LoadDefaultTemplates() { // Load templates // Currently hardcoded, this will need to change with plugin system - foreach (var packageInfo in new[] { new { Name = "Xenko.Assets.Presentation", Version = XenkoVersion.NuGetVersion }, new { Name = "Xenko.SpriteStudio.Offline", Version = XenkoVersion.NuGetVersion }, new { Name = "Xenko.Samples.Templates", Version = XenkoVersion.NuGetVersionSuffix != string.Empty ? "3.1.0.1-beta02" : "3.1.0.1" } }) + foreach (var packageInfo in new[] { new { Name = "Xenko.Assets.Presentation", Version = XenkoVersion.NuGetVersion }}) { var logger = new LoggerResult(); - var packageFile = PackageStore.Instance.GetPackageFileName(packageInfo.Name, new PackageVersionRange(new PackageVersion(packageInfo.Version))); - var package = Package.Load(logger, packageFile.ToWindowsPath()); - if (logger.HasErrors) - throw new InvalidOperationException($"Could not load package {packageInfo.Name}:{Environment.NewLine}{logger.ToText()}"); + var packageFile = PackageStore.Instance.GetPackageFileName(packageInfo.Name, new PackageVersionRange(new PackageVersion("9.9.1-nugt99")), null, true, true, true); + var package = Package.Load(logger, packageFile.ToWindowsPath(), new PackageLoadParameters() + { + LoadAssemblyReferences = false, + RegisterPackageAssemblies = false, + AutoCompileProjects = false, + AutoLoadTemporaryAssets = true, + }); TemplateManager.RegisterPackage(package); } @@ -205,11 +207,15 @@ public override void InitializeSession(SessionViewModel session) session.AssetViewProperties.RegisterNodePresenterUpdater(new VisualScriptNodeUpdater()); session.AssetViewProperties.RegisterNodePresenterUpdater(new NavigationNodeUpdater(session)); - // Connects to effect compiler (to import new effect permutations discovered by running the game) - if (Xenko.Core.Assets.Editor.Settings.EditorSettings.UseEffectCompilerServer.GetValue()) - { - effectCompilerServerSession = new EffectCompilerServerSession(session); - } + // Extra packages to display in "add reference" dialog + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.Engine.EntityComponent).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.UI.UIElement).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.Particles.Components.ParticleSystemComponent).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.Navigation.NavigationComponent).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.Physics.StaticColliderComponent).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.Video.VideoComponent).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.Voxels.Module).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); + session.SuggestedPackages.Add(new PackageName(typeof(Xenko.SpriteStudio.Runtime.SpriteStudioNodeLinkComponent).Assembly.GetName().Name, new PackageVersion(XenkoVersion.NuGetVersion))); } /// @@ -241,11 +247,6 @@ public override void RegisterPostPasteProcessors(ICollection protected override void SessionDisposed(SessionViewModel session) { - if (effectCompilerServerSession != null) - { - effectCompilerServerSession.Dispose(); - effectCompilerServerSession = null; - } base.SessionDisposed(session); } @@ -306,9 +307,23 @@ public static IEnumerable GetComponentsByOrder([ItemNotNull, NotNull] IEnu return (ascending ? filtered.OrderBy(t => t.order) : filtered.OrderByDescending(t => t.order)).Select(t => t.type); } + private static List GetCleanTypes() + { + List allTypes = new List(); + foreach (var aa in AssetRegistry.AssetAssemblies) + { + try + { + allTypes.AddRange(aa.GetExportedTypes()); + } + catch (Exception e) { } + } + return allTypes; + } + private static void RegisterGizmoTypes() { - var allTypes = AssetRegistry.AssetAssemblies.SelectMany(x => x.GetTypes()); + var allTypes = GetCleanTypes(); foreach (var type in allTypes) { if (typeof(IGizmo).IsAssignableFrom(type)) @@ -324,7 +339,7 @@ private static void RegisterGizmoTypes() private static void RegisterAssetHighlighterTypes() { - var allTypes = AssetRegistry.AssetAssemblies.SelectMany(x => x.GetTypes()); + var allTypes = GetCleanTypes(); foreach (var type in allTypes) { if (typeof(AssetHighlighter).IsAssignableFrom(type)) @@ -341,7 +356,7 @@ private static void RegisterComponentOrders(ILogger logger) { // TODO: iterate on plugin assembly or register component type in the plugin registry var hashSet = new HashSet(); - var componentTypes = AssetRegistry.AssetAssemblies.SelectMany(x => x.GetTypes().Where(y => typeof(EntityComponent).IsAssignableFrom(y))); + var componentTypes = GetCleanTypes().Where(y => typeof(EntityComponent).IsAssignableFrom(y)); var orders = new List<(Type, int)>(); foreach (var type in componentTypes) { diff --git a/sources/editor/Xenko.Core.Assets.Editor.Tests/TestArchetypesBasicUndoRedo.cs b/sources/editor/Xenko.Core.Assets.Editor.Tests/TestArchetypesBasicUndoRedo.cs index 1b5bf3c4ab..774fbadbf3 100644 --- a/sources/editor/Xenko.Core.Assets.Editor.Tests/TestArchetypesBasicUndoRedo.cs +++ b/sources/editor/Xenko.Core.Assets.Editor.Tests/TestArchetypesBasicUndoRedo.cs @@ -36,7 +36,7 @@ public void AssetPropertyChanged(object sender, IAssetNodeChangeEventArgs e) // Don't create action items if the change comes from the Base if (!propertyGraph.UpdatingPropertyFromBase) { - var index = (e as ItemChangeEventArgs)?.Index ?? Index.Empty; + var index = (e as ItemChangeEventArgs)?.Index ?? NodeIndex.Empty; var overrideChange = new AssetContentValueChangeOperation((IAssetNode)e.Node, e.ChangeType, index, e.OldValue, e.NewValue, e.PreviousOverride, e.NewOverride, e.ItemId, Enumerable.Empty()); undoRedoService.PushOperation(overrideChange); } diff --git a/sources/editor/Xenko.Core.Assets.Editor.Tests/TestCopyPasteProperties.cs b/sources/editor/Xenko.Core.Assets.Editor.Tests/TestCopyPasteProperties.cs index 357f2a4cf4..b20e1a1816 100644 --- a/sources/editor/Xenko.Core.Assets.Editor.Tests/TestCopyPasteProperties.cs +++ b/sources/editor/Xenko.Core.Assets.Editor.Tests/TestCopyPasteProperties.cs @@ -42,7 +42,7 @@ public void TestCopyPasteSingleProperty() var source = new MyClass { Float = 5.0f }; var target = new MyClass { Float = 2.0f }; var copiedText = Copy(source, source.Float); - Paste(target, copiedText, typeof(float), typeof(float), x => x[nameof(MyClass.Float)], Index.Empty, false); + Paste(target, copiedText, typeof(float), typeof(float), x => x[nameof(MyClass.Float)], NodeIndex.Empty, false); Assert.Equal(5.0f, target.Float); } @@ -50,7 +50,7 @@ public void TestCopyPasteSingleProperty() public void TestPasteStringAsFloatProperty() { var target = new MyClass { Float = 2.0f }; - Paste(target, "5", typeof(float), typeof(float), x => x[nameof(MyClass.Float)], Index.Empty, false); + Paste(target, "5", typeof(float), typeof(float), x => x[nameof(MyClass.Float)], NodeIndex.Empty, false); Assert.Equal(5.0f, target.Float); } @@ -60,7 +60,7 @@ public void TestCopyPasteStructMemberProperty() var source = new MyClass { Struct = new MyStruct { Integer = 5 } }; var target = new MyClass { Struct = new MyStruct { Integer = 2 } }; var copiedText = Copy(source, source.Struct.Integer); - Paste(target, copiedText, typeof(int), typeof(int), x => x[nameof(MyClass.Struct)].Target[nameof(MyStruct.Integer)], Index.Empty, false); + Paste(target, copiedText, typeof(int), typeof(int), x => x[nameof(MyClass.Struct)].Target[nameof(MyStruct.Integer)], NodeIndex.Empty, false); Assert.Equal(5, target.Struct.Integer); } @@ -70,7 +70,7 @@ public void TestCopyPasteStructProperty() var source = new MyClass { Struct = new MyStruct { Integer = 5 } }; var target = new MyClass { Struct = new MyStruct { Integer = 2 } }; var copiedText = Copy(source, source.Struct); - Paste(target, copiedText, typeof(MyStruct), typeof(MyStruct), x => x[nameof(MyClass.Struct)], Index.Empty, false); + Paste(target, copiedText, typeof(MyStruct), typeof(MyStruct), x => x[nameof(MyClass.Struct)], NodeIndex.Empty, false); Assert.Equal(5, target.Struct.Integer); } @@ -80,7 +80,7 @@ public void TestCopyPasteClassMemberProperty() var source = new MyClass { Sub = new MyClass { Float = 5 } }; var target = new MyClass { Sub = new MyClass { Float = 2 } }; var copiedText = Copy(source, source.Sub.Float); - Paste(target, copiedText, typeof(int), typeof(int), x => x[nameof(MyClass.Sub)].Target[nameof(MyClass.Float)], Index.Empty, false); + Paste(target, copiedText, typeof(int), typeof(int), x => x[nameof(MyClass.Sub)].Target[nameof(MyClass.Float)], NodeIndex.Empty, false); Assert.Equal(5, target.Sub.Float); } @@ -90,7 +90,7 @@ public void TestCopyPasteClassProperty() var source = new MyClass { Sub = new MyClass { Float = 5 } }; var target = new MyClass { Sub = new MyClass { Float = 2 } }; var copiedText = Copy(source, source.Sub); - Paste(target, copiedText, typeof(MyClass), typeof(MyClass), x => x[nameof(MyClass.Sub)], Index.Empty, false); + Paste(target, copiedText, typeof(MyClass), typeof(MyClass), x => x[nameof(MyClass.Sub)], NodeIndex.Empty, false); Assert.Equal(5, target.Sub.Float); } @@ -100,7 +100,7 @@ public void TestCopyPasteListDouble() var source = new MyClass { DoubleList = new List { 1, 2, 3 } }; var target = new MyClass { DoubleList = new List { 4, 5, 6 } }; var copiedText = Copy(source, source.DoubleList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, false); Assert.Equal(6, target.DoubleList.Count); Assert.Equal(4.0, target.DoubleList[0]); Assert.Equal(5.0, target.DoubleList[1]); @@ -116,7 +116,7 @@ public void TestCopyReplaceListDouble() var source = new MyClass { DoubleList = new List { 1, 2, 3 } }; var target = new MyClass { DoubleList = new List { 4, 5, 6 } }; var copiedText = Copy(source, source.DoubleList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, true); Assert.Equal(3, target.DoubleList.Count); Assert.Equal(1.0, target.DoubleList[0]); Assert.Equal(2.0, target.DoubleList[1]); @@ -129,7 +129,7 @@ public void TestCopyPasteListStruct() var source = new MyClass { StructList = new List { new MyStruct { Integer = 1 }, new MyStruct { Integer = 2 }, new MyStruct { Integer = 3 } } }; var target = new MyClass { StructList = new List { new MyStruct { Integer = 4 }, new MyStruct { Integer = 5 }, new MyStruct { Integer = 6 } } }; var copiedText = Copy(source, source.StructList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)], Index.Empty, false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)], NodeIndex.Empty, false); Assert.Equal(6, target.StructList.Count); Assert.Equal(4.0, target.StructList[0].Integer); Assert.Equal(5.0, target.StructList[1].Integer); @@ -145,7 +145,7 @@ public void TestCopyReplaceListStruct() var source = new MyClass { StructList = new List { new MyStruct { Integer = 1 }, new MyStruct { Integer = 2 }, new MyStruct { Integer = 3 } } }; var target = new MyClass { StructList = new List { new MyStruct { Integer = 4 }, new MyStruct { Integer = 5 }, new MyStruct { Integer = 6 } } }; var copiedText = Copy(source, source.StructList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)], Index.Empty, true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)], NodeIndex.Empty, true); Assert.Equal(3, target.StructList.Count); Assert.Equal(1.0, target.StructList[0].Integer); Assert.Equal(2.0, target.StructList[1].Integer); @@ -158,7 +158,7 @@ public void TestCopyPasteListClass() var source = new MyClass { SubList = new List { new MyClass { Float = 1 }, new MyClass { Float = 2 }, new MyClass { Float = 3 } } }; var target = new MyClass { SubList = new List { new MyClass { Float = 4 }, new MyClass { Float = 5 }, new MyClass { Float = 6 } } }; var copiedText = Copy(source, source.SubList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)], Index.Empty, false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)], NodeIndex.Empty, false); Assert.Equal(6, target.SubList.Count); Assert.Equal(4.0, target.SubList[0].Float); Assert.Equal(5.0, target.SubList[1].Float); @@ -174,7 +174,7 @@ public void TestCopyReplaceListClass() var source = new MyClass { SubList = new List { new MyClass { Float = 1 }, new MyClass { Float = 2 }, new MyClass { Float = 3 } } }; var target = new MyClass { SubList = new List { new MyClass { Float = 4 }, new MyClass { Float = 5 }, new MyClass { Float = 6 } } }; var copiedText = Copy(source, source.SubList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)], Index.Empty, true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)], NodeIndex.Empty, true); Assert.Equal(3, target.SubList.Count); Assert.Equal(1.0, target.SubList[0].Float); Assert.Equal(2.0, target.SubList[1].Float); @@ -187,7 +187,7 @@ public void TestCopyPasteListDoubleIntoItem() var source = new MyClass { DoubleList = new List { 1, 2, 3 } }; var target = new MyClass { DoubleList = new List { 4, 5, 6 } }; var copiedText = Copy(source, source.DoubleList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new Index(1), false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new NodeIndex(1), false); Assert.Equal(6, target.DoubleList.Count); Assert.Equal(4.0, target.DoubleList[0]); Assert.Equal(1.0, target.DoubleList[1]); @@ -203,7 +203,7 @@ public void TestCopyReplaceListDoubleIntoItem() var source = new MyClass { DoubleList = new List { 1, 2, 3 } }; var target = new MyClass { DoubleList = new List { 4, 5, 6 } }; var copiedText = Copy(source, source.DoubleList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new Index(1), true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new NodeIndex(1), true); Assert.Equal(5, target.DoubleList.Count); Assert.Equal(4.0, target.DoubleList[0]); Assert.Equal(1.0, target.DoubleList[1]); @@ -218,7 +218,7 @@ public void TestCopyPasteListStructIntoItem() var source = new MyClass { StructList = new List { new MyStruct { Integer = 1 }, new MyStruct { Integer = 2 }, new MyStruct { Integer = 3 } } }; var target = new MyClass { StructList = new List { new MyStruct { Integer = 4 }, new MyStruct { Integer = 5 }, new MyStruct { Integer = 6 } } }; var copiedText = Copy(source, source.StructList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new Index(1), false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new NodeIndex(1), false); Assert.Equal(6, target.StructList.Count); Assert.Equal(4.0, target.StructList[0].Integer); Assert.Equal(1.0, target.StructList[1].Integer); @@ -234,7 +234,7 @@ public void TestCopyReplaceListStructIntoItem() var source = new MyClass { StructList = new List { new MyStruct { Integer = 1 }, new MyStruct { Integer = 2 }, new MyStruct { Integer = 3 } } }; var target = new MyClass { StructList = new List { new MyStruct { Integer = 4 }, new MyStruct { Integer = 5 }, new MyStruct { Integer = 6 } } }; var copiedText = Copy(source, source.StructList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new Index(1), true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new NodeIndex(1), true); Assert.Equal(5, target.StructList.Count); Assert.Equal(4.0, target.StructList[0].Integer); Assert.Equal(1.0, target.StructList[1].Integer); @@ -249,7 +249,7 @@ public void TestCopyPasteListClassIntoItem() var source = new MyClass { SubList = new List { new MyClass { Float = 1 }, new MyClass { Float = 2 }, new MyClass { Float = 3 } } }; var target = new MyClass { SubList = new List { new MyClass { Float = 4 }, new MyClass { Float = 5 }, new MyClass { Float = 6 } } }; var copiedText = Copy(source, source.SubList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new Index(1), false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new NodeIndex(1), false); Assert.Equal(6, target.SubList.Count); Assert.Equal(4.0, target.SubList[0].Float); Assert.Equal(1.0, target.SubList[1].Float); @@ -265,7 +265,7 @@ public void TestCopyReplaceListClassIntoItem() var source = new MyClass { SubList = new List { new MyClass { Float = 1 }, new MyClass { Float = 2 }, new MyClass { Float = 3 } } }; var target = new MyClass { SubList = new List { new MyClass { Float = 4 }, new MyClass { Float = 5 }, new MyClass { Float = 6 } } }; var copiedText = Copy(source, source.SubList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new Index(1), true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new NodeIndex(1), true); Assert.Equal(5, target.SubList.Count); Assert.Equal(4.0, target.SubList[0].Float); Assert.Equal(1.0, target.SubList[1].Float); @@ -280,7 +280,7 @@ public void TestCopyPasteDoubleIntoList() var source = new MyClass { DoubleList = new List { 1, 2, 3 } }; var target = new MyClass { DoubleList = new List { 4, 5, 6 } }; var copiedText = Copy(source, source.DoubleList[2]); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new Index(1), false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new NodeIndex(1), false); Assert.Equal(4, target.DoubleList.Count); Assert.Equal(4.0, target.DoubleList[0]); Assert.Equal(3.0, target.DoubleList[1]); @@ -288,7 +288,7 @@ public void TestCopyPasteDoubleIntoList() Assert.Equal(6.0, target.DoubleList[3]); target = new MyClass { DoubleList = new List { 4, 5, 6 } }; - Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new Index(1), false); + Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new NodeIndex(1), false); Assert.Equal(4, target.DoubleList.Count); Assert.Equal(4.0, target.DoubleList[0]); Assert.Equal(2.0, target.DoubleList[1]); @@ -302,14 +302,14 @@ public void TestCopyReplaceDoubleIntoList() var source = new MyClass { DoubleList = new List { 1, 2, 3 } }; var target = new MyClass { DoubleList = new List { 4, 5, 6 } }; var copiedText = Copy(source, source.DoubleList[2]); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new Index(1), true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new NodeIndex(1), true); Assert.Equal(3, target.DoubleList.Count); Assert.Equal(4.0, target.DoubleList[0]); Assert.Equal(3.0, target.DoubleList[1]); Assert.Equal(6.0, target.DoubleList[2]); target = new MyClass { DoubleList = new List { 4, 5, 6 } }; - Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new Index(1), true); + Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)].Target, new NodeIndex(1), true); Assert.Equal(3, target.DoubleList.Count); Assert.Equal(4.0, target.DoubleList[0]); Assert.Equal(2.0, target.DoubleList[1]); @@ -322,7 +322,7 @@ public void TestCopyPasteStructIntoList() var source = new MyClass { StructList = new List { new MyStruct { Integer = 1 }, new MyStruct { Integer = 2 }, new MyStruct { Integer = 3 } } }; var target = new MyClass { StructList = new List { new MyStruct { Integer = 4 }, new MyStruct { Integer = 5 }, new MyStruct { Integer = 6 } } }; var copiedText = Copy(source, source.StructList[2]); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new Index(1), false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new NodeIndex(1), false); Assert.Equal(4, target.StructList.Count); Assert.Equal(4.0, target.StructList[0].Integer); Assert.Equal(3.0, target.StructList[1].Integer); @@ -336,7 +336,7 @@ public void TestCopyReplaceStructIntoList() var source = new MyClass { StructList = new List { new MyStruct { Integer = 1 }, new MyStruct { Integer = 2 }, new MyStruct { Integer = 3 } } }; var target = new MyClass { StructList = new List { new MyStruct { Integer = 4 }, new MyStruct { Integer = 5 }, new MyStruct { Integer = 6 } } }; var copiedText = Copy(source, source.StructList[2]); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new Index(1), true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.StructList)].Target, new NodeIndex(1), true); Assert.Equal(3, target.StructList.Count); Assert.Equal(4.0, target.StructList[0].Integer); Assert.Equal(3.0, target.StructList[1].Integer); @@ -349,7 +349,7 @@ public void TestCopyPasteClassIntoList() var source = new MyClass { SubList = new List { new MyClass { Float = 1 }, new MyClass { Float = 2 }, new MyClass { Float = 3 } } }; var target = new MyClass { SubList = new List { new MyClass { Float = 4 }, new MyClass { Float = 5 }, new MyClass { Float = 6 } } }; var copiedText = Copy(source, source.SubList[2]); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new Index(1), false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new NodeIndex(1), false); Assert.Equal(4, target.SubList.Count); Assert.Equal(4.0, target.SubList[0].Float); Assert.Equal(3.0, target.SubList[1].Float); @@ -363,7 +363,7 @@ public void TestCopyReplaceClassIntoList() var source = new MyClass { SubList = new List { new MyClass { Float = 1 }, new MyClass { Float = 2 }, new MyClass { Float = 3 } } }; var target = new MyClass { SubList = new List { new MyClass { Float = 4 }, new MyClass { Float = 5 }, new MyClass { Float = 6 } } }; var copiedText = Copy(source, source.SubList[2]); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new Index(1), true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.SubList)].Target, new NodeIndex(1), true); Assert.Equal(3, target.SubList.Count); Assert.Equal(4.0, target.SubList[0].Float); Assert.Equal(3.0, target.SubList[1].Float); @@ -376,14 +376,14 @@ public void TestCopyPasteIntoNullList() var source = new MyClass { DoubleList = new List { 1, 2, 3 } }; var target = new MyClass { DoubleList = null }; var copiedText = Copy(source, source.DoubleList); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, false); Assert.Equal(3, target.DoubleList.Count); Assert.Equal(1.0, target.DoubleList[0]); Assert.Equal(2.0, target.DoubleList[1]); Assert.Equal(3.0, target.DoubleList[2]); target = new MyClass { DoubleList = null }; - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, true); Assert.Equal(3, target.DoubleList.Count); Assert.Equal(1.0, target.DoubleList[0]); Assert.Equal(2.0, target.DoubleList[1]); @@ -392,22 +392,22 @@ public void TestCopyPasteIntoNullList() source = new MyClass { DoubleList = new List { 1, 2, 3 } }; target = new MyClass { DoubleList = null }; copiedText = Copy(source, source.DoubleList[2]); - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, false); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, false); Assert.Single(target.DoubleList); Assert.Equal(3.0, target.DoubleList[0]); target = new MyClass { DoubleList = null }; - Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, true); + Paste(target, copiedText, typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, true); Assert.Single(target.DoubleList); Assert.Equal(3.0, target.DoubleList[0]); target = new MyClass { DoubleList = null }; - Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, false); + Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, false); Assert.Single(target.DoubleList); Assert.Equal(2.0, target.DoubleList[0]); target = new MyClass { DoubleList = null }; - Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], Index.Empty, true); + Paste(target, "2", typeof(List), typeof(List), x => x[nameof(MyClass.DoubleList)], NodeIndex.Empty, true); Assert.Single(target.DoubleList); Assert.Equal(2.0, target.DoubleList[0]); } @@ -418,7 +418,7 @@ public void TestCopyPasteDictionaryDouble() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ddd", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], NodeIndex.Empty, false); Assert.Equal(6, target.DoubleDictionary.Count); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); Assert.Equal(2.0, target.DoubleDictionary["bbb"]); @@ -434,7 +434,7 @@ public void TestCopyReplaceDictionaryDouble() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ddd", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], Index.Empty, true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], NodeIndex.Empty, true); Assert.Equal(3, target.DoubleDictionary.Count); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); Assert.Equal(2.0, target.DoubleDictionary["bbb"]); @@ -447,7 +447,7 @@ public void TestCopyPasteDictionaryStruct() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ddd", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)], NodeIndex.Empty, false); Assert.Equal(6, target.StructDictionary.Count); Assert.Equal(1.0, target.StructDictionary["aaa"].Integer); Assert.Equal(2.0, target.StructDictionary["bbb"].Integer); @@ -463,7 +463,7 @@ public void TestCopyReplaceDictionaryStruct() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ddd", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)], Index.Empty, true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)], NodeIndex.Empty, true); Assert.Equal(3, target.StructDictionary.Count); Assert.Equal(1.0, target.StructDictionary["aaa"].Integer); Assert.Equal(2.0, target.StructDictionary["bbb"].Integer); @@ -476,7 +476,7 @@ public void TestCopyPasteDictionaryClass() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ddd", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)], NodeIndex.Empty, false); Assert.Equal(6, target.SubDictionary.Count); Assert.Equal(1.0, target.SubDictionary["aaa"].Float); Assert.Equal(2.0, target.SubDictionary["bbb"].Float); @@ -492,7 +492,7 @@ public void TestCopyReplaceDictionaryClass() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ddd", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)], Index.Empty, true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)], NodeIndex.Empty, true); Assert.Equal(3, target.SubDictionary.Count); Assert.Equal(1.0, target.SubDictionary["aaa"].Float); Assert.Equal(2.0, target.SubDictionary["bbb"].Float); @@ -505,7 +505,7 @@ public void TestCopyPasteDictionaryDoubleIntoItem() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ddd", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(6, target.DoubleDictionary.Count); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); Assert.Equal(2.0, target.DoubleDictionary["bbb"]); @@ -521,7 +521,7 @@ public void TestCopyReplaceDictionaryDoubleIntoItem() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ddd", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new Index("eee"), true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new NodeIndex("eee"), true); Assert.Equal(5, target.DoubleDictionary.Count); Assert.Equal(4.0, target.DoubleDictionary["ddd"]); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); @@ -536,7 +536,7 @@ public void TestCopyPasteDictionaryStructIntoItem() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ddd", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(6, target.StructDictionary.Count); Assert.Equal(1.0, target.StructDictionary["aaa"].Integer); Assert.Equal(2.0, target.StructDictionary["bbb"].Integer); @@ -552,7 +552,7 @@ public void TestCopyReplaceDictionaryStructIntoItem() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ddd", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new Index("eee"), true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new NodeIndex("eee"), true); Assert.Equal(5, target.StructDictionary.Count); Assert.Equal(4.0, target.StructDictionary["ddd"].Integer); Assert.Equal(1.0, target.StructDictionary["aaa"].Integer); @@ -567,7 +567,7 @@ public void TestCopyPasteDictionaryClassIntoItem() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ddd", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(6, target.SubDictionary.Count); Assert.Equal(1.0, target.SubDictionary["aaa"].Float); Assert.Equal(2.0, target.SubDictionary["bbb"].Float); @@ -583,7 +583,7 @@ public void TestCopyReplaceDictionaryClassIntoItem() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ddd", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new Index("eee"), true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new NodeIndex("eee"), true); Assert.Equal(5, target.SubDictionary.Count); Assert.Equal(4.0, target.SubDictionary["ddd"].Float); Assert.Equal(1.0, target.SubDictionary["aaa"].Float); @@ -598,7 +598,7 @@ public void TestCopyPasteDoubleIntoDictionary() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ddd", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(4, target.DoubleDictionary.Count); Assert.Equal(3.0, target.DoubleDictionary["ccc"]); Assert.Equal(4.0, target.DoubleDictionary["ddd"]); @@ -612,7 +612,7 @@ public void TestCopyReplaceDoubleIntoDictionary() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ddd", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new Index("eee"), true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new NodeIndex("eee"), true); Assert.Equal(3, target.DoubleDictionary.Count); Assert.Equal(4.0, target.DoubleDictionary["ddd"]); Assert.Equal(3.0, target.DoubleDictionary["ccc"]); @@ -625,7 +625,7 @@ public void TestCopyPasteStructIntoDictionary() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ddd", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(4, target.StructDictionary.Count); Assert.Equal(3.0, target.StructDictionary["ccc"].Integer); Assert.Equal(4.0, target.StructDictionary["ddd"].Integer); @@ -639,7 +639,7 @@ public void TestCopyReplaceStructIntoDictionary() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ddd", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new Index("eee"), true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new NodeIndex("eee"), true); Assert.Equal(3, target.StructDictionary.Count); Assert.Equal(4.0, target.StructDictionary["ddd"].Integer); Assert.Equal(3.0, target.StructDictionary["ccc"].Integer); @@ -652,7 +652,7 @@ public void TestCopyPasteClassIntoDictionary() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ddd", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(4, target.SubDictionary.Count); Assert.Equal(3.0, target.SubDictionary["ccc"].Float); Assert.Equal(4.0, target.SubDictionary["ddd"].Float); @@ -666,7 +666,7 @@ public void TestCopyReplaceClassIntoDictionary() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ddd", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new Index("eee"), true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new NodeIndex("eee"), true); Assert.Equal(3, target.SubDictionary.Count); Assert.Equal(4.0, target.SubDictionary["ddd"].Float); Assert.Equal(3.0, target.SubDictionary["ccc"].Float); @@ -679,7 +679,7 @@ public void TestCopyPasteDictionaryDoubleWithCollision() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ccc", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], NodeIndex.Empty, false); Assert.Equal(5, target.DoubleDictionary.Count); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); Assert.Equal(2.0, target.DoubleDictionary["bbb"]); @@ -694,7 +694,7 @@ public void TestCopyPasteDictionaryStructWithCollision() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ccc", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)], NodeIndex.Empty, false); Assert.Equal(5, target.StructDictionary.Count); Assert.Equal(1.0, target.StructDictionary["aaa"].Integer); Assert.Equal(2.0, target.StructDictionary["bbb"].Integer); @@ -709,7 +709,7 @@ public void TestCopyPasteDictionaryClassWithCollision() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ccc", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)], NodeIndex.Empty, false); Assert.Equal(5, target.SubDictionary.Count); Assert.Equal(1.0, target.SubDictionary["aaa"].Float); Assert.Equal(2.0, target.SubDictionary["bbb"].Float); @@ -724,7 +724,7 @@ public void TestCopyPasteDictionaryDoubleIntoItemWithCollision() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ccc", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(5, target.DoubleDictionary.Count); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); Assert.Equal(2.0, target.DoubleDictionary["bbb"]); @@ -739,7 +739,7 @@ public void TestCopyPasteDictionaryStructIntoItemWithCollision() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ccc", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(5, target.StructDictionary.Count); Assert.Equal(1.0, target.StructDictionary["aaa"].Integer); Assert.Equal(2.0, target.StructDictionary["bbb"].Integer); @@ -754,7 +754,7 @@ public void TestCopyPasteDictionaryClassIntoItemWithCollision() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ccc", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(5, target.SubDictionary.Count); Assert.Equal(1.0, target.SubDictionary["aaa"].Float); Assert.Equal(2.0, target.SubDictionary["bbb"].Float); @@ -769,7 +769,7 @@ public void TestCopyPasteDoubleIntoDictionaryWithCollision() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = new Dictionary { { "ccc", 4 }, { "eee", 5 }, { "fff", 6 } } }; var copiedText = Copy(source, source.DoubleDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(3, target.DoubleDictionary.Count); Assert.Equal(3.0, target.DoubleDictionary["ccc"]); Assert.Equal(5.0, target.DoubleDictionary["eee"]); @@ -782,7 +782,7 @@ public void TestCopyPasteStructIntoDictionaryWithCollision() var source = new MyClass { StructDictionary = new Dictionary { { "aaa", new MyStruct { Integer = 1 } }, { "bbb", new MyStruct { Integer = 2 } }, { "ccc", new MyStruct { Integer = 3 } } } }; var target = new MyClass { StructDictionary = new Dictionary { { "ccc", new MyStruct { Integer = 4 } }, { "eee", new MyStruct { Integer = 5 } }, { "fff", new MyStruct { Integer = 6 } } } }; var copiedText = Copy(source, source.StructDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.StructDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(3, target.StructDictionary.Count); Assert.Equal(3.0, target.StructDictionary["ccc"].Integer); Assert.Equal(5.0, target.StructDictionary["eee"].Integer); @@ -795,7 +795,7 @@ public void TestCopyPasteClassIntoDictionaryWithCollision() var source = new MyClass { SubDictionary = new Dictionary { { "aaa", new MyClass { Float = 1 } }, { "bbb", new MyClass { Float = 2 } }, { "ccc", new MyClass { Float = 3 } } } }; var target = new MyClass { SubDictionary = new Dictionary { { "ccc", new MyClass { Float = 4 } }, { "eee", new MyClass { Float = 5 } }, { "fff", new MyClass { Float = 6 } } } }; var copiedText = Copy(source, source.SubDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new Index("eee"), false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.SubDictionary)].Target, new NodeIndex("eee"), false); Assert.Equal(3, target.SubDictionary.Count); Assert.Equal(3.0, target.SubDictionary["ccc"].Float); Assert.Equal(5.0, target.SubDictionary["eee"].Float); @@ -808,14 +808,14 @@ public void TestCopyPasteIntoNullDictionary() var source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; var target = new MyClass { DoubleDictionary = null }; var copiedText = Copy(source, source.DoubleDictionary); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], NodeIndex.Empty, false); Assert.Equal(3, target.DoubleDictionary.Count); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); Assert.Equal(2.0, target.DoubleDictionary["bbb"]); Assert.Equal(3.0, target.DoubleDictionary["ccc"]); target = new MyClass { DoubleDictionary = null }; - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], Index.Empty, true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], NodeIndex.Empty, true); Assert.Equal(3, target.DoubleDictionary.Count); Assert.Equal(1.0, target.DoubleDictionary["aaa"]); Assert.Equal(2.0, target.DoubleDictionary["bbb"]); @@ -824,12 +824,12 @@ public void TestCopyPasteIntoNullDictionary() source = new MyClass { DoubleDictionary = new Dictionary { { "aaa", 1 }, { "bbb", 2 }, { "ccc", 3 } } }; target = new MyClass { DoubleDictionary = null }; copiedText = Copy(source, source.DoubleDictionary.Single(x => x.Key == "ccc")); - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], Index.Empty, false); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], NodeIndex.Empty, false); Assert.Single(target.DoubleDictionary); Assert.Equal(3.0, target.DoubleDictionary["ccc"]); target = new MyClass { DoubleDictionary = null }; - Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], Index.Empty, true); + Paste(target, copiedText, typeof(Dictionary), typeof(Dictionary), x => x[nameof(MyClass.DoubleDictionary)], NodeIndex.Empty, true); Assert.Single(target.DoubleDictionary); Assert.Equal(3.0, target.DoubleDictionary["ccc"]); } @@ -873,7 +873,7 @@ private string Copy([NotNull] Asset asset, object assetValue) return copiedText; } - private void Paste([NotNull] Asset asset, string copiedText, Type deserializedType, [NotNull] Type expectedType, [NotNull] Func targetNodeResolver, Index index, bool replace) + private void Paste([NotNull] Asset asset, string copiedText, Type deserializedType, [NotNull] Type expectedType, [NotNull] Func targetNodeResolver, NodeIndex index, bool replace) { var propertyGraph = ConstructPropertyGraph(asset); Assert.True(service.CanPaste(copiedText, asset.GetType(), expectedType)); diff --git a/sources/editor/Xenko.Core.Assets.Editor.Tests/Xenko.Core.Assets.Editor.Tests.csproj b/sources/editor/Xenko.Core.Assets.Editor.Tests/Xenko.Core.Assets.Editor.Tests.csproj index 1666a096c3..b16fe8262d 100644 --- a/sources/editor/Xenko.Core.Assets.Editor.Tests/Xenko.Core.Assets.Editor.Tests.csproj +++ b/sources/editor/Xenko.Core.Assets.Editor.Tests/Xenko.Core.Assets.Editor.Tests.csproj @@ -1,6 +1,6 @@ - + true $(TargetFrameworkTool) @@ -35,5 +35,5 @@ - + diff --git a/sources/editor/Xenko.Core.Assets.Editor.Tests/packages.config b/sources/editor/Xenko.Core.Assets.Editor.Tests/packages.config index e03e889eac..b8f5797eed 100644 --- a/sources/editor/Xenko.Core.Assets.Editor.Tests/packages.config +++ b/sources/editor/Xenko.Core.Assets.Editor.Tests/packages.config @@ -1,4 +1,4 @@  - + diff --git a/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/AssetReferenceReplacementViewModel.cs b/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/AssetReferenceReplacementViewModel.cs index 5f3369f199..16a0eec590 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/AssetReferenceReplacementViewModel.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/AssetReferenceReplacementViewModel.cs @@ -11,9 +11,9 @@ namespace Xenko.Core.Assets.Editor.Components.FixAssetReferences public class AssetReferenceReplacementViewModel : ReferenceReplacementViewModel { private readonly IGraphNode node; - private readonly Index index; + private readonly NodeIndex index; - public AssetReferenceReplacementViewModel(FixAssetReferencesViewModel fixReferences, AssetViewModel objectToFix, AssetViewModel referencer, object referencedMember, IGraphNode node, Index index) + public AssetReferenceReplacementViewModel(FixAssetReferencesViewModel fixReferences, AssetViewModel objectToFix, AssetViewModel referencer, object referencedMember, IGraphNode node, NodeIndex index) : base(fixReferences, objectToFix, referencer, referencedMember) { this.node = node; diff --git a/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/FixAssetReferencesViewModel.cs b/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/FixAssetReferencesViewModel.cs index 2d1b1e5143..c653f182f9 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/FixAssetReferencesViewModel.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/FixAssetReferencesViewModel.cs @@ -79,7 +79,7 @@ protected override IEnumerable> Ge if (target == CurrentObjectToReplace) { // If so, prepare a replacement for it. - var viewModel = new AssetReferenceReplacementViewModel(this, CurrentObjectToReplace, referencer, referencedMember, memberNode, Index.Empty); + var viewModel = new AssetReferenceReplacementViewModel(this, CurrentObjectToReplace, referencer, referencedMember, memberNode, NodeIndex.Empty); result.Add(viewModel); } } diff --git a/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/Views/FixAssetReferencesWindow.xaml b/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/Views/FixAssetReferencesWindow.xaml index 610f2b54af..476d5d5c76 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/Views/FixAssetReferencesWindow.xaml +++ b/sources/editor/Xenko.Core.Assets.Editor/Components/FixAssetReferences/Views/FixAssetReferencesWindow.xaml @@ -1,13 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/AssetViewUserControl.xaml.cs b/sources/editor/Xenko.Core.Assets.Editor/View/AssetViewUserControl.xaml.cs index 8e11238e97..130c2c2f0d 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/AssetViewUserControl.xaml.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/AssetViewUserControl.xaml.cs @@ -5,13 +5,12 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Input; - +using Xceed.Wpf.Toolkit.Core; using Xenko.Core.Assets.Editor.View.Controls; using Xenko.Core.Assets.Editor.ViewModel; using Xenko.Core.Presentation.Collections; using Xenko.Core.Presentation.Extensions; -using Xceed.Wpf.DataGrid; namespace Xenko.Core.Assets.Editor.View { @@ -126,8 +125,6 @@ public AssetViewUserControl() { InitializeComponent(); - Loaded += (s, e) => AddHandler(Row.EditBeginningEvent, (CancelRoutedEventHandler)CanBeginEditEvent); - Unloaded += (s, e) => RemoveHandler(Row.EditBeginningEvent, (CancelRoutedEventHandler)CanBeginEditEvent); } /// @@ -215,7 +212,7 @@ public void BeginEdit() var listBox = AssetViewPresenter.FindVisualChildOfType(); listBox?.BeginEdit(); - var gridView = AssetViewPresenter.FindVisualChildOfType(); + var gridView = AssetViewPresenter.FindVisualChildOfType(); gridView?.BeginEdit(); } @@ -231,7 +228,7 @@ private void ZoomIn() } } - var gridView = AssetViewPresenter.FindVisualChildOfType(); + var gridView = AssetViewPresenter.FindVisualChildOfType(); if (gridView != null) { GridThumbnailSize += ThumbnailZoomIncrement; @@ -254,7 +251,7 @@ private void ZoomOut() } } - var gridView = AssetViewPresenter.FindVisualChildOfType(); + var gridView = AssetViewPresenter.FindVisualChildOfType(); if (gridView != null) { GridThumbnailSize -= ThumbnailZoomIncrement; diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/BringSelectionToViewBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/BringSelectionToViewBehavior.cs index b797238d77..61663ff2ac 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/BringSelectionToViewBehavior.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/BringSelectionToViewBehavior.cs @@ -2,7 +2,7 @@ // Distributed under the MIT license. See the LICENSE.md file in the project root for more information. using System.Linq; using System.Windows.Controls; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Assets.Editor.View.Controls; using Xenko.Core.Presentation.Controls; using Xenko.Core.Presentation.Extensions; diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropAdornerManager.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropAdornerManager.cs index e88e822619..16895dcf32 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropAdornerManager.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropAdornerManager.cs @@ -6,7 +6,7 @@ using System.Reflection; using System.Windows; using System.Windows.Documents; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using System.Windows.Media; using Xenko.Core.Annotations; using Xenko.Core.Extensions; @@ -42,7 +42,7 @@ static DragDropAdornerManager() // There is no public way to get the BehaviorCollection only if it exists, without creating it if it does not. var behaviorsPropertyFieldInfo = typeof(Interaction).GetField("BehaviorsProperty", BindingFlags.NonPublic | BindingFlags.Static); if (behaviorsPropertyFieldInfo == null) - throw new MissingFieldException("The BehaviorsProperty static field is missing on the class System.Windows.Interactivity. This version of the assembly is not supported."); + throw new MissingFieldException("The BehaviorsProperty static field is missing on the class Microsoft.Xaml.Behaviors. This version of the assembly is not supported."); BehaviorsProperty = (DependencyProperty)behaviorsPropertyFieldInfo.GetValue(null); } diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropBehavior.cs index 9eada83460..f1412d6a13 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropBehavior.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/DragDropBehavior.cs @@ -7,7 +7,7 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Input; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using System.Windows.Media; using Xenko.Core.Assets.Editor.ViewModel; using Xenko.Core.Annotations; diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/XceedDataGridDragDropBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/XceedDataGridDragDropBehavior.cs deleted file mode 100644 index 6d58dc1e52..0000000000 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/DragDrop/XceedDataGridDragDropBehavior.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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.Collections.Generic; -using System.Linq; -using Xenko.Core.Extensions; -using Xceed.Wpf.DataGrid; - -namespace Xenko.Core.Assets.Editor.View.Behaviors -{ - public class XceedDataGridDragDropBehavior : DragDropBehavior - { - protected override IEnumerable GetItemsToDrag(DataRow container) - { - if (container != null) - { - var sourceItem = container.DataContext; - return AssociatedObject.SelectedItems.Contains(sourceItem) ? AssociatedObject.SelectedItems.Cast() : sourceItem.ToEnumerable(); - } - return Enumerable.Empty(); - } - } -} diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ListBoxHighlightedItemBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ListBoxHighlightedItemBehavior.cs index a6aefaa2d1..0efd26a573 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ListBoxHighlightedItemBehavior.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ListBoxHighlightedItemBehavior.cs @@ -6,7 +6,7 @@ using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Presentation.Extensions; namespace Xenko.Core.Assets.Editor.View.Behaviors diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/PropertyViewAutoExpandNodesBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/PropertyViewAutoExpandNodesBehavior.cs index 47f3dfa729..bd74af4457 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/PropertyViewAutoExpandNodesBehavior.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/PropertyViewAutoExpandNodesBehavior.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Assets.Editor.Quantum.NodePresenters.Keys; using Xenko.Core; using Xenko.Core.Extensions; @@ -21,14 +21,15 @@ namespace Xenko.Core.Assets.Editor.View.Behaviors public class PropertyViewAutoExpandNodesBehavior : Behavior { private readonly List expandedItems = new List(); - private readonly HashSet expandedPropertyPaths = new HashSet(); - private readonly HashSet collapsedPropertyPaths = new HashSet(); + // These are static so that we remember their state for the entire session. + private static readonly HashSet expandedPropertyPaths = new HashSet(); + private static readonly HashSet collapsedPropertyPaths = new HashSet(); /// /// Identifies the dependency property. /// public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(GraphViewModel), typeof(PropertyViewAutoExpandNodesBehavior), new PropertyMetadata(null, OnViewModelChanged)); - + /// /// Gets or sets the associated to this behavior. /// @@ -166,27 +167,37 @@ private void ExpandSingleProperties(PropertyViewItem item) item.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, false); break; case ExpandRule.Once: - // Expand nodes that have this rule only if they have never been collapsed previously - var propertyPath = GetNode(item).DisplayPath; - if (!collapsedPropertyPaths.Contains(propertyPath)) { - item.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, true); - break; + // Expand nodes that have this rule only if they have never been collapsed previously + var propertyPath = GetNode(item).DisplayPath; + if (!collapsedPropertyPaths.Contains(propertyPath)) + { + item.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, true); + break; + } } goto default; default: - // If the node is an only child, let's expand it - if (node.Parent.Children.Count == 1) - { - item.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, true); - // And keep a track of it, in case it has some siblings incoming - expandedItems.Add(item); - } - else { - // If one of its siblings has been expanded because it was an only child at the time it was created, let's unexpand it. - // This will prevent to always have the first item expanded since the property items are generated as soon as a child is added. - expandedItems.Where(x => GetNode(x).Parent == node.Parent).ForEach(x => x.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, false)); + // If the node was saved as expanded, persist this behavior + var propertyPath = GetNode(item).DisplayPath; + if (expandedPropertyPaths.Contains(propertyPath)) + { + item.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, true); + } + else if (node.Parent.Children.Count == 1) + { + // If the node is an only child, let's expand it + item.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, true); + // And keep a track of it, in case it has some siblings incoming + expandedItems.Add(item); + } + else + { + // If one of its siblings has been expanded because it was an only child at the time it was created, let's unexpand it. + // This will prevent to always have the first item expanded since the property items are generated as soon as a child is added. + expandedItems.Where(x => GetNode(x).Parent == node.Parent).ForEach(x => x.SetCurrentValue(ExpandableItemsControl.IsExpandedProperty, false)); + } } break; } diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/TreeViewAutoExpandBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/TreeViewAutoExpandBehavior.cs index f64a57f225..0853b52a54 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/TreeViewAutoExpandBehavior.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/TreeViewAutoExpandBehavior.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Assets.Editor.ViewModel; using Xenko.Core.Extensions; using Xenko.Core.Presentation.Controls; diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ValidateTextBoxAfterSlidingBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ValidateTextBoxAfterSlidingBehavior.cs index 4e530e610b..5d41fba29a 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ValidateTextBoxAfterSlidingBehavior.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/ValidateTextBoxAfterSlidingBehavior.cs @@ -5,7 +5,7 @@ using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; -using System.Windows.Interactivity; +using Microsoft.Xaml.Behaviors; using Xenko.Core.Presentation.Extensions; diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridBindableSelectedItemsBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridBindableSelectedItemsBehavior.cs deleted file mode 100644 index 49344c751a..0000000000 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridBindableSelectedItemsBehavior.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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 Xenko.Core.Presentation.Behaviors; - -using Xceed.Wpf.DataGrid; - -namespace Xenko.Core.Assets.Editor.View.Behaviors -{ - public class XceedDataGridBindableSelectedItemsBehavior : BindableSelectedItemsBehavior - { - protected override void OnAttached() - { - SelectedItemsInAssociatedObject = AssociatedObject.SelectedItems; - AssociatedObject.SelectionChanged += XceedDataGridSelectionChanged; - base.OnAttached(); - } - - protected override void OnDetaching() - { - base.OnDetaching(); - AssociatedObject.SelectionChanged -= XceedDataGridSelectionChanged; - SelectedItemsInAssociatedObject = AssociatedObject.SelectedItems; - } - - protected override void ScrollIntoView(object dataItem) - { - AssociatedObject.BringItemIntoView(dataItem); - } - - private void XceedDataGridSelectionChanged(object sender, DataGridSelectionChangedEventArgs e) - { - foreach (var selectionInfo in e.SelectionInfos) - { - ControlSelectionChanged(selectionInfo.AddedItems, selectionInfo.RemovedItems); - } - } - } -} diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridResizableColumnsBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridResizableColumnsBehavior.cs deleted file mode 100644 index 625e8fb398..0000000000 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridResizableColumnsBehavior.cs +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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.Linq; -using System.Windows; -using System.Windows.Controls; - -using Xenko.Core.Extensions; -using Xenko.Core.Presentation.Behaviors; -using Xenko.Core.Presentation.Extensions; - -using Xceed.Wpf.DataGrid; - -namespace Xenko.Core.Assets.Editor.View.Behaviors -{ - /// - /// This behavior allows to have resizable columns in a while being able to define default widths using star notation. - /// It also prevent the columns do be resized below the viewport width - /// - public class XceedDataGridResizableColumnsBehavior : DeferredBehaviorBase - { - private ScrollContentPresenter scrollContentPresenter; - private bool updatingColumns; - private bool itemsSourceChanged; - private bool initialized; - - protected override void OnAttachedAndLoaded() - { - base.OnAttachedAndLoaded(); - - AssociatedObject.Columns.ForEach(x => x.Width = x.ActualWidth); - - scrollContentPresenter = AssociatedObject.FindVisualChildOfType(); - - // This occurs when closing a session - it is harmless to ignore it in this case - if (scrollContentPresenter == null) - return; - - AssociatedObject.ItemsSourceChangeCompleted += ItemsSourceChanged; - AssociatedObject.LayoutUpdated += LayoutUpdated; - AssociatedObject.SizeChanged += SizeChanged; - itemsSourceChanged = true; - // Prevent the selection of the first item - AssociatedObject.SelectedItems.Clear(); - initialized = true; - } - - protected override void OnDetachingAndUnloaded() - { - if (initialized) - { - var columnManagerRow = AssociatedObject.FindVisualChildOfType(); - if (columnManagerRow != null) - { - var cells = columnManagerRow.FindVisualChildrenOfType(); - cells.ForEach(x => x.SizeChanged -= ColumnSizeChanged); - AssociatedObject.SizeChanged -= SizeChanged; - } - } - base.OnDetachingAndUnloaded(); - } - - private void ItemsSourceChanged(object sender, EventArgs e) - { - // cells update is defered to after the next layout update - itemsSourceChanged = true; - // Prevent the selection of the first item - AssociatedObject.SelectedItems.Clear(); - } - - private void LayoutUpdated(object sender, EventArgs e) - { - if (itemsSourceChanged) - { - var columnManagerRow = AssociatedObject.FindVisualChildOfType(); - if (columnManagerRow != null) - { - var cells = columnManagerRow.FindVisualChildrenOfType(); - cells.ForEach(x => x.SizeChanged += ColumnSizeChanged); - } - itemsSourceChanged = false; - } - } - - private void ColumnSizeChanged(object sender, SizeChangedEventArgs e) - { - if (updatingColumns) - return; - - updatingColumns = true; - - double total = AssociatedObject.Columns.Sum(x => x.ActualWidth); - if (total < scrollContentPresenter.ActualWidth) - { - foreach (var column in AssociatedObject.Columns) - { - column.Width = column.ActualWidth * scrollContentPresenter.ActualWidth / total; - } - } - - updatingColumns = false; - } - - private void SizeChanged(object sender, SizeChangedEventArgs e) - { - double total = AssociatedObject.Columns.Sum(x => x.ActualWidth); - var offset = e.NewSize.Width - e.PreviousSize.Width; - foreach (var column in AssociatedObject.Columns) - { - column.Width = column.ActualWidth * (total + offset) / total; - } - } - } -} diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridThumbnailPrioritizationBehavior.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridThumbnailPrioritizationBehavior.cs deleted file mode 100644 index 1febb52b4a..0000000000 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Behaviors/XceedDataGridThumbnailPrioritizationBehavior.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Xenko contributors (https://xenko.com) 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.Linq; -using System.Windows.Controls; - -using Xenko.Core.Assets.Editor.ViewModel; -using Xenko.Core.Extensions; -using Xenko.Core.Presentation.Behaviors; -using Xenko.Core.Presentation.Extensions; - -using Xceed.Wpf.DataGrid; -using Xceed.Wpf.DataGrid.Views; - -namespace Xenko.Core.Assets.Editor.View.Behaviors -{ - public class XceedDataGridThumbnailPrioritizationBehavior : DeferredBehaviorBase - { - private TableViewScrollViewer scrollViewer; - - protected override void OnAttachedAndLoaded() - { - scrollViewer = AssociatedObject.FindVisualChildOfType(); - scrollViewer.ScrollChanged += ScrollChanged; - base.OnAttachedAndLoaded(); - } - - protected override void OnDetachingAndUnloaded() - { - scrollViewer.ScrollChanged -= ScrollChanged; - scrollViewer = null; - base.OnDetachingAndUnloaded(); - } - - private void ScrollChanged(object sender, ScrollChangedEventArgs e) - { - var session = AssociatedObject.ItemsSource?.Cast().FirstOrDefault()?.Session; - if (session == null) - return; - - var visibleAssets = AssociatedObject.FindVisualChildrenOfType().NotNull().Select(x => x.DataContext).OfType().Where(x => x != null); - session.Thumbnails.IncreaseThumbnailPriority(visibleAssets); - } - } -} diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/CommonResources.xaml b/sources/editor/Xenko.Core.Assets.Editor/View/CommonResources.xaml index 36141887c3..601dd02f08 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/CommonResources.xaml +++ b/sources/editor/Xenko.Core.Assets.Editor/View/CommonResources.xaml @@ -3,17 +3,31 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:xk="http://schemas.xenko.com/xaml/presentation" + xmlns:themes="clr-namespace:Xenko.Core.Presentation.Themes;assembly=Xenko.Core.Presentation" xmlns:view="clr-namespace:Xenko.Core.Assets.Editor.View" xmlns:viewModel="clr-namespace:Xenko.Core.Assets.Editor.ViewModel" xmlns:behaviors="clr-namespace:Xenko.Core.Assets.Editor.View.Behaviors" mc:Ignorable="d"> - - - + + + + + + + + diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/Controls/GridLogViewer.cs b/sources/editor/Xenko.Core.Assets.Editor/View/Controls/GridLogViewer.cs index a1e8c6a66c..05f0d8e4d4 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/Controls/GridLogViewer.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/Controls/GridLogViewer.cs @@ -2,6 +2,8 @@ // 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.Collections.ObjectModel; +using System.Collections.Specialized; using System.Linq; using System.Windows; using System.Windows.Controls; @@ -12,36 +14,20 @@ using Xenko.Core.Assets.Diagnostics; using Xenko.Core.Assets.Editor.ViewModel; using Xenko.Core.Diagnostics; - -using Xceed.Wpf.DataGrid; +using Xenko.Core.Presentation.Collections; namespace Xenko.Core.Assets.Editor.View.Controls { /// /// This control displays a collection of in a grid. /// - [TemplatePart(Name = "PART_LogGridView", Type = typeof(DataGridControl))] - [TemplatePart(Name = "PART_PreviousResult", Type = typeof(ButtonBase))] - [TemplatePart(Name = "PART_NextResult", Type = typeof(ButtonBase))] - [TemplatePart(Name = "PART_GridLogViewerCollectionSourceContainer", Type = typeof(FrameworkElement))] + [TemplatePart(Name = "PART_LogGridView", Type = typeof(DataGridEx))] public class GridLogViewer : Control { - private int currentResult; - /// /// The used to display log messages. /// - private DataGridControl logGridView; - - /// - /// The used to navigate to the previous search result. - /// - private ButtonBase previousResultButton; - - /// - /// The used to navigate to the next search result. - /// - private ButtonBase nextResultButton; + private DataGridEx logGridView; static GridLogViewer() { @@ -51,38 +37,13 @@ static GridLogViewer() /// /// Identifies the dependency property. /// - public static readonly DependencyProperty LogMessagesProperty = DependencyProperty.Register("LogMessages", typeof(ICollection), typeof(GridLogViewer), new PropertyMetadata(null)); + public static readonly DependencyProperty LogMessagesProperty = DependencyProperty.Register("LogMessages", typeof(ObservableList), typeof(GridLogViewer), new PropertyMetadata(null, LogMessagesPropertyChanged)); /// /// Identifies the dependency property. /// public static readonly DependencyProperty IsToolBarVisibleProperty = DependencyProperty.Register("IsToolBarVisible", typeof(bool), typeof(GridLogViewer), new PropertyMetadata(true)); - /// - /// Identifies the dependency property. - /// - public static readonly DependencyProperty CanFilterLogProperty = DependencyProperty.Register("CanFilterLog", typeof(bool), typeof(GridLogViewer), new PropertyMetadata(true)); - - /// - /// Identifies the dependency property. - /// - public static readonly DependencyProperty CanSearchLogProperty = DependencyProperty.Register("CanSearchLog", typeof(bool), typeof(GridLogViewer), new PropertyMetadata(true)); - - /// - /// Identifies the dependency property. - /// - public static readonly DependencyProperty SearchTokenProperty = DependencyProperty.Register("SearchToken", typeof(string), typeof(GridLogViewer), new PropertyMetadata("", SearchTokenChanged)); - - /// - /// Identifies the dependency property. - /// - public static readonly DependencyProperty SearchMatchCaseProperty = DependencyProperty.Register("SearchMatchCase", typeof(bool), typeof(GridLogViewer), new PropertyMetadata(false, SearchTokenChanged)); - - /// - /// Identifies the dependency property. - /// - public static readonly DependencyProperty SearchMatchWordProperty = DependencyProperty.Register("SearchMatchWord", typeof(bool), typeof(GridLogViewer), new PropertyMetadata(false, SearchTokenChanged)); - /// /// Identifies the dependency property. /// @@ -126,38 +87,31 @@ static GridLogViewer() /// /// Gets or sets the collection of to display. /// - public ICollection LogMessages { get { return (ICollection)GetValue(LogMessagesProperty); } set { SetValue(LogMessagesProperty, value); } } + public ObservableList LogMessages + { + get { return (ObservableList)GetValue(LogMessagesProperty); } + set + { + var prevList = LogMessages; + if (prevList != null) + { + prevList.CollectionChanged -= OnLogMessagesCollectionChanged; + } + SetValue(LogMessagesProperty, value); + if (value != null) + { + value.CollectionChanged += OnLogMessagesCollectionChanged; + } + } + } + + public ObservableList FilteredLogMessages { get; set; } = new ObservableList(); /// /// Gets or sets whether the tool bar should be visible. /// public bool IsToolBarVisible { get { return (bool)GetValue(IsToolBarVisibleProperty); } set { SetValue(IsToolBarVisibleProperty, value); } } - /// - /// Gets or sets whether it is possible to filter the log text. - /// - public bool CanFilterLog { get { return (bool)GetValue(CanFilterLogProperty); } set { SetValue(CanFilterLogProperty, value); } } - - /// - /// Gets or sets whether it is possible to search the log text. - /// - public bool CanSearchLog { get { return (bool)GetValue(CanSearchLogProperty); } set { SetValue(CanSearchLogProperty, value); } } - - /// - /// Gets or sets the current search token. - /// - public string SearchToken { get { return (string)GetValue(SearchTokenProperty); } set { SetValue(SearchTokenProperty, value); } } - - /// - /// Gets or sets whether the search result should match the case. - /// - public bool SearchMatchCase { get { return (bool)GetValue(SearchMatchCaseProperty); } set { SetValue(SearchMatchCaseProperty, value); } } - - /// - /// Gets or sets whether the search result should match whole words only. - /// - public bool SearchMatchWord { get { return (bool)GetValue(SearchMatchWordProperty); } set { SetValue(SearchMatchWordProperty, value); } } - /// /// Gets or sets whether the log viewer should display debug messages. /// @@ -203,35 +157,11 @@ public override void OnApplyTemplate() { base.OnApplyTemplate(); - logGridView = GetTemplateChild("PART_LogGridView") as DataGridControl; + logGridView = GetTemplateChild("PART_LogGridView") as DataGridEx; if (logGridView == null) throw new InvalidOperationException("A part named 'PART_LogGridView' must be present in the ControlTemplate, and must be of type 'DataGridControl'."); - previousResultButton = GetTemplateChild("PART_PreviousResult") as ButtonBase; - if (previousResultButton == null) - throw new InvalidOperationException("A part named 'PART_PreviousResult' must be present in the ControlTemplate, and must be of type 'ButtonBase'."); - - nextResultButton = GetTemplateChild("PART_NextResult") as ButtonBase; - if (nextResultButton == null) - throw new InvalidOperationException("A part named 'PART_NextResult' must be present in the ControlTemplate, and must be of type 'ButtonBase'."); - - var sourceContainer = GetTemplateChild("PART_GridLogViewerCollectionSourceContainer") as FrameworkElement; - if (sourceContainer == null) - throw new InvalidOperationException("A part named 'PART_GridLogViewerCollectionSourceContainer' must be present in the ControlTemplate, and must be of type 'FrameworkElement'."); - - var source = sourceContainer.Resources["GridLogViewerCollectionSource"]; - if (!(source is DataGridCollectionViewSourceBase)) - throw new InvalidOperationException("The 'PART_GridLogViewerCollectionSourceContainer' must be contain a 'GridLogViewerCollectionSource' resource that is the source of the collection view for the DataGridControl."); - - ((DataGridCollectionViewSourceBase)source).Filter += FilterHandler; logGridView.MouseDoubleClick += GridMouseDoubleClick; - previousResultButton.Click += PreviousResultClicked; - nextResultButton.Click += NextResultClicked; - } - - private void FilterHandler(object value, FilterEventArgs e) - { - e.Accepted = FilterMethod(e.Item); } private void GridMouseDoubleClick(object sender, MouseButtonEventArgs e) @@ -254,125 +184,45 @@ private void GridMouseDoubleClick(object sender, MouseButtonEventArgs e) if (asset != null) Session.ActiveAssetView.SelectAssetCommand.Execute(asset); } - } - private void SelectFirstOccurrence() - { - currentResult = 0; - var token = SearchToken; - if (!string.IsNullOrEmpty(token)) - { - var message = LogMessages.FirstOrDefault(Match); - logGridView.SelectedItem = message; - if (message != null) - { - logGridView.BringItemIntoView(message); - } - } } - private void SelectPreviousOccurrence() + private static void LogMessagesPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { - var token = SearchToken; - if (!string.IsNullOrEmpty(token)) - { - var message = FindPreviousMessage(); - logGridView.SelectedItem = message; - if (message != null) - { - logGridView.BringItemIntoView(message); - } - else - logGridView.SelectedItem = null; - } - } + var logViewer = (GridLogViewer)d; - private void SelectNextOccurrence() - { - var token = SearchToken; - if (!string.IsNullOrEmpty(token)) + if (e.OldValue is ObservableList prevList) { - var message = FindNextMessage(); - logGridView.SelectedItem = message; - if (message != null) - { - logGridView.BringItemIntoView(message); - } + prevList.CollectionChanged -= logViewer.OnLogMessagesCollectionChanged; } - } - - private ILogMessage FindPreviousMessage() - { - int count = 0; - ILogMessage lastMessage = null; - --currentResult; - foreach (var message in LogMessages.Where(Match)) + if (e.NewValue is ObservableList newList) { - lastMessage = message; - - if (count == currentResult) - { - return message; - } - ++count; + newList.CollectionChanged += logViewer.OnLogMessagesCollectionChanged; } - currentResult = Math.Max(0, count - 1); - return lastMessage; } - private ILogMessage FindNextMessage() + private void OnLogMessagesCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { - int count = 0; - ILogMessage firstMessage = null; - ++currentResult; - foreach (var message in LogMessages.Where(Match)) - { - if (firstMessage == null) - firstMessage = message; + if (logGridView == null || logGridView.ItemsSource == null || LogMessages == null) + return; - if (count == currentResult) - { - return message; - } - ++count; + if (e.Action == NotifyCollectionChangedAction.Reset) + { + FilteredLogMessages.Clear(); } - currentResult = 0; - return firstMessage; - } - - private bool Match(ILogMessage message) - { - if (Match(message.Text)) - return true; + else + { + // Only apply filter if there's any new displayable messages + bool refreshFilter = false; + if (e.OldItems != null) + refreshFilter = e.OldItems.OfType().Any(IsMessageVisible); - var assetMessage = message as AssetSerializableLogMessage; - return assetMessage != null && Match(assetMessage.AssetUrl.FullPath); - } + if (!refreshFilter && e.NewItems != null) + refreshFilter = e.NewItems.OfType().Any(IsMessageVisible); - private bool Match(string text) - { - var token = SearchToken; - var stringComparison = SearchMatchCase ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; - int index = text.IndexOf(token, stringComparison); - if (index < 0) - return false; - - if (SearchMatchWord && text.Length > 1) - { - if (index > 0) - { - char c = text[index - 1]; - if (char.IsLetterOrDigit(c)) - return false; - } - if (index + token.Length < text.Length) - { - char c = text[index + token.Length]; - if (char.IsLetterOrDigit(c)) - return false; - } + if (refreshFilter) + ApplyFilters(); } - return true; } private static void FilterPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) @@ -381,46 +231,23 @@ private static void FilterPropertyChanged(DependencyObject d, DependencyProperty logViewer.ApplyFilters(); } - /// - /// Raised when the property is changed. - /// - private static void SearchTokenChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - var logViewer = (GridLogViewer)d; - logViewer.SelectFirstOccurrence(); - } - - private void PreviousResultClicked(object sender, RoutedEventArgs e) - { - SelectPreviousOccurrence(); - } - - private void NextResultClicked(object sender, RoutedEventArgs e) - { - SelectNextOccurrence(); - } - private void ApplyFilters() { - if (logGridView == null || logGridView.ItemsSource == null) + if (logGridView == null || logGridView.ItemsSource == null || LogMessages == null) return; - if (!(logGridView.ItemsSource is DataGridCollectionView)) - throw new InvalidOperationException("The item source of the part 'PART_LogGridView' must be a 'DataGridCollectionView'."); - - var view = (DataGridCollectionView)logGridView.ItemsSource; - view.Refresh(); + FilteredLogMessages.Clear(); + FilteredLogMessages.AddRange(LogMessages.Where(IsMessageVisible)); } - private bool FilterMethod(object msg) + private bool IsMessageVisible(ILogMessage x) { - var message = (ILogMessage)msg; - return (ShowDebugMessages && message.Type == LogMessageType.Debug) - || (ShowVerboseMessages && message.Type == LogMessageType.Verbose) - || (ShowInfoMessages && message.Type == LogMessageType.Info) - || (ShowWarningMessages && message.Type == LogMessageType.Warning) - || (ShowErrorMessages && message.Type == LogMessageType.Error) - || (ShowFatalMessages && message.Type == LogMessageType.Fatal); + return x.IsDebug() && ShowDebugMessages + || x.IsError() && ShowErrorMessages + || x.IsFatal() && ShowFatalMessages + || x.IsInfo() && ShowInfoMessages + || x.IsVerbose() && ShowVerboseMessages + || x.IsWarning() && ShowWarningMessages; } } } diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/DataGridEx.cs b/sources/editor/Xenko.Core.Assets.Editor/View/DataGridEx.cs index 7b3f26f8f2..3ba586eb5e 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/DataGridEx.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/DataGridEx.cs @@ -11,10 +11,16 @@ using Xenko.Core.Extensions; using Xenko.Core.Presentation.Extensions; -using Xceed.Wpf.DataGrid; - namespace Xenko.Core.Assets.Editor.View { + /// + /// Xenko generic wpf data grid. Left empty for future development on a generic datagrid. + /// + public class DataGridEx : DataGrid + { + + } + /// /// This class wraps the class, making accessible all members that are required to make the feature work. /// is massively internal, making this feature impossible to implement by default on custom controls. @@ -95,14 +101,6 @@ public static string GetPrimaryTextPath(ItemsControl itemsControl) } - public static int FindMatchingPrefix(DataGridEx dataGridEx, string primaryTextPath, string prefix, string nextChar, int startItemIndex, bool lookForFallbackMatchToo, ref bool wasNewCharUsed) - { - var parameters = new object[] { dataGridEx, primaryTextPath, prefix, nextChar, startItemIndex, lookForFallbackMatchToo, wasNewCharUsed }; - var result = (int)FindMatchingPrefixMethod.Invoke(null, parameters); - wasNewCharUsed = (bool)parameters[6]; - return result; - } - public void AddCharToPrefix(string nextChar) { AddCharToPrefixMethod.Invoke(textSearch, new object[] { nextChar }); @@ -113,70 +111,4 @@ public void ResetTimeout() ResetTimeoutMethod.Invoke(textSearch, new object[] { }); } } - - /// - /// An implementation of DataGrid class that inherits from Xceed DataGridControl and add support for . - /// - public class DataGridEx : DataGridControl - { - /// - protected override void OnTextInput(TextCompositionEventArgs e) - { - base.OnTextInput(e); - if (string.IsNullOrEmpty(e.Text) || !IsTextSearchEnabled || !Equals(e.Source, this) && !Equals(ItemsControlFromItemContainer(e.Source as DependencyObject), this)) - return; - - var textSearch = TextSearchWrapper.EnsureInstance(this); - if (textSearch == null) - return; - - DoSearch(textSearch, e.Text); - e.Handled = true; - } - - /// - /// This method reimplements DoSearch from . - /// - /// - /// - private void DoSearch(TextSearchWrapper textSearch, string nextChar) - { - bool lookForFallbackMatchToo = false; - int startItemIndex = 0; - ItemCollection items = Items; - if (textSearch.IsActive) - startItemIndex = textSearch.MatchedItemIndex; - if (textSearch._charsEntered.Count > 0 && string.Compare(textSearch._charsEntered[textSearch._charsEntered.Count - 1], nextChar, true, TextSearchWrapper.GetCulture(this)) == 0) - lookForFallbackMatchToo = true; - string primaryTextPath = TextSearchWrapper.GetPrimaryTextPath(this); - bool wasNewCharUsed = false; - int matchingPrefix = TextSearchWrapper.FindMatchingPrefix(this, primaryTextPath, textSearch.Prefix, nextChar, startItemIndex, lookForFallbackMatchToo, ref wasNewCharUsed); - if (matchingPrefix != -1) - { - if (!textSearch.IsActive || matchingPrefix != startItemIndex) - { - if (SelectedItem != items[matchingPrefix]) - { - SelectedItem = items[matchingPrefix]; - BringItemIntoView(SelectedItem); - UpdateLayout(); - var container = GetContainerFromItem(SelectedItem) as DataRow; - if (container != null) - { - var cellToFocus = container.FindVisualChildrenOfType().FirstOrDefault(x => x.Focusable); - if (cellToFocus != null) - Keyboard.Focus(cellToFocus); - } - } - textSearch.MatchedItemIndex = matchingPrefix; - } - if (wasNewCharUsed) - textSearch.AddCharToPrefix(nextChar); - if (!textSearch.IsActive) - textSearch.IsActive = true; - } - if (textSearch.IsActive) - textSearch.ResetTimeout(); - } - } } diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml b/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml index d2b96e7abd..ebc48fe896 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml +++ b/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml @@ -60,7 +60,7 @@ - + diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml.cs b/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml.cs index cdddc89d9c..be7d117ff7 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml.cs +++ b/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugAssetNodesUserControl.xaml.cs @@ -74,11 +74,11 @@ public class DebugAssetChildNodeViewModel : DebugAssetNodeViewModel private readonly HashSet registeredNodes; public DebugAssetChildNodeViewModel(IViewModelServiceProvider serviceProvider, IGraphNode node, HashSet registeredNodes) - : this(serviceProvider, node, Index.Empty, null, LinkRoot, registeredNodes) + : this(serviceProvider, node, NodeIndex.Empty, null, LinkRoot, registeredNodes) { } - private DebugAssetChildNodeViewModel(IViewModelServiceProvider serviceProvider, IGraphNode node, Index index, ItemId? itemId, string linkFromParent, HashSet registeredNodes) + private DebugAssetChildNodeViewModel(IViewModelServiceProvider serviceProvider, IGraphNode node, NodeIndex index, ItemId? itemId, string linkFromParent, HashSet registeredNodes) : base(serviceProvider, node) { this.registeredNodes = registeredNodes; @@ -92,7 +92,7 @@ private DebugAssetChildNodeViewModel(IViewModelServiceProvider serviceProvider, Base = new DebugAssetBaseNodeViewModel(serviceProvider, baseNode); } - public Index Index { get; } + public NodeIndex Index { get; } public ItemId? ItemId { get; } @@ -114,7 +114,7 @@ protected List UpdateChildren() { foreach (var child in objNode.Members) { - list.Add(new DebugAssetChildNodeViewModel(ServiceProvider, child, Index.Empty, null, LinkChild, registeredNodes)); + list.Add(new DebugAssetChildNodeViewModel(ServiceProvider, child, NodeIndex.Empty, null, LinkChild, registeredNodes)); } } if (Node.IsReference) diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugWindow.xaml b/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugWindow.xaml index eff19bd487..556b7848f9 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugWindow.xaml +++ b/sources/editor/Xenko.Core.Assets.Editor/View/DebugTools/DebugWindow.xaml @@ -9,7 +9,7 @@ - + diff --git a/sources/editor/Xenko.Core.Assets.Editor/View/DefaultPropertyTemplateProviders.xaml b/sources/editor/Xenko.Core.Assets.Editor/View/DefaultPropertyTemplateProviders.xaml index cdc47ffc50..16010adb37 100644 --- a/sources/editor/Xenko.Core.Assets.Editor/View/DefaultPropertyTemplateProviders.xaml +++ b/sources/editor/Xenko.Core.Assets.Editor/View/DefaultPropertyTemplateProviders.xaml @@ -5,7 +5,7 @@ xmlns:view="clr-namespace:Xenko.Core.Presentation.Quantum.View;assembly=Xenko.Core.Presentation.Quantum" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:s="clr-namespace:System;assembly=mscorlib" - xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" + xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:math="clr-namespace:Xenko.Core.Mathematics;assembly=Xenko.Core.Mathematics" xmlns:pvdr="clr-namespace:Xenko.Core.Assets.Editor.View.TemplateProviders" xmlns:cvt="clr-namespace:Xenko.Core.Assets.Editor.View.ValueConverters" @@ -457,6 +457,112 @@ + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + +