diff --git a/.github/workflows/build-nightly.yml b/.github/workflows/build-nightly.yml index 208cd2f03..992ffe23f 100644 --- a/.github/workflows/build-nightly.yml +++ b/.github/workflows/build-nightly.yml @@ -16,29 +16,24 @@ jobs: - name: Build shell: cmd run: | - "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /p:Configuration=Release /p:Platform=x64 + "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /t:OfflineShaderCompiler /m /p:Configuration=Release /p:Platform=x64 + "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /t:rebuild /m /p:Configuration=Release /p:Platform=x64 - name: Move binaries shell: cmd run: | move BUILD\x64\Release\Editor_Windows\Editor_Windows.exe Editor\ - xcopy WickedEngine\dxcompiler.dll Editor\ - + xcopy WickedEngine\*.dll Editor\ + move BUILD\x64\Release\Tests\Tests.exe Tests\ - xcopy WickedEngine\dxcompiler.dll Tests\ + xcopy WickedEngine\*.dll Tests\ - name: Package Editor uses: actions/upload-artifact@v2 with: name: Editor (Windows x64) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Content/ README.md LICENSE.md other_licenses.txt @@ -56,13 +51,7 @@ jobs: with: name: Tests (Windows x64) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Content/ README.md LICENSE.md other_licenses.txt @@ -107,13 +96,8 @@ jobs: with: name: Editor (Ubuntu 20.04) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Editor/shaders/spirv/*.cso + Content/ README.md LICENSE.md other_licenses.txt @@ -130,13 +114,8 @@ jobs: with: name: Tests (Ubuntu 20.04) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Tests/shaders/spirv/*.cso + Content/ README.md LICENSE.md other_licenses.txt diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index a3a608bae..9e58b9e18 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -15,29 +15,24 @@ jobs: - name: Build shell: cmd run: | - "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /p:Configuration=Release /p:Platform=x64 + "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /t:OfflineShaderCompiler /m /p:Configuration=Release /p:Platform=x64 + "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /t:rebuild /m /p:Configuration=Release /p:Platform=x64 - name: Move binaries shell: cmd run: | move BUILD\x64\Release\Editor_Windows\Editor_Windows.exe Editor\ - xcopy WickedEngine\dxcompiler.dll Editor\ - + xcopy WickedEngine\*.dll Editor\ + move BUILD\x64\Release\Tests\Tests.exe Tests\ - xcopy WickedEngine\dxcompiler.dll Tests\ + xcopy WickedEngine\*.dll Tests\ - name: Package Editor uses: actions/upload-artifact@v2 with: name: Editor (Windows x64) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Content/ README.md LICENSE.md other_licenses.txt @@ -55,13 +50,7 @@ jobs: with: name: Tests (Windows x64) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Content/ README.md LICENSE.md other_licenses.txt @@ -106,11 +95,8 @@ jobs: with: name: Editor (Ubuntu 20.04) path: | - WickedEngine/shaders/ - images/ - models/ - scripts/ - Documentation/ + Editor/shaders/spirv/*.cso + Content/ README.md LICENSE.md other_licenses.txt @@ -127,11 +113,8 @@ jobs: with: name: Tests (Ubuntu 20.04) path: | - WickedEngine/shaders/ - images/ - models/ - scripts/ - Documentation/ + Tests/shaders/spirv/*.cso + Content/ README.md LICENSE.md other_licenses.txt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0d215364f..eb7f682a5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,29 +16,24 @@ jobs: - name: Build shell: cmd run: | - "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /p:Configuration=Release /p:Platform=x64 + "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /t:OfflineShaderCompiler /m /p:Configuration=Release /p:Platform=x64 + "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/MSBuild.exe" WickedEngine.sln /t:rebuild /m /p:Configuration=Release /p:Platform=x64 - name: Move binaries shell: cmd run: | move BUILD\x64\Release\Editor_Windows\Editor_Windows.exe Editor\ - xcopy WickedEngine\dxcompiler.dll Editor\ + xcopy WickedEngine\*.dll Editor\ move BUILD\x64\Release\Tests\Tests.exe Tests\ - xcopy WickedEngine\dxcompiler.dll Tests\ + xcopy WickedEngine\*.dll Tests\ - name: Package Editor uses: actions/upload-artifact@v2 with: name: Editor (Windows x64) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Content/ README.md LICENSE.md other_licenses.txt @@ -56,13 +51,7 @@ jobs: with: name: Tests (Windows x64) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Content/ README.md LICENSE.md other_licenses.txt @@ -107,13 +96,8 @@ jobs: with: name: Editor (Ubuntu 20.04) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Editor/shaders/spirv/*.cso + Content/ README.md LICENSE.md other_licenses.txt @@ -130,13 +114,8 @@ jobs: with: name: Tests (Ubuntu 20.04) path: | - WickedEngine/shaders/*.cso - WickedEngine/shaders/hlsl6/*.cso - WickedEngine/shaders/spirv/*.cso - images/ - models/ - scripts/ - Documentation/ + Tests/shaders/spirv/*.cso + Content/ README.md LICENSE.md other_licenses.txt diff --git a/.gitignore b/.gitignore index 1226cd4e1..13b9e99c1 100644 --- a/.gitignore +++ b/.gitignore @@ -193,7 +193,6 @@ ModelManifest.xml /WinRT/WickedEngine /WickedEngine/WinRT /WickedEngine/StoreTest -/WickedEngine/shaders/ /WickedEngine/Release_Store/WickedEngine.tlog /WickedEngine/Release_RT /WickedEngine/Debug_RT @@ -219,3 +218,7 @@ ModelManifest.xml /Editor/Generated Files/winrt /Template_UWP/Generated Files/winrt /WickedEngine/Generated Files/winrt + +*.cso +*.wishadermeta +wiShaderdump.h diff --git a/Content.vcxitems b/Content/Content.vcxitems similarity index 100% rename from Content.vcxitems rename to Content/Content.vcxitems diff --git a/Content.vcxitems.filters b/Content/Content.vcxitems.filters similarity index 100% rename from Content.vcxitems.filters rename to Content/Content.vcxitems.filters diff --git a/Documentation/ScriptingAPI-Documentation.md b/Content/Documentation/ScriptingAPI-Documentation.md similarity index 99% rename from Documentation/ScriptingAPI-Documentation.md rename to Content/Documentation/ScriptingAPI-Documentation.md index b397021b1..bcf82b33c 100644 --- a/Documentation/ScriptingAPI-Documentation.md +++ b/Content/Documentation/ScriptingAPI-Documentation.md @@ -1,3 +1,5 @@ + + # Wicked Engine Scripting API Documentation This is a reference and explanation of Lua scripting features in Wicked Engine. @@ -124,7 +126,7 @@ You can use the Renderer with the following functions, all of which are in the g - PutDecal(Decal decal) - PutEnvProbe(Vector pos) - ClearWorld(opt Scene scene) -- Clears the global scene and the associated renderer resources -- ReloadShaders(opt string path) +- ReloadShaders() ### Sprite Render images on the screen. diff --git a/Documentation/WickedEngine-Documentation.md b/Content/Documentation/WickedEngine-Documentation.md similarity index 90% rename from Documentation/WickedEngine-Documentation.md rename to Content/Documentation/WickedEngine-Documentation.md index 7a781b8e0..31bc11825 100644 --- a/Documentation/WickedEngine-Documentation.md +++ b/Content/Documentation/WickedEngine-Documentation.md @@ -1,3 +1,5 @@ + + # WickedEngine Documentation This is a reference for the C++ features of Wicked Engine @@ -65,11 +67,6 @@ This is a reference for the C++ features of Wicked Engine 4. [GraphicsDevice_Vulkan](#wigraphicsdevice_vulkan) 5. [Graphics Descriptors](#graphics-descriptors) 6. [Graphics Resources](#graphics-resources) - 7. [GPUMapping](#gpumapping) - 1. [ConstantBufferMapping](#constantbuffermapping) - 2. [ResourceMapping](#resourcemapping) - 3. [SamplerMapping](#samplermapping) - 4. [ShaderInterop](#shaderinterop) 2. [wiRenderer](#wirenderer) 1. [DrawScene](#drawscene) 2. [DrawScene_Transparent](#drawscene_transparent) @@ -159,13 +156,19 @@ This is a reference for the C++ features of Wicked Engine 1. [wiBacklog](#wibacklog) 2. [wiProfiler](#wiprofiler) 12. [Shaders](#shaders) + 1. [Interop](#interop) + 1. [ConstantBufferMapping](#constantbuffermapping) + 2. [ResourceMapping](#resourcemapping) + 3. [SamplerMapping](#samplermapping) + 4. [ShaderInterop](#shaderinterop) + 2. [Shader Compiler](#shader-compiler) ## High Level Interface The high level interface consists of classes that allow for extending the engine with custom functionality. This is usually done by overriding the classes. ### MainComponent -[[Header]](../WickedEngine/MainComponent.h) [[Cpp]](../WickedEngine/MainComponent.cpp) +[[Header]](../../WickedEngine/MainComponent.h) [[Cpp]](../../WickedEngine/MainComponent.cpp) This is the main runtime component that has the Run() function. It should be included in the application entry point while calling Run() in an infinite loop.
The MainComponent has many uses that the user is not necessarily interested in. The most important part is that it manages the RenderPaths. There can be one active RenderPath at a time, which will be updated and rendered to the screen every frame. However, because a RenderPath is a highly customizable class, there is no limitation what can be done within the RenderPath, for example supporting multiple concurrent RenderPaths if required. RenderPaths can be switched wit ha Fade out screen easily. Loading Screen can be activated as an active Renderpath and it will load and switch to an other RenderPath if desired. A RenderPath can be simply activated with the MainComponent::ActivatePath() function.
The MainComponent does the following every frame while it is running:
@@ -179,7 +182,7 @@ Calls Render for the active RenderPath and wakes up scripts that are waiting for Calls Compose for the active RenderPath ### RenderPath -[[Header]](../WickedEngine/RenderPath.h) +[[Header]](../../WickedEngine/RenderPath.h) This is an empty base class that can be activated with a MainComponent. It calls its Start(), Update(), FixedUpdate(), Render(), Compose(), Stop() functions as needed. Override this to perform custom gameplay or rendering logic.
The order in which the functions are executed every frame:
1. PreUpdate()
@@ -204,11 +207,11 @@ Start will always be called when a RenderPath is activated by the MainComponent Stop will be always called when the current RenderPath was the active one in MainComponent, but an other one was activated. ### RenderPath2D -[[Header]](../WickedEngine/RenderPath2D.h) [[Cpp]](../WickedEngine/RenderPath2D.cpp) +[[Header]](../../WickedEngine/RenderPath2D.h) [[Cpp]](../../WickedEngine/RenderPath2D.cpp) Capable of handling 2D rendering to offscreen buffer in Render() function, or just the screen in Compose() function. It has some functionality to render wiSprite and wiSpriteFont onto rendering layers and stenciling with 3D rendered scene. It has a [GUI](#gui) that is automatically updated and rendered if any elements have been added to it. ### RenderPath3D -[[Header]](../WickedEngine/RenderPath3D.h) [[Cpp]](../WickedEngine/RenderPath3D.cpp) +[[Header]](../../WickedEngine/RenderPath3D.h) [[Cpp]](../../WickedEngine/RenderPath3D.cpp) Base class for implementing 3D rendering paths. It also supports everything that the Renderpath2D does. The post process chain is also implemented here. This means that the order of the post processes and the resources that they use are defined here, but the individual post process rendering on a lower level is implemented in the `wiRenderer` as core engine features. Read more about post process implementation in the [wiRenderer section](#post-processing). @@ -224,17 +227,17 @@ These are running in more specific locations, depending on the render path. For The HDR and LDR post process chain are using the "ping-ponging" technique, which means when the first post process consumes texture1 and produces texture2, then the following post process will consume texture2 and produce texture1, until all post processes are rendered. ### RenderPath3D_PathTracing -[[Header]](../WickedEngine/RenderPath3D_PathTracing.h) [[Cpp]](../WickedEngine/RenderPath3D_PathTracing.cpp) +[[Header]](../../WickedEngine/RenderPath3D_PathTracing.h) [[Cpp]](../../WickedEngine/RenderPath3D_PathTracing.cpp) Implements a compute shader based path tracing solution. In a static scene, the rendering will converge to ground truth. When something changes in the scene (something moves, ot material changes, etc...), the convergence will be restarted from the beginning. The raytracing is implemented in [wiRenderer](#wirenderer) and multiple [shaders](#shaders). The ray tracing is available on any GPU that supports compute shaders. ### LoadingScreen -[[Header]](../WickedEngine/LoadingScreen.h) [[Cpp]](../WickedEngine/LoadingScreen.cpp) +[[Header]](../../WickedEngine/LoadingScreen.h) [[Cpp]](../../WickedEngine/LoadingScreen.cpp) Render path that can be easily used for loading screen. It is able to load content or RenderPath in the background and switch to an other RenderPath onceit finished. ## System You can find out more about the Entity-Component system and other engine-level systems under ENGINE/System filter in the solution. ### wiECS -[[Header]](../WickedEngine/wiECS.h) +[[Header]](../../WickedEngine/wiECS.h) #### ComponentManager This is the core entity-component relationship handler class. The purpose of this is to efficiently store, remove, add and sort components. Components can be any movable C++ structure. The best components are simple POD (plain old data) structures. @@ -243,7 +246,7 @@ This is the core entity-component relationship handler class. The purpose of thi Entity is a number, it can reference components through ComponentManager containers. An entity is always valid if it exists. It's not required that an entity has any components. An entity has a component, if there is a ComponentManager that has a component which is associated with the same entity. ### wiScene -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) The logical scene representation using the Entity-Component System - GetScene
Returns a global scene instance. The wiRenderer will use this scene instance to render the scene. The user can create multiple scenes as well, and merge those into the global scene so that those will be rendered as well. @@ -280,100 +283,100 @@ void SetDoubleSided(bool value) { if (value) { _flags |= DOUBLE_SIDED; } else { It is good practice to not implement constructors and destructors for components. Wherever possible, initialization of values in declaration should be preferred. If desctructors are defined, move contructors, etc. will also need to be defined for compatibility with the [ComponentManager](#componentmanager), so default constructors and destructors should be preferred. Member objects should be able to desctruct themselves implicitly. If pointers need to be stored within the component that manage object lifetime, std::unique_ptr or std::shared_ptr can be used, which will be destructed implicitly. #### NameComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) A string to identify an entity with a human readable name. #### LayerComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) A bitmask that can be used to filter entities. #### TransformComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) Orientation in 3D space, which supports various common operations on itself. #### PreviousFrameTransformComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) Absolute orientation in the previous frame (a matrix). #### HierarchyComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) An entity can be part of a transform hierarchy by having this component. Some other properties can also be inherieted, such as layer bitmask. If an entity has a parent, then it has a HierarchyComponent, otherwise it's not part of a hierarchy. #### MaterialComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) Several properties that define a material, like color, textures, etc... #### MeshComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) A mesh is an array of triangles. A mesh can have multiple parts, called MeshSubsets. Each MeshSubset has a material and it is using a range of triangles of the mesh. This can also have GPU resident data for rendering. #### ImpostorComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) Supports efficient rendering of the same mesh multiple times (but as an approximation, such as a billboard cutout). A mesh can be rendered as impostors for example when it is not important, but has a large number of copies. #### ObjectComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) An ObjectComponent is an instance of a mesh that has physical location in a 3D world. Multiple ObjectComponents can have the same mesh, and in this case the mesh will be rendered multiple times efficiently. It is expected that an entity that has ObjectComponent, also has TransformComponent and [AABB](#aabb) (axis aligned bounding box) component. #### RigidBodyPhysicsComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) Stores properties required for rigid body physics simulation and a handle that will be used by the physicsengine internally. #### SoftBodyPhysicsComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) Stores properties required for soft body physics simulation and a handle that will be used by the physicsengine internally. #### ArmatureComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) A skeleton used for skinning deformation of meshes. #### LightComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) A light in the scene that can shine in the darkness. It is expected that an entity that has LightComponent, also has TransformComponent and [AABB](#aabb) (axis aligned bounding box) component. #### CameraComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) #### EnvironmentProbeComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) It is expected that an entity that has EnvironmentProbeComponent, also has TransformComponent and [AABB](#aabb) (axis aligned bounding box) component. #### ForceFieldComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) #### DecalComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) It is expected that an entity that has DecalComponent, also has TransformComponent and [AABB](#aabb) (axis aligned bounding box) component. #### AnimationComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) #### WeatherComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) #### SoundComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) Holds a Sound and a SoundInstance, and it can be placed into the scene via a TransformComponent. It can have a 3D audio effect it has a TransformComponent. #### InverseKinematicsComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) If an entity has an `InverseKinematicComponent` (IK), and part of a transform hierarchy (has both [TransformComponent](#transformcomponent) and a [HierarchyComponent](#hierarchycomponent)), then it can be targetted to an other [ThransformComponent](#transformcomponent). The parent transforms will be computed in order to let the IK reach the target if possible. The parent transforms will be only rotated. For example, if a hand tries to reach for an object, the hand and shoulder will move accordingly to let the hand reach. The `chain_length` can be specified to let the IK system know how many parents should be computed. It can be greater than the real chain length, in that case there will be no more simulation steps than the length of hierarchy chain. The `iteration_count` can be specified to increase accuracy of the computation. If animations are also playing on the affected entities, the IK system will override the animations. #### SpringComponent -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) An entity can have a `SpringComponent` to achieve a "jiggle" or "soft" animation effect programatically. The effect will work automatically if the transform is changed by animation system for example, or in any other way. The parameter `stiffness` specifies how fast the transform tries to go back to its initial position. The parameter `damping` specifies how fast the transform comes to rest position. The `wind_affection` parameter specifies how much the global wind applies to the spring. #### Scene -[[Header]](../WickedEngine/wiScene.h) [[Cpp]](../WickedEngine/wiScene.cpp) +[[Header]](../../WickedEngine/wiScene.h) [[Cpp]](../../WickedEngine/wiScene.cpp) A scene is a collection of component arrays. The scene is updating all the components in an efficient manner using the [job system](#wijobsystem). It can be serialized and saved/loaded from disk efficiently. - Update(float deltatime)
This function runs all the requied systems to update all components contained within the Scene. ### wiJobSystem -[[Header]](../WickedEngine/wiJobSystem.h) [[Cpp]](../WickedEngine/wiJobSystem.cpp) +[[Header]](../../WickedEngine/wiJobSystem.h) [[Cpp]](../../WickedEngine/wiJobSystem.cpp) Manages the execution of concurrent tasks - context
Defines a single workload that can be synchronized. It is used to issue jobs from within jobs and properly wait for completion. A context can be simply created on the stack because it is a simple atomic counter. @@ -385,11 +388,11 @@ This will schedule a task for execution on multiple parallel threads for a given This function will block until all jobs have finished for a given workload. The current thread starts working on any work left to be finished. ### wiInitializer -[[Header]](../WickedEngine/wiInitializer.h) [[Cpp]](../WickedEngine/wiInitializer.cpp) +[[Header]](../../WickedEngine/wiInitializer.h) [[Cpp]](../../WickedEngine/wiInitializer.cpp) Initializes all engine systems either in a blocking or an asynchronous way. ### wiPlatform -[[Header]](../WickedEngine/wiPlatform.h) +[[Header]](../../WickedEngine/wiPlatform.h) You can get native platform specific handles here, such as window handle. - GetWindow
Returns the platform specific window handle @@ -397,7 +400,7 @@ Returns the platform specific window handle Returns true if the current window is the topmost one, false if it is not in focus ### wiEvent -[[Header]](../WickedEngine/wiEvent.h) +[[Header]](../../WickedEngine/wiEvent.h) The event system can be used to execute system-wide tasks. Any system can "subscribe" to events and any system can "fire" events. - Subscribe
The first parameter is the event ID. Core system events are negative numbers. The user can choose any positive number to create custom events. @@ -414,11 +417,11 @@ All events that are subsribed to the specified event id will run immediately at Everything related to rendering graphics will be discussed below ### wiGraphics -[[Header]](../WickedEngine/wiGraphics.h) +[[Header]](../../WickedEngine/wiGraphics.h) The graphics API wrappers #### GraphicsDevice -[[Header]](../WickedEngine/wiGraphicsDevice.h) [[Cpp]](../WickedEngine/wiGraphicsDevice.cpp) +[[Header]](../../WickedEngine/wiGraphicsDevice.h) [[Cpp]](../../WickedEngine/wiGraphicsDevice.cpp) This is the interface for the graphics API abstraction. It is higher level than a graphics API, but these are the lowest level of rendering commands the engine offers. ##### Debug device @@ -681,58 +684,28 @@ To read more about variable rate shading, refer to the [DirectX specifications.] #### GraphicsDevice_DX11 -[[Header]](../WickedEngine/wiGraphicsDevice_DX11.h) [[Cpp]](../WickedEngine/wiGraphicsDevice_DX11.cpp) +[[Header]](../../WickedEngine/wiGraphicsDevice_DX11.h) [[Cpp]](../../WickedEngine/wiGraphicsDevice_DX11.cpp) DirectX11 implementation for rendering interface #### GraphicsDevice_DX12 -[[Header]](../WickedEngine/wiGraphicsDevice_DX12.h) [[Cpp]](../WickedEngine/wiGraphicsDevice_DX12.cpp) +[[Header]](../../WickedEngine/wiGraphicsDevice_DX12.h) [[Cpp]](../../WickedEngine/wiGraphicsDevice_DX12.cpp) DirectX12 implementation for rendering interface #### wiGraphicsDevice_Vulkan -[[Header]](../WickedEngine/wiGraphicsDevice_Vulkan.h) [[Cpp]](../WickedEngine/wiGraphicsDevice_Vulkan.cpp) +[[Header]](../../WickedEngine/wiGraphicsDevice_Vulkan.h) [[Cpp]](../../WickedEngine/wiGraphicsDevice_Vulkan.cpp) Vulkan implementation for rendering interface #### GraphicsDescriptors -[[Header]](../WickedEngine/wiGraphicsDescriptors.h) [[Cpp]](../WickedEngine/wiGraphicsDescriptors.cpp) +[[Header]](../../WickedEngine/wiGraphicsDescriptors.h) [[Cpp]](../../WickedEngine/wiGraphicsDescriptors.cpp) The place for graphics types like COMPARISON_FUNC, STENCIL_OP and descriptors like TextureDesc, GPUBufferDesc, etc. These types are used to create [graphics resources](#graphics-resources) #### Graphics Resources -[[Header]](../WickedEngine/wiGraphicsResource.h) [[Cpp]](../WickedEngine/wiGraphicsResource.cpp) +[[Header]](../../WickedEngine/wiGraphicsResource.h) [[Cpp]](../../WickedEngine/wiGraphicsResource.cpp) Graphics resource wrappers for Texture, Shader, GPUBuffer, etc. -#### ConstantBufferMapping -[[Header]](../WickedEngine/ConstantBufferMapping.h) -Used to declare shared global constant buffer bind points between C++ code and shaders - -#### ResourceMapping -[[Header]](../WickedEngine/ResourceMapping.h) -Used to declare shared global resource view bind points between C++ code and shaders - -#### SamplerMapping -[[Header]](../WickedEngine/SamplerMapping.h) -Used to declare shared global sampler bind points between C++ code and shaders - -#### ShaderInterop -[[Header]](../WickedEngine/ShaderInterop.h) -Shader Interop is used for declaring shared structures or values between C++ Engine code and shader code. There are several ShaderInterop files, postfixed by the subsystem they are used for to keep them minimal and more readable:
-[ShaderInterop_BVH.h](../WickedEngine/ShaderInterop_BVH.h)
-[ShaderInterop_EmittedParticle.h](../WickedEngine/ShaderInterop_EmittedParticle.h)
-[ShaderInterop_FFTGenerator.h](../WickedEngine/ShaderInterop_FFTGenerator.h)
-[ShaderInterop_Font.h](../WickedEngine/ShaderInterop_Font.h)
-[ShaderInterop_GPUSortLib.h](../WickedEngine/ShaderInterop_GPUSortLib.h)
-[ShaderInterop_HairParticle.h](../WickedEngine/ShaderInterop_HairParticle.h)
-[ShaderInterop_Image.h](../WickedEngine/ShaderInterop_Image.h)
-[ShaderInterop_Ocean.h](../WickedEngine/ShaderInterop_Ocean.h)
-[ShaderInterop_Postprocess.h](../WickedEngine/ShaderInterop_Postprocess.h)
-[ShaderInterop_Raytracing.h](../WickedEngine/ShaderInterop_Raytracing.h)
-[ShaderInterop_Renderer.h](../WickedEngine/ShaderInterop_Renderer.h)
-[ShaderInterop_Skinning.h](../WickedEngine/ShaderInterop_Skinning.h)
-[ShaderInterop_Utility.h](../WickedEngine/ShaderInterop_Utility.h)
-[ShaderInterop_Vulkan.h](../WickedEngine/ShaderInterop_Vulkan.h)
-The ShaderInterop also contains the resource macros to help share code between C++ and HLSL, and portability between shader compilers. Read more about macros in the [Shaders section](#shaders) ### wiRenderer -[[Header]](../WickedEngine/wiRenderer.h) [[Cpp]](../WickedEngine/wiRenderer.cpp) +[[Header]](../../WickedEngine/wiRenderer.h) [[Cpp]](../../WickedEngine/wiRenderer.cpp) This is a collection of graphics technique implentations and functions to draw a scene, shadows, post processes and other things. It is also the manager of the GraphicsDevice instance, and provides other helper functions to load shaders from files on disk. Apart from graphics helper functions that are mostly independent of each other, the renderer also provides facilities to render a Scene. This can be done via the high level DrawScene, DrawSky, etc. functions. These don't set up render passes or viewports by themselves, but they expect that they are set up from outside. Most other render state will be handled internally, such as constant buffers, stencil, blendstate, etc.. Please see how the scene rendering functions are used in the High level interface RenderPath3D implementations (for example [RenderPath3D_TiledForward.cpp](../WickedEngine/RenderPath3D_TiledForward.cpp)) @@ -854,7 +827,7 @@ The custom shader is essentially the combination of a [Pipeline State Object](#p ### wiEnums -[[Header]](../WickedEngine/wiEnums.h) +[[Header]](../../WickedEngine/wiEnums.h) This is a collection of enum values used by the wiRenderer to identify graphics resources. Usually arrays of the same resource type are declared and the XYZENUM_COUNT values tell the length of the array. The other XYZENUM_VALUE represents a single element within that array. This makes the code easy to manage, for example: ```cpp @@ -873,7 +846,7 @@ device->BindConstantBuffer(PS, &buffers[CBTYPE_MESH], 0, cmd); // makes it easy This is widely used to make code straight forward and easy to add new objects, without needing to create additional declarations, except for the enum values. ### wiImage -[[Header]](../WickedEngine/wiImage.h) [[Cpp]](../WickedEngine/wiImage.cpp) +[[Header]](../../WickedEngine/wiImage.h) [[Cpp]](../../WickedEngine/wiImage.cpp) This can render images to the screen in a simple manner. You can draw an image to the screen with a simple one liner: ```cpp wiImage::Draw(myTexture, wiImageParams(10, 20, 256, 128), cmd); @@ -883,7 +856,7 @@ The example will draw a 2D texture image to the position (10, 20), with a size o Describe all parameters of how and where to draw the image on the screen. ### wiFont -[[Header]](../WickedEngine/wiFont.h) [[Cpp]](../WickedEngine/wiFont.cpp) +[[Header]](../../WickedEngine/wiFont.h) [[Cpp]](../../WickedEngine/wiFont.cpp) This can render fonts to the screen in a simple manner. You can render a font as simple as this: ```cpp wiFont::Draw("write this!", wiFontParams(10, 20), cmd); @@ -895,37 +868,37 @@ Describe all parameters of how and where to draw the font on the screen. The wiFont can load and render .ttf (TrueType) fonts. The default arial font style is embedded into the engine ([[arial.h]](../WickedEngine/Utility/arial.h) file). The developer can load additional fonts from files by using `wiFont::AddFontStyle()` functions. These can either load from a file, or take a provided byte data for the font. The `AddFontStyle()` will return an `int` that will indicate the font ID within the loaded font library. The `wiFontParams::style` can be set to the font ID to use a specific font that was previously loaded. If the developer added a font before wiFont::Initialize was called, then that will be the default font and the arial font will not be created. ### wiEmittedParticle -[[Header]](../WickedEngine/wiEmittedParticle.h) [[Cpp]](../WickedEngine/wiEmittedParticle.cpp) +[[Header]](../../WickedEngine/wiEmittedParticle.h) [[Cpp]](../../WickedEngine/wiEmittedParticle.cpp) GPU driven emitter particle system, used to draw large amount of camera facing quad billboards. Supports simulation with force fields and fluid simulation based on Smooth Particle Hydrodynamics computation. ### wiHairParticle -[[Header]](../WickedEngine/wiHairParticle.h) [[Cpp]](../WickedEngine/wiHaorParticle.cpp) +[[Header]](../../WickedEngine/wiHairParticle.h) [[Cpp]](../../WickedEngine/wiHaorParticle.cpp) GPU driven particles that are attached to a mesh surface. It can be used to render vegetation. It participates in force fields simulation. ### wiOcean -[[Header]](../WickedEngine/wiOcean.h) [[Cpp]](../WickedEngine/wiOcean.cpp) +[[Header]](../../WickedEngine/wiOcean.h) [[Cpp]](../../WickedEngine/wiOcean.cpp) Ocean renderer using Fast Fourier Transforms simulation. The ocean surface is always rendered relative to the camera, like an infinitely large water body. ### wiSprite -[[Header]](../WickedEngine/wiSprite.h) [[Cpp]](../WickedEngine/wiSprite.cpp) +[[Header]](../../WickedEngine/wiSprite.h) [[Cpp]](../../WickedEngine/wiSprite.cpp) A helper facility to render and animate images. It uses the [wiImage](#wiimage) renderer internally - Anim
Several different simple animation utilities, like animated textures, wobbling, rotation, fade out, etc... ### wiSpriteFont -[[Header]](../WickedEngine/wiSprite.h) [[Cpp]](../WickedEngine/wiSprite.cpp) +[[Header]](../../WickedEngine/wiSprite.h) [[Cpp]](../../WickedEngine/wiSprite.cpp) A helper facility to render fonts. It uses the [wiFont](#wifont) renderer internally. It performs string conversion ### wiTextureHelper -[[Header]](../WickedEngine/wiTextureHelper.h) [[Cpp]](../WickedEngine/wiTextureHelper.cpp) +[[Header]](../../WickedEngine/wiTextureHelper.h) [[Cpp]](../../WickedEngine/wiTextureHelper.cpp) This is used to generate procedural textures, such as uniform colors, noise, etc... ### wiGPUSortLib -[[Header]](../WickedEngine/wiGPUSortLib.h) [[Cpp]](../WickedEngine/wiGPUSortLib.cpp) +[[Header]](../../WickedEngine/wiGPUSortLib.h) [[Cpp]](../../WickedEngine/wiGPUSortLib.cpp) This is a GPU sorting facility using the Bitonic Sort algorithm. It can be used to sort an index list based on a list of floats as comparison keys entirely on the GPU. ### wiGPUBVH -[[Header]](../WickedEngine/wiGPUBVH.h) [[Cpp]](../WickedEngine/wiGPUBVH.cpp) +[[Header]](../../WickedEngine/wiGPUBVH.h) [[Cpp]](../../WickedEngine/wiGPUBVH.cpp) This facility can generate a BVH (Bounding Volume Hierarcy) on the GPU for a [Scene](#scene). The BVH structure can be used to perform efficient RAY-triangle intersections on the GPU, for example in ray tracing. This is not using the ray tracing API hardware acceleration, but implemented in compute, so it has wide hardware support. @@ -933,49 +906,49 @@ This facility can generate a BVH (Bounding Volume Hierarcy) on the GPU for a [Sc The custom GUI, implemented with engine features ### wiGUI -[[Header]](../WickedEngine/wiGUI.h) [[Cpp]](../WickedEngine/wiGUI.cpp) +[[Header]](../../WickedEngine/wiGUI.h) [[Cpp]](../../WickedEngine/wiGUI.cpp) The wiGUI is responsible to run a GUI interface and manage widgets. GUI Scaling: To ensure correct GUI scaling, GUI elements should be designed for the current window size. If they are placed inside `RenderPath2D::ResizeLayout()` function according to current screen size, it will ensure that GUI will be scaled on a Resolution or DPI change event, which is recommended. ### wiEventArgs -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) This will be sent to widget callbacks to provide event arguments in different formats ### wiWidget -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) The base widget interface can be extended with specific functionality. The GUI will store and process widgets by this interface. #### wiButton -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) A simple clickable button. Supports the OnClick event callback. #### wiLabel -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) A simple static text field. #### wiTextInputField -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) Supports text input when activated. Pressing Enter will accept the input and fire the OnInputAccepted callback. Pressing the Escape key while active will cancel the text input and restoe the previous state. There can be only one active text input field at a time. #### wiSlider -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) A slider, that can represent float or integer values. The slider also accepts text input to input number values. If the number input is outside of the slider's range, it will expand its range to support the newly assigned value. Upon changing the slider value, whether by text input or sliding, the OnSlide event callback will be fired. #### wiCheckBox -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) The checkbox is a two state item which can represent true/false state. The OnClick event callback will be fired upon changing the value (by clicking on it) #### wiComboBox -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) Supports item selection from a list of text. Can set the maximum number of visible items. If the list of items is greater than the max allowed visible items, then a vertical scrollbar will be presented to allow showing hidden items. Upon selection, the OnSelect event callback will be triggered. #### wiWindow -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) A window widget is able to hold any number of other widgets. It can be moved across the screen, minimized and resized by the user. The window does not manage lifetime of attached widgets since 0.49.0! #### wiColorPicker -[[Header]](../WickedEngine/wiWidget.h) [[Cpp]](../WickedEngine/wiWidget.cpp) +[[Header]](../../WickedEngine/wiWidget.h) [[Cpp]](../../WickedEngine/wiWidget.cpp) Supports picking a HSV (or HSL) color, displaying its RGB values. On selection, the OnColorChanged event callback will be fired and the user can read the new RGB value from the event argument. @@ -983,77 +956,77 @@ Supports picking a HSV (or HSL) color, displaying its RGB values. On selection, A collection of engine-level helper classes ### wiAllocators -[[Header]](../WickedEngine/wiAllocators.h) +[[Header]](../../WickedEngine/wiAllocators.h) #### LinearAllocator -[[Header]](../WickedEngine/wiAllocators.h) +[[Header]](../../WickedEngine/wiAllocators.h) The linear allocator is used to allocate contiguous blocks of memory. The amount of maximum allocations is defined at creation time. Blocks then can be allocated from beginning to end until there is free space left. Blocks can be freed from the end until the allocator is not empty. This is not thread safe. ### wiArchive -[[Header]](../WickedEngine/wiArchive.h) [[Cpp]](../WickedEngine/wiArchive.cpp) +[[Header]](../../WickedEngine/wiArchive.h) [[Cpp]](../../WickedEngine/wiArchive.cpp) This is used for serializing binary data to disk or memory. An archive file always starts with the 64-bit version number that it was serialized with. An archive of greater version number than the current archive version of the engine can't be opened safely, so an error message will be shown if this happens. A certain archive version will not be forward compatible with the current engine version if the current archive version barrier number is greater than the archive's own version number. ### wiColor -[[Header]](../WickedEngine/wiColor.h) +[[Header]](../../WickedEngine/wiColor.h) Utility to convert to/from float color data to 32-bit RGBA data (stored in a uint32_t as RGBA, where each channel is 8 bits) ### wiContainers -[[Header]](../WickedEngine/wiContainers.h) +[[Header]](../../WickedEngine/wiContainers.h) #### ThreadSafeRingBuffer -[[Header]](../WickedEngine/wiContainers.h) +[[Header]](../../WickedEngine/wiContainers.h) This is a thread safe container that can hold elements of one certain data type at once. Elements are added to the end of container, and they are removed from the beginning. The container wraps around, so if the last element would be put after the last valid array index, then it will be put to the first instead (if the first array index is not occupied). ### wiFadeManager -[[Header]](../WickedEngine/wiFadeManager.h) [[Cpp]](../WickedEngine/wiFadeManager.cpp) +[[Header]](../../WickedEngine/wiFadeManager.h) [[Cpp]](../../WickedEngine/wiFadeManager.cpp) Simple helper to manage a fadeout screen. Fadeout starts at transparent, then fades smoothly to an opaque color (such as black, in most cases), then a callback occurs which the user can handle with their own event. After that, the color will fade back to transperent. This is used by the [MainComponent](#maincomponent) to fade from one RenderPath to an other. ### wiHelper -[[Header]](../WickedEngine/wiHelper.h) [[Cpp]](../WickedEngine/wiHelper.cpp) +[[Header]](../../WickedEngine/wiHelper.h) [[Cpp]](../../WickedEngine/wiHelper.cpp) Many helper utility functions, like screenshot, readfile, messagebox, splitpath, sleep, etc... ### wiIntersect -[[Header]](../WickedEngine/wiIntersect.h) [[Cpp]](../WickedEngine/wiIntersect.cpp) +[[Header]](../../WickedEngine/wiIntersect.h) [[Cpp]](../../WickedEngine/wiIntersect.cpp) Primitives that can be intersected with each other #### AABB -[[Header]](../WickedEngine/wiIntersect.h) [[Cpp]](../WickedEngine/wiIntersect.cpp) +[[Header]](../../WickedEngine/wiIntersect.h) [[Cpp]](../../WickedEngine/wiIntersect.cpp) Axis aligned bounding box. There are multiple ways to construct it, for example from min-max corners, or center and halfextent. #### SPHERE -[[Header]](../WickedEngine/wiIntersect.h) [[Cpp]](../WickedEngine/wiIntersect.cpp) +[[Header]](../../WickedEngine/wiIntersect.h) [[Cpp]](../../WickedEngine/wiIntersect.cpp) Sphere with a center and radius. #### CAPSULE -[[Header]](../WickedEngine/wiIntersect.h) [[Cpp]](../WickedEngine/wiIntersect.cpp) +[[Header]](../../WickedEngine/wiIntersect.h) [[Cpp]](../../WickedEngine/wiIntersect.cpp) It's like two spheres connected by a cylinder. Base and Tip are the two endpoints, radius is the cylinder's radius. #### RAY -[[Header]](../WickedEngine/wiIntersect.h) [[Cpp]](../WickedEngine/wiIntersect.cpp) +[[Header]](../../WickedEngine/wiIntersect.h) [[Cpp]](../../WickedEngine/wiIntersect.cpp) Line with a starting point (origin) and direction. The direction's reciprocal is precomputed to perform fast intersection of many primitives with one ray. #### Frustum -[[Header]](../WickedEngine/wiIntersect.h) [[Cpp]](../WickedEngine/wiIntersect.cpp) +[[Header]](../../WickedEngine/wiIntersect.h) [[Cpp]](../../WickedEngine/wiIntersect.cpp) Six planes, most commonly used for checking if an intersectable primitive is inside a camera. #### Hitbox2D -[[Header]](../WickedEngine/wiIntersect.h) [[Cpp]](../WickedEngine/wiIntersect.cpp) +[[Header]](../../WickedEngine/wiIntersect.h) [[Cpp]](../../WickedEngine/wiIntersect.cpp) A rectangle, essentially an 2D AABB. ### wiMath -[[Header]](../WickedEngine/wiMath.h) [[Cpp]](../WickedEngine/wiMath.cpp) +[[Header]](../../WickedEngine/wiMath.h) [[Cpp]](../../WickedEngine/wiMath.cpp) Math related helper functions, like lerp, triangleArea, HueToRGB, etc... ### wiRandom -[[Header]](../WickedEngine/wiRandom.h) [[Cpp]](../WickedEngine/wiRandom.cpp) +[[Header]](../../WickedEngine/wiRandom.h) [[Cpp]](../../WickedEngine/wiRandom.cpp) Uniform random number generator with a good distribution. ### wiRectPacker -[[Header]](../WickedEngine/wiRectPacker.h) [[Cpp]](../WickedEngine/wiRectPacker.cpp) +[[Header]](../../WickedEngine/wiRectPacker.h) [[Cpp]](../../WickedEngine/wiRectPacker.cpp) Provides the ability to pack multiple rectangles into a bigger rectangle, while taking up the least amount of space from the containing rectangle. ### wiResourceManager -[[Header]](../WickedEngine/wiResourceManager.h) [[Cpp]](../WickedEngine/wiResourceManager.cpp) +[[Header]](../../WickedEngine/wiResourceManager.h) [[Cpp]](../../WickedEngine/wiResourceManager.cpp) This can load images and sounds. It will hold on to resources until there is at least something that is referencing them, otherwise deletes them. One resource can have multiple owners, too. This is thread safe. - `Load()` : Load a resource, or return a resource handle if it already exists. The resources are identified by file names. The user can specify import flags (optional). The user can provide a file data buffer that was loaded externally (optional). This function will return a resource handle. The resource handle equals to `nullptr` if it was not loaded successfully, otherwise a valid handle is returned. @@ -1068,15 +1041,15 @@ The resource manager can support different modes that can be set with `SetMode(M The resource manager can always be serialized in read mode. File data retention will be based on existing file import flags and the global resource manager mode. ### wiSpinLock -[[Header]](../WickedEngine/wiSpinLock.h) [[Cpp]](../WickedEngine/wiSpinLock.cpp) +[[Header]](../../WickedEngine/wiSpinLock.h) [[Cpp]](../../WickedEngine/wiSpinLock.cpp) This can be used to guarantee exclusive access to a block in multithreaded race condition scenario instead of a mutex. The difference to a mutex that this doesn't let the thread to yield, but instead spin on an atomic flag until the spinlock can be locked. ### wiStartupArguments -[[Header]](../WickedEngine/wiStartupArguments.h) [[Cpp]](../WickedEngine/wiStartupArguments.cpp) +[[Header]](../../WickedEngine/wiStartupArguments.h) [[Cpp]](../../WickedEngine/wiStartupArguments.cpp) This is to store the startup parameters that were passed to the application from the operating system "command line". The user can query these arguments by name. ### wiTimer -[[Header]](../WickedEngine/wiTimer.h) [[Cpp]](../WickedEngine/wiTimer.cpp) +[[Header]](../../WickedEngine/wiTimer.h) [[Cpp]](../../WickedEngine/wiTimer.cpp) High resolution stopwatch timer @@ -1084,7 +1057,7 @@ High resolution stopwatch timer The input interface ### wiInput -[[Header]](../WickedEngine/wiInput.h) [[Cpp]](../WickedEngine/wiInput.cpp) +[[Header]](../../WickedEngine/wiInput.h) [[Cpp]](../../WickedEngine/wiInput.cpp) This is the high level input interface. Use this to read input devices in a platform-independent way. - Initialize
Creates all necessary resources, the engine initialization already does this via [wiInitializer](#wiinitializer), so the user probably doesn't have to worry about this. @@ -1132,11 +1105,11 @@ A touch contact point. Currently it is supported in UWP (Universal Windows Platf Get a std::vector containing current Touch contact points ### wiXInput -[[Header]](../WickedEngine/wiXInput.h) [[Cpp]](../WickedEngine/wiXInput.cpp) +[[Header]](../../WickedEngine/wiXInput.h) [[Cpp]](../../WickedEngine/wiXInput.cpp) Low level wrapper for XInput API (capable of handling Xbox controllers). This functionality is used by the more generic wiInput interface, so the user probably doesn't need to use this. ### wiRawInput -[[Header]](../WickedEngine/wiRawInput.h) [[Cpp]](../WickedEngine/wiRawInput.cpp) +[[Header]](../../WickedEngine/wiRawInput.h) [[Cpp]](../../WickedEngine/wiRawInput.cpp) Low level wrapper for RAWInput API (capable of handling human interface devices, such as mouse, keyboard, controllers). This functionality is used by the more generic wiInput interface, so the user probably doesn't need to use this. @@ -1144,7 +1117,7 @@ Low level wrapper for RAWInput API (capable of handling human interface devices, ## Audio Handles audio playback and spatial audio. ### wiAudio -[[Header]](../WickedEngine/wiAudio.h) [[Cpp]](../WickedEngine/wiAudio.cpp) +[[Header]](../../WickedEngine/wiAudio.h) [[Cpp]](../../WickedEngine/wiAudio.cpp) The namespace that is a collection of audio related functionality. It is currently implemented with XAudio2 - CreateSound - CreateSoundInstance @@ -1204,7 +1177,7 @@ Can make different sounding 3D reverb effect globally You can find the physics system related functionality under ENGINE/Physics filter in the solution. It uses the entity-component system to perform updating all physics components in the world. ### wiPhysicsEngine -[[Header]](../WickedEngine/wiPhysicsEngine.h) [[Cpp]](../WickedEngine/wiPhysicsEngine.cpp) +[[Header]](../../WickedEngine/wiPhysicsEngine.h) [[Cpp]](../../WickedEngine/wiPhysicsEngine.cpp) - Initialize
This must be called before using the physics system, but it is automatically done by [wiInitializer](#wiinitializer) - IsEnabled
@@ -1243,13 +1216,13 @@ The pinned vertices can also be manipulated via skinning animation. If th ### wiPhysicsEngine_Bullet -[[Header]](../WickedEngine/wiPhysicsEngine_BULLET.h) [[Cpp]](../WickedEngine/wiPhysicsEngine_BULLET.cpp) +[[Header]](../../WickedEngine/wiPhysicsEngine_BULLET.h) [[Cpp]](../../WickedEngine/wiPhysicsEngine_BULLET.cpp) Bullet physics engine implementation of the physics update system ## Network ### wiNetwork -[[Header]](../WickedEngine/wiNetwork.h) [[Cpp]](../WickedEngine/wiNetwork.cpp) +[[Header]](../../WickedEngine/wiNetwork.h) [[Cpp]](../../WickedEngine/wiNetwork.cpp) Simple interface that provides UDP networking features. - Initialize - CreateSocket @@ -1268,28 +1241,30 @@ This is the place for the Lua scipt interface. For a complete reference about Lu ### LuaBindings The systems that are bound to Lua have the name of the system as their filename, postfixed by _BindLua. ### wiLua -[[Header]](../WickedEngine/wiLua.h) [[Cpp]](../WickedEngine/wiLua.cpp) +[[Header]](../../WickedEngine/wiLua.h) [[Cpp]](../../WickedEngine/wiLua.cpp) The Lua scripting interface on the C++ side. This allows to execute lua commands from the C++ side and manipulate the lua stack, such as pushing values to lua and getting values from lua, among other things. ### wiLua_Globals -[[Header]](../WickedEngine/wiLua_Globals.h) +[[Header]](../../WickedEngine/wiLua_Globals.h) Hardcoded lua script in text format. This will be always executed and provides some commonly used helper functionality for lua scripts. ### wiLuna -[[Header]](../WickedEngine/wiLuna.h) +[[Header]](../../WickedEngine/wiLuna.h) Helper to allow bind engine classes from C++ to Lua ## Tools This is the place for tools that use engine-level systems ### wiBackLog -[[Header]](../WickedEngine/wiBacklog.h) [[Cpp]](../WickedEngine/wiBackLog.cpp) +[[Header]](../../WickedEngine/wiBacklog.h) [[Cpp]](../../WickedEngine/wiBackLog.cpp) Used to log any messages by any system, from any thread. It can draw itself to the screen. It can execute Lua scripts. ### wiProfiler -[[Header]](../WickedEngine/wiProfiler.h) [[Cpp]](../WickedEngine/wiProfiler.cpp) +[[Header]](../../WickedEngine/wiProfiler.h) [[Cpp]](../../WickedEngine/wiProfiler.cpp) Used to time specific ranges in execution. Support CPU and GPU timing. Can write the result to the screen as simple text at this time. ## Shaders -There is a separate project file for shaders in the solution. Shaders are written in HLSL shading language. There are some macros used to declare resources with binding slots that can be read from the C++ application via code sharing. These macros are used to declare resources: +Shaders are written in HLSL shading language and [compiled](#shader-compiler) into the native shader binary format that can vary based on platform and graphics device requirements. + +There are some macros used to declare resources with binding slots that can be read from the C++ application via code sharing. These macros are used to declare resources: - CBUFFER(name, slot)
Declares a constant buffer @@ -1509,7 +1484,7 @@ TEXTURECUBEARRAY(myTextureArray, float4, 0); float4 color = myTextureArray.Sample(mySampler, float4(0,0,0, 66)); ``` -You can see them all in [ShaderInterop.h](../WickedEngine/ShaderInterop.h) +You can see them all in [ShaderInterop.h](../WickedEngine/shaders/ShaderInterop.h) Note: When creating constant buffers, the structure must be strictly padded to 16-byte boundaries according to HLSL rules. Apart from that, the following limitation is in effect for Vulkan compatibility: @@ -1532,3 +1507,43 @@ CBUFFER(cbuf, 0) float4 value2; }; ``` + +### Interop +The interop between shaders and C++ code is handled by shared header (.h) files. Modifying the shared header files will need recompilation of both engine and shaders, otherwise undefined behaviour will occur. For cases when only shaders need visibility, consider using shader header files (.hlsli), which should not be shared with the engine C++ code. + +#### ConstantBufferMapping +[[Header]](../../WickedEngine/shaders/ConstantBufferMapping.h) +Used to declare shared global constant buffer bind points between C++ code and shaders + +#### ResourceMapping +[[Header]](../../WickedEngine/shaders/ResourceMapping.h) +Used to declare shared global resource view bind points between C++ code and shaders + +#### SamplerMapping +[[Header]](../../WickedEngine/shaders/SamplerMapping.h) +Used to declare shared global sampler bind points between C++ code and shaders + +#### ShaderInterop +[[Header]](../../WickedEngine/shaders/ShaderInterop.h) +Shader Interop is used for declaring shared structures or values between C++ Engine code and shader code. There are several ShaderInterop files, postfixed by the subsystem they are used for to keep them minimal and more readable:
+[ShaderInterop_BVH.h](../WickedEngine/ShaderInterop_BVH.h)
+[ShaderInterop_EmittedParticle.h](../WickedEngine/ShaderInterop_EmittedParticle.h)
+[ShaderInterop_FFTGenerator.h](../WickedEngine/ShaderInterop_FFTGenerator.h)
+[ShaderInterop_Font.h](../WickedEngine/ShaderInterop_Font.h)
+[ShaderInterop_GPUSortLib.h](../WickedEngine/ShaderInterop_GPUSortLib.h)
+[ShaderInterop_HairParticle.h](../WickedEngine/ShaderInterop_HairParticle.h)
+[ShaderInterop_Image.h](../WickedEngine/ShaderInterop_Image.h)
+[ShaderInterop_Ocean.h](../WickedEngine/ShaderInterop_Ocean.h)
+[ShaderInterop_Postprocess.h](../WickedEngine/ShaderInterop_Postprocess.h)
+[ShaderInterop_Raytracing.h](../WickedEngine/ShaderInterop_Raytracing.h)
+[ShaderInterop_Renderer.h](../WickedEngine/ShaderInterop_Renderer.h)
+[ShaderInterop_Skinning.h](../WickedEngine/ShaderInterop_Skinning.h)
+[ShaderInterop_Utility.h](../WickedEngine/ShaderInterop_Utility.h)
+[ShaderInterop_Vulkan.h](../WickedEngine/ShaderInterop_Vulkan.h)
+The ShaderInterop also contains the resource macros to help share code between C++ and HLSL, and portability between shader compilers. Read more about macros in the [Shaders section](#shaders) + +### Shader Compiler +The built in Visual Studio shader compiler can compile HLSL shaders with the usual visual studio build process. This can be used to some extent, but the recommended way is to use the [[Wicked Engine Shader Compiler Interface (wiShaderCompiler)]](../WickedEngine/wiShaderCompiler.h). This supports various tools to compile shaders to different shader formats (hlsl5, hlsl6, spirv), and can be used at runtime, for example to compile shader permutations easily, and also use engine features like the [job system](wijobsystem) to parallelize compile tasks with more control than a common build system. + +Offline Shader Compilation: +The OfflineShaderCompiler tool can be built and used to compile shaders in a command line process. It can also be used to generate a shader dump, which is a header file that can be included into C++ code and compiled, so all shaders will be embedded into the executable, this way they won't be loaded as separate files by applications. However, the shader reload feature will not work in this case for those shaders that are embedded. The shader dump will be contained in `wiShaderDump.h` file when generated by the offline shader compiler using the `shaderdump` command line argument. If this file is detected by the time the engine is compiled, shaders will be embedded inside the compiled executable. The offline shader compiler can also be used to compile shader normally into separate .cso files with .wishadermeta metadata files that will be used to detect when each shader needs to be rebuilt automatically. diff --git a/images/logo_small.png b/Content/logo_small.png similarity index 100% rename from images/logo_small.png rename to Content/logo_small.png diff --git a/models/CesiumMan.glb b/Content/models/CesiumMan.glb similarity index 100% rename from models/CesiumMan.glb rename to Content/models/CesiumMan.glb diff --git a/models/DamagedHelmet.glb b/Content/models/DamagedHelmet.glb similarity index 100% rename from models/DamagedHelmet.glb rename to Content/models/DamagedHelmet.glb diff --git a/models/Havoc/baseColor.png b/Content/models/Havoc/baseColor.png similarity index 100% rename from models/Havoc/baseColor.png rename to Content/models/Havoc/baseColor.png diff --git a/models/Havoc/havoc.wiscene b/Content/models/Havoc/havoc.wiscene similarity index 100% rename from models/Havoc/havoc.wiscene rename to Content/models/Havoc/havoc.wiscene diff --git a/models/Havoc/normalMap.png b/Content/models/Havoc/normalMap.png similarity index 100% rename from models/Havoc/normalMap.png rename to Content/models/Havoc/normalMap.png diff --git a/models/Sponza/copyright.txt b/Content/models/Sponza/copyright.txt similarity index 100% rename from models/Sponza/copyright.txt rename to Content/models/Sponza/copyright.txt diff --git a/models/Sponza/sponza.wiscene b/Content/models/Sponza/sponza.wiscene similarity index 100% rename from models/Sponza/sponza.wiscene rename to Content/models/Sponza/sponza.wiscene diff --git a/models/Sponza/textures/background.png b/Content/models/Sponza/textures/background.png similarity index 100% rename from models/Sponza/textures/background.png rename to Content/models/Sponza/textures/background.png diff --git a/models/Sponza/textures/backgroundBGR.png b/Content/models/Sponza/textures/backgroundBGR.png similarity index 100% rename from models/Sponza/textures/backgroundBGR.png rename to Content/models/Sponza/textures/backgroundBGR.png diff --git a/models/Sponza/textures/background_bump.png b/Content/models/Sponza/textures/background_bump.png similarity index 100% rename from models/Sponza/textures/background_bump.png rename to Content/models/Sponza/textures/background_bump.png diff --git a/models/Sponza/textures/background_ddn.png b/Content/models/Sponza/textures/background_ddn.png similarity index 100% rename from models/Sponza/textures/background_ddn.png rename to Content/models/Sponza/textures/background_ddn.png diff --git a/models/Sponza/textures/chain_texture.png b/Content/models/Sponza/textures/chain_texture.png similarity index 100% rename from models/Sponza/textures/chain_texture.png rename to Content/models/Sponza/textures/chain_texture.png diff --git a/models/Sponza/textures/chain_texture_bump.png b/Content/models/Sponza/textures/chain_texture_bump.png similarity index 100% rename from models/Sponza/textures/chain_texture_bump.png rename to Content/models/Sponza/textures/chain_texture_bump.png diff --git a/models/Sponza/textures/chain_texture_ddn.png b/Content/models/Sponza/textures/chain_texture_ddn.png similarity index 100% rename from models/Sponza/textures/chain_texture_ddn.png rename to Content/models/Sponza/textures/chain_texture_ddn.png diff --git a/models/Sponza/textures/chain_texture_mask.png b/Content/models/Sponza/textures/chain_texture_mask.png similarity index 100% rename from models/Sponza/textures/chain_texture_mask.png rename to Content/models/Sponza/textures/chain_texture_mask.png diff --git a/models/Sponza/textures/gi_flag.png b/Content/models/Sponza/textures/gi_flag.png similarity index 100% rename from models/Sponza/textures/gi_flag.png rename to Content/models/Sponza/textures/gi_flag.png diff --git a/models/Sponza/textures/lion.png b/Content/models/Sponza/textures/lion.png similarity index 100% rename from models/Sponza/textures/lion.png rename to Content/models/Sponza/textures/lion.png diff --git a/models/Sponza/textures/lion2_bump.png b/Content/models/Sponza/textures/lion2_bump.png similarity index 100% rename from models/Sponza/textures/lion2_bump.png rename to Content/models/Sponza/textures/lion2_bump.png diff --git a/models/Sponza/textures/lion2_ddn.png b/Content/models/Sponza/textures/lion2_ddn.png similarity index 100% rename from models/Sponza/textures/lion2_ddn.png rename to Content/models/Sponza/textures/lion2_ddn.png diff --git a/models/Sponza/textures/lion_bump.png b/Content/models/Sponza/textures/lion_bump.png similarity index 100% rename from models/Sponza/textures/lion_bump.png rename to Content/models/Sponza/textures/lion_bump.png diff --git a/models/Sponza/textures/lion_ddn.png b/Content/models/Sponza/textures/lion_ddn.png similarity index 100% rename from models/Sponza/textures/lion_ddn.png rename to Content/models/Sponza/textures/lion_ddn.png diff --git a/models/sponza/textures/particle_dust.dds b/Content/models/Sponza/textures/particle_dust.dds similarity index 100% rename from models/sponza/textures/particle_dust.dds rename to Content/models/Sponza/textures/particle_dust.dds diff --git a/models/Sponza/textures/spnza_bricks_a_bump.png b/Content/models/Sponza/textures/spnza_bricks_a_bump.png similarity index 100% rename from models/Sponza/textures/spnza_bricks_a_bump.png rename to Content/models/Sponza/textures/spnza_bricks_a_bump.png diff --git a/models/Sponza/textures/spnza_bricks_a_ddn.png b/Content/models/Sponza/textures/spnza_bricks_a_ddn.png similarity index 100% rename from models/Sponza/textures/spnza_bricks_a_ddn.png rename to Content/models/Sponza/textures/spnza_bricks_a_ddn.png diff --git a/models/Sponza/textures/spnza_bricks_a_diff.png b/Content/models/Sponza/textures/spnza_bricks_a_diff.png similarity index 100% rename from models/Sponza/textures/spnza_bricks_a_diff.png rename to Content/models/Sponza/textures/spnza_bricks_a_diff.png diff --git a/models/Sponza/textures/spnza_bricks_a_spec.png b/Content/models/Sponza/textures/spnza_bricks_a_spec.png similarity index 100% rename from models/Sponza/textures/spnza_bricks_a_spec.png rename to Content/models/Sponza/textures/spnza_bricks_a_spec.png diff --git a/models/Sponza/textures/sponza_arch_bump.png b/Content/models/Sponza/textures/sponza_arch_bump.png similarity index 100% rename from models/Sponza/textures/sponza_arch_bump.png rename to Content/models/Sponza/textures/sponza_arch_bump.png diff --git a/models/Sponza/textures/sponza_arch_ddn.png b/Content/models/Sponza/textures/sponza_arch_ddn.png similarity index 100% rename from models/Sponza/textures/sponza_arch_ddn.png rename to Content/models/Sponza/textures/sponza_arch_ddn.png diff --git a/models/Sponza/textures/sponza_arch_diff.png b/Content/models/Sponza/textures/sponza_arch_diff.png similarity index 100% rename from models/Sponza/textures/sponza_arch_diff.png rename to Content/models/Sponza/textures/sponza_arch_diff.png diff --git a/models/Sponza/textures/sponza_arch_diff_NRM.png b/Content/models/Sponza/textures/sponza_arch_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_arch_diff_NRM.png rename to Content/models/Sponza/textures/sponza_arch_diff_NRM.png diff --git a/models/Sponza/textures/sponza_arch_spec.png b/Content/models/Sponza/textures/sponza_arch_spec.png similarity index 100% rename from models/Sponza/textures/sponza_arch_spec.png rename to Content/models/Sponza/textures/sponza_arch_spec.png diff --git a/models/Sponza/textures/sponza_ceiling_a_diff.png b/Content/models/Sponza/textures/sponza_ceiling_a_diff.png similarity index 100% rename from models/Sponza/textures/sponza_ceiling_a_diff.png rename to Content/models/Sponza/textures/sponza_ceiling_a_diff.png diff --git a/models/Sponza/textures/sponza_ceiling_a_diff_NRM.png b/Content/models/Sponza/textures/sponza_ceiling_a_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_ceiling_a_diff_NRM.png rename to Content/models/Sponza/textures/sponza_ceiling_a_diff_NRM.png diff --git a/models/Sponza/textures/sponza_ceiling_a_spec.png b/Content/models/Sponza/textures/sponza_ceiling_a_spec.png similarity index 100% rename from models/Sponza/textures/sponza_ceiling_a_spec.png rename to Content/models/Sponza/textures/sponza_ceiling_a_spec.png diff --git a/models/Sponza/textures/sponza_column_a_bump.png b/Content/models/Sponza/textures/sponza_column_a_bump.png similarity index 100% rename from models/Sponza/textures/sponza_column_a_bump.png rename to Content/models/Sponza/textures/sponza_column_a_bump.png diff --git a/models/Sponza/textures/sponza_column_a_ddn.png b/Content/models/Sponza/textures/sponza_column_a_ddn.png similarity index 100% rename from models/Sponza/textures/sponza_column_a_ddn.png rename to Content/models/Sponza/textures/sponza_column_a_ddn.png diff --git a/models/Sponza/textures/sponza_column_a_diff.png b/Content/models/Sponza/textures/sponza_column_a_diff.png similarity index 100% rename from models/Sponza/textures/sponza_column_a_diff.png rename to Content/models/Sponza/textures/sponza_column_a_diff.png diff --git a/models/Sponza/textures/sponza_column_a_spec.png b/Content/models/Sponza/textures/sponza_column_a_spec.png similarity index 100% rename from models/Sponza/textures/sponza_column_a_spec.png rename to Content/models/Sponza/textures/sponza_column_a_spec.png diff --git a/models/Sponza/textures/sponza_column_b_bump.png b/Content/models/Sponza/textures/sponza_column_b_bump.png similarity index 100% rename from models/Sponza/textures/sponza_column_b_bump.png rename to Content/models/Sponza/textures/sponza_column_b_bump.png diff --git a/models/Sponza/textures/sponza_column_b_ddn.png b/Content/models/Sponza/textures/sponza_column_b_ddn.png similarity index 100% rename from models/Sponza/textures/sponza_column_b_ddn.png rename to Content/models/Sponza/textures/sponza_column_b_ddn.png diff --git a/models/Sponza/textures/sponza_column_b_diff.png b/Content/models/Sponza/textures/sponza_column_b_diff.png similarity index 100% rename from models/Sponza/textures/sponza_column_b_diff.png rename to Content/models/Sponza/textures/sponza_column_b_diff.png diff --git a/models/Sponza/textures/sponza_column_b_spec.png b/Content/models/Sponza/textures/sponza_column_b_spec.png similarity index 100% rename from models/Sponza/textures/sponza_column_b_spec.png rename to Content/models/Sponza/textures/sponza_column_b_spec.png diff --git a/models/Sponza/textures/sponza_column_c_bump.png b/Content/models/Sponza/textures/sponza_column_c_bump.png similarity index 100% rename from models/Sponza/textures/sponza_column_c_bump.png rename to Content/models/Sponza/textures/sponza_column_c_bump.png diff --git a/models/Sponza/textures/sponza_column_c_ddn.png b/Content/models/Sponza/textures/sponza_column_c_ddn.png similarity index 100% rename from models/Sponza/textures/sponza_column_c_ddn.png rename to Content/models/Sponza/textures/sponza_column_c_ddn.png diff --git a/models/Sponza/textures/sponza_column_c_diff.png b/Content/models/Sponza/textures/sponza_column_c_diff.png similarity index 100% rename from models/Sponza/textures/sponza_column_c_diff.png rename to Content/models/Sponza/textures/sponza_column_c_diff.png diff --git a/models/Sponza/textures/sponza_column_c_spec.png b/Content/models/Sponza/textures/sponza_column_c_spec.png similarity index 100% rename from models/Sponza/textures/sponza_column_c_spec.png rename to Content/models/Sponza/textures/sponza_column_c_spec.png diff --git a/models/Sponza/textures/sponza_curtain_blue_diff.png b/Content/models/Sponza/textures/sponza_curtain_blue_diff.png similarity index 100% rename from models/Sponza/textures/sponza_curtain_blue_diff.png rename to Content/models/Sponza/textures/sponza_curtain_blue_diff.png diff --git a/models/Sponza/textures/sponza_curtain_blue_diff_NRM.png b/Content/models/Sponza/textures/sponza_curtain_blue_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_curtain_blue_diff_NRM.png rename to Content/models/Sponza/textures/sponza_curtain_blue_diff_NRM.png diff --git a/models/Sponza/textures/sponza_curtain_diff.png b/Content/models/Sponza/textures/sponza_curtain_diff.png similarity index 100% rename from models/Sponza/textures/sponza_curtain_diff.png rename to Content/models/Sponza/textures/sponza_curtain_diff.png diff --git a/models/Sponza/textures/sponza_curtain_green_diff.png b/Content/models/Sponza/textures/sponza_curtain_green_diff.png similarity index 100% rename from models/Sponza/textures/sponza_curtain_green_diff.png rename to Content/models/Sponza/textures/sponza_curtain_green_diff.png diff --git a/models/Sponza/textures/sponza_details_diff.png b/Content/models/Sponza/textures/sponza_details_diff.png similarity index 100% rename from models/Sponza/textures/sponza_details_diff.png rename to Content/models/Sponza/textures/sponza_details_diff.png diff --git a/models/Sponza/textures/sponza_details_diff_NRM.png b/Content/models/Sponza/textures/sponza_details_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_details_diff_NRM.png rename to Content/models/Sponza/textures/sponza_details_diff_NRM.png diff --git a/models/Sponza/textures/sponza_details_spec.png b/Content/models/Sponza/textures/sponza_details_spec.png similarity index 100% rename from models/Sponza/textures/sponza_details_spec.png rename to Content/models/Sponza/textures/sponza_details_spec.png diff --git a/models/Sponza/textures/sponza_fabric_blue_diff.png b/Content/models/Sponza/textures/sponza_fabric_blue_diff.png similarity index 100% rename from models/Sponza/textures/sponza_fabric_blue_diff.png rename to Content/models/Sponza/textures/sponza_fabric_blue_diff.png diff --git a/models/Sponza/textures/sponza_fabric_blue_diff_NRM.png b/Content/models/Sponza/textures/sponza_fabric_blue_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_fabric_blue_diff_NRM.png rename to Content/models/Sponza/textures/sponza_fabric_blue_diff_NRM.png diff --git a/models/Sponza/textures/sponza_fabric_diff.png b/Content/models/Sponza/textures/sponza_fabric_diff.png similarity index 100% rename from models/Sponza/textures/sponza_fabric_diff.png rename to Content/models/Sponza/textures/sponza_fabric_diff.png diff --git a/models/Sponza/textures/sponza_fabric_green_diff.png b/Content/models/Sponza/textures/sponza_fabric_green_diff.png similarity index 100% rename from models/Sponza/textures/sponza_fabric_green_diff.png rename to Content/models/Sponza/textures/sponza_fabric_green_diff.png diff --git a/models/Sponza/textures/sponza_fabric_spec.png b/Content/models/Sponza/textures/sponza_fabric_spec.png similarity index 100% rename from models/Sponza/textures/sponza_fabric_spec.png rename to Content/models/Sponza/textures/sponza_fabric_spec.png diff --git a/models/Sponza/textures/sponza_flagpole_diff.png b/Content/models/Sponza/textures/sponza_flagpole_diff.png similarity index 100% rename from models/Sponza/textures/sponza_flagpole_diff.png rename to Content/models/Sponza/textures/sponza_flagpole_diff.png diff --git a/models/Sponza/textures/sponza_flagpole_diff_NRM.png b/Content/models/Sponza/textures/sponza_flagpole_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_flagpole_diff_NRM.png rename to Content/models/Sponza/textures/sponza_flagpole_diff_NRM.png diff --git a/models/Sponza/textures/sponza_flagpole_spec.png b/Content/models/Sponza/textures/sponza_flagpole_spec.png similarity index 100% rename from models/Sponza/textures/sponza_flagpole_spec.png rename to Content/models/Sponza/textures/sponza_flagpole_spec.png diff --git a/models/Sponza/textures/sponza_floor_a_diff.png b/Content/models/Sponza/textures/sponza_floor_a_diff.png similarity index 100% rename from models/Sponza/textures/sponza_floor_a_diff.png rename to Content/models/Sponza/textures/sponza_floor_a_diff.png diff --git a/models/Sponza/textures/sponza_floor_a_diff_NRM.png b/Content/models/Sponza/textures/sponza_floor_a_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_floor_a_diff_NRM.png rename to Content/models/Sponza/textures/sponza_floor_a_diff_NRM.png diff --git a/models/Sponza/textures/sponza_floor_a_spec.png b/Content/models/Sponza/textures/sponza_floor_a_spec.png similarity index 100% rename from models/Sponza/textures/sponza_floor_a_spec.png rename to Content/models/Sponza/textures/sponza_floor_a_spec.png diff --git a/models/Sponza/textures/sponza_roof_diff.png b/Content/models/Sponza/textures/sponza_roof_diff.png similarity index 100% rename from models/Sponza/textures/sponza_roof_diff.png rename to Content/models/Sponza/textures/sponza_roof_diff.png diff --git a/models/Sponza/textures/sponza_roof_diff_NRM.png b/Content/models/Sponza/textures/sponza_roof_diff_NRM.png similarity index 100% rename from models/Sponza/textures/sponza_roof_diff_NRM.png rename to Content/models/Sponza/textures/sponza_roof_diff_NRM.png diff --git a/models/Sponza/textures/sponza_thorn_bump.png b/Content/models/Sponza/textures/sponza_thorn_bump.png similarity index 100% rename from models/Sponza/textures/sponza_thorn_bump.png rename to Content/models/Sponza/textures/sponza_thorn_bump.png diff --git a/models/Sponza/textures/sponza_thorn_ddn.png b/Content/models/Sponza/textures/sponza_thorn_ddn.png similarity index 100% rename from models/Sponza/textures/sponza_thorn_ddn.png rename to Content/models/Sponza/textures/sponza_thorn_ddn.png diff --git a/models/Sponza/textures/sponza_thorn_diff.png b/Content/models/Sponza/textures/sponza_thorn_diff.png similarity index 100% rename from models/Sponza/textures/sponza_thorn_diff.png rename to Content/models/Sponza/textures/sponza_thorn_diff.png diff --git a/models/Sponza/textures/sponza_thorn_mask.png b/Content/models/Sponza/textures/sponza_thorn_mask.png similarity index 100% rename from models/Sponza/textures/sponza_thorn_mask.png rename to Content/models/Sponza/textures/sponza_thorn_mask.png diff --git a/models/Sponza/textures/sponza_thorn_spec.png b/Content/models/Sponza/textures/sponza_thorn_spec.png similarity index 100% rename from models/Sponza/textures/sponza_thorn_spec.png rename to Content/models/Sponza/textures/sponza_thorn_spec.png diff --git a/models/Sponza/textures/vase_bump.png b/Content/models/Sponza/textures/vase_bump.png similarity index 100% rename from models/Sponza/textures/vase_bump.png rename to Content/models/Sponza/textures/vase_bump.png diff --git a/models/Sponza/textures/vase_ddn.png b/Content/models/Sponza/textures/vase_ddn.png similarity index 100% rename from models/Sponza/textures/vase_ddn.png rename to Content/models/Sponza/textures/vase_ddn.png diff --git a/models/Sponza/textures/vase_dif.png b/Content/models/Sponza/textures/vase_dif.png similarity index 100% rename from models/Sponza/textures/vase_dif.png rename to Content/models/Sponza/textures/vase_dif.png diff --git a/models/Sponza/textures/vase_hanging.png b/Content/models/Sponza/textures/vase_hanging.png similarity index 100% rename from models/Sponza/textures/vase_hanging.png rename to Content/models/Sponza/textures/vase_hanging.png diff --git a/models/Sponza/textures/vase_hanging_NRM.png b/Content/models/Sponza/textures/vase_hanging_NRM.png similarity index 100% rename from models/Sponza/textures/vase_hanging_NRM.png rename to Content/models/Sponza/textures/vase_hanging_NRM.png diff --git a/models/Sponza/textures/vase_plant.png b/Content/models/Sponza/textures/vase_plant.png similarity index 100% rename from models/Sponza/textures/vase_plant.png rename to Content/models/Sponza/textures/vase_plant.png diff --git a/models/Sponza/textures/vase_plant_NRM.png b/Content/models/Sponza/textures/vase_plant_NRM.png similarity index 100% rename from models/Sponza/textures/vase_plant_NRM.png rename to Content/models/Sponza/textures/vase_plant_NRM.png diff --git a/models/Sponza/textures/vase_plant_mask.png b/Content/models/Sponza/textures/vase_plant_mask.png similarity index 100% rename from models/Sponza/textures/vase_plant_mask.png rename to Content/models/Sponza/textures/vase_plant_mask.png diff --git a/models/Sponza/textures/vase_plant_spec.png b/Content/models/Sponza/textures/vase_plant_spec.png similarity index 100% rename from models/Sponza/textures/vase_plant_spec.png rename to Content/models/Sponza/textures/vase_plant_spec.png diff --git a/models/Sponza/textures/vase_round.png b/Content/models/Sponza/textures/vase_round.png similarity index 100% rename from models/Sponza/textures/vase_round.png rename to Content/models/Sponza/textures/vase_round.png diff --git a/models/Sponza/textures/vase_round_bump.png b/Content/models/Sponza/textures/vase_round_bump.png similarity index 100% rename from models/Sponza/textures/vase_round_bump.png rename to Content/models/Sponza/textures/vase_round_bump.png diff --git a/models/Sponza/textures/vase_round_ddn.png b/Content/models/Sponza/textures/vase_round_ddn.png similarity index 100% rename from models/Sponza/textures/vase_round_ddn.png rename to Content/models/Sponza/textures/vase_round_ddn.png diff --git a/models/Sponza/textures/vase_round_spec.png b/Content/models/Sponza/textures/vase_round_spec.png similarity index 100% rename from models/Sponza/textures/vase_round_spec.png rename to Content/models/Sponza/textures/vase_round_spec.png diff --git a/models/billboardredflowers.png b/Content/models/billboardredflowers.png similarity index 100% rename from models/billboardredflowers.png rename to Content/models/billboardredflowers.png diff --git a/models/blend_instancing_test.wiscene b/Content/models/blend_instancing_test.wiscene similarity index 100% rename from models/blend_instancing_test.wiscene rename to Content/models/blend_instancing_test.wiscene diff --git a/models/bunny.obj b/Content/models/bunny.obj similarity index 100% rename from models/bunny.obj rename to Content/models/bunny.obj diff --git a/models/cameras.wiscene b/Content/models/cameras.wiscene similarity index 100% rename from models/cameras.wiscene rename to Content/models/cameras.wiscene diff --git a/models/circle.obj b/Content/models/circle.obj similarity index 100% rename from models/circle.obj rename to Content/models/circle.obj diff --git a/models/cloth_test.wiscene b/Content/models/cloth_test.wiscene similarity index 100% rename from models/cloth_test.wiscene rename to Content/models/cloth_test.wiscene diff --git a/models/colorgradinglut_default.png b/Content/models/colorgradinglut_default.png similarity index 100% rename from models/colorgradinglut_default.png rename to Content/models/colorgradinglut_default.png diff --git a/models/colorgradinglut_filter.png b/Content/models/colorgradinglut_filter.png similarity index 100% rename from models/colorgradinglut_filter.png rename to Content/models/colorgradinglut_filter.png diff --git a/models/colorgradinglut_sepia.png b/Content/models/colorgradinglut_sepia.png similarity index 100% rename from models/colorgradinglut_sepia.png rename to Content/models/colorgradinglut_sepia.png diff --git a/models/cone.obj b/Content/models/cone.obj similarity index 100% rename from models/cone.obj rename to Content/models/cone.obj diff --git a/models/cornellbox.mtl b/Content/models/cornellbox.mtl similarity index 100% rename from models/cornellbox.mtl rename to Content/models/cornellbox.mtl diff --git a/models/cornellbox.obj b/Content/models/cornellbox.obj similarity index 100% rename from models/cornellbox.obj rename to Content/models/cornellbox.obj diff --git a/models/cube.obj b/Content/models/cube.obj similarity index 100% rename from models/cube.obj rename to Content/models/cube.obj diff --git a/models/cylinder.obj b/Content/models/cylinder.obj similarity index 100% rename from models/cylinder.obj rename to Content/models/cylinder.obj diff --git a/models/dojo.wiscene b/Content/models/dojo.wiscene similarity index 100% rename from models/dojo.wiscene rename to Content/models/dojo.wiscene diff --git a/models/dragon.obj b/Content/models/dragon.obj similarity index 100% rename from models/dragon.obj rename to Content/models/dragon.obj diff --git a/models/dungeon/block.wiscene b/Content/models/dungeon/block.wiscene similarity index 100% rename from models/dungeon/block.wiscene rename to Content/models/dungeon/block.wiscene diff --git a/models/dungeon/corridor.wiscene b/Content/models/dungeon/corridor.wiscene similarity index 100% rename from models/dungeon/corridor.wiscene rename to Content/models/dungeon/corridor.wiscene diff --git a/models/dungeon/crossjunction.wiscene b/Content/models/dungeon/crossjunction.wiscene similarity index 100% rename from models/dungeon/crossjunction.wiscene rename to Content/models/dungeon/crossjunction.wiscene diff --git a/models/dungeon/end.wiscene b/Content/models/dungeon/end.wiscene similarity index 100% rename from models/dungeon/end.wiscene rename to Content/models/dungeon/end.wiscene diff --git a/models/dungeon/obj_source/block.obj b/Content/models/dungeon/obj_source/block.obj similarity index 100% rename from models/dungeon/obj_source/block.obj rename to Content/models/dungeon/obj_source/block.obj diff --git a/models/dungeon/obj_source/corridor.obj b/Content/models/dungeon/obj_source/corridor.obj similarity index 100% rename from models/dungeon/obj_source/corridor.obj rename to Content/models/dungeon/obj_source/corridor.obj diff --git a/models/dungeon/obj_source/crossjunction.obj b/Content/models/dungeon/obj_source/crossjunction.obj similarity index 100% rename from models/dungeon/obj_source/crossjunction.obj rename to Content/models/dungeon/obj_source/crossjunction.obj diff --git a/models/dungeon/obj_source/end.obj b/Content/models/dungeon/obj_source/end.obj similarity index 100% rename from models/dungeon/obj_source/end.obj rename to Content/models/dungeon/obj_source/end.obj diff --git a/models/dungeon/obj_source/oddcorridor.obj b/Content/models/dungeon/obj_source/oddcorridor.obj similarity index 100% rename from models/dungeon/obj_source/oddcorridor.obj rename to Content/models/dungeon/obj_source/oddcorridor.obj diff --git a/models/dungeon/obj_source/room.obj b/Content/models/dungeon/obj_source/room.obj similarity index 100% rename from models/dungeon/obj_source/room.obj rename to Content/models/dungeon/obj_source/room.obj diff --git a/models/dungeon/obj_source/smallroomleft.obj b/Content/models/dungeon/obj_source/smallroomleft.obj similarity index 100% rename from models/dungeon/obj_source/smallroomleft.obj rename to Content/models/dungeon/obj_source/smallroomleft.obj diff --git a/models/dungeon/obj_source/start.obj b/Content/models/dungeon/obj_source/start.obj similarity index 100% rename from models/dungeon/obj_source/start.obj rename to Content/models/dungeon/obj_source/start.obj diff --git a/models/dungeon/obj_source/tjunction.obj b/Content/models/dungeon/obj_source/tjunction.obj similarity index 100% rename from models/dungeon/obj_source/tjunction.obj rename to Content/models/dungeon/obj_source/tjunction.obj diff --git a/models/dungeon/obj_source/turnleft.obj b/Content/models/dungeon/obj_source/turnleft.obj similarity index 100% rename from models/dungeon/obj_source/turnleft.obj rename to Content/models/dungeon/obj_source/turnleft.obj diff --git a/models/dungeon/obj_source/turnright.obj b/Content/models/dungeon/obj_source/turnright.obj similarity index 100% rename from models/dungeon/obj_source/turnright.obj rename to Content/models/dungeon/obj_source/turnright.obj diff --git a/models/dungeon/obj_source/upcorridor.obj b/Content/models/dungeon/obj_source/upcorridor.obj similarity index 100% rename from models/dungeon/obj_source/upcorridor.obj rename to Content/models/dungeon/obj_source/upcorridor.obj diff --git a/models/dungeon/oddcorridor.wiscene b/Content/models/dungeon/oddcorridor.wiscene similarity index 100% rename from models/dungeon/oddcorridor.wiscene rename to Content/models/dungeon/oddcorridor.wiscene diff --git a/models/dungeon/room.wiscene b/Content/models/dungeon/room.wiscene similarity index 100% rename from models/dungeon/room.wiscene rename to Content/models/dungeon/room.wiscene diff --git a/models/dungeon/smallroomleft.wiscene b/Content/models/dungeon/smallroomleft.wiscene similarity index 100% rename from models/dungeon/smallroomleft.wiscene rename to Content/models/dungeon/smallroomleft.wiscene diff --git a/models/dungeon/start.wiscene b/Content/models/dungeon/start.wiscene similarity index 100% rename from models/dungeon/start.wiscene rename to Content/models/dungeon/start.wiscene diff --git a/models/dungeon/tjunction.wiscene b/Content/models/dungeon/tjunction.wiscene similarity index 100% rename from models/dungeon/tjunction.wiscene rename to Content/models/dungeon/tjunction.wiscene diff --git a/models/dungeon/turnleft.wiscene b/Content/models/dungeon/turnleft.wiscene similarity index 100% rename from models/dungeon/turnleft.wiscene rename to Content/models/dungeon/turnleft.wiscene diff --git a/models/dungeon/turnright.wiscene b/Content/models/dungeon/turnright.wiscene similarity index 100% rename from models/dungeon/turnright.wiscene rename to Content/models/dungeon/turnright.wiscene diff --git a/models/dungeon/upcorridor.wiscene b/Content/models/dungeon/upcorridor.wiscene similarity index 100% rename from models/dungeon/upcorridor.wiscene rename to Content/models/dungeon/upcorridor.wiscene diff --git a/models/emitter_distortion.wiscene b/Content/models/emitter_distortion.wiscene similarity index 100% rename from models/emitter_distortion.wiscene rename to Content/models/emitter_distortion.wiscene diff --git a/models/emitter_dust.wiscene b/Content/models/emitter_dust.wiscene similarity index 100% rename from models/emitter_dust.wiscene rename to Content/models/emitter_dust.wiscene diff --git a/models/emitter_fireball.wiscene b/Content/models/emitter_fireball.wiscene similarity index 100% rename from models/emitter_fireball.wiscene rename to Content/models/emitter_fireball.wiscene diff --git a/models/emitter_fluid_50k.wiscene b/Content/models/emitter_fluid_50k.wiscene similarity index 100% rename from models/emitter_fluid_50k.wiscene rename to Content/models/emitter_fluid_50k.wiscene diff --git a/models/emitter_guardeffect.wiscene b/Content/models/emitter_guardeffect.wiscene similarity index 100% rename from models/emitter_guardeffect.wiscene rename to Content/models/emitter_guardeffect.wiscene diff --git a/models/emitter_hiteffect.wiscene b/Content/models/emitter_hiteffect.wiscene similarity index 100% rename from models/emitter_hiteffect.wiscene rename to Content/models/emitter_hiteffect.wiscene diff --git a/models/emitter_skinned.wiscene b/Content/models/emitter_skinned.wiscene similarity index 100% rename from models/emitter_skinned.wiscene rename to Content/models/emitter_skinned.wiscene diff --git a/models/emitter_smoke.wiscene b/Content/models/emitter_smoke.wiscene similarity index 100% rename from models/emitter_smoke.wiscene rename to Content/models/emitter_smoke.wiscene diff --git a/models/emitter_spark.wiscene b/Content/models/emitter_spark.wiscene similarity index 100% rename from models/emitter_spark.wiscene rename to Content/models/emitter_spark.wiscene diff --git a/models/fire.jpg b/Content/models/fire.jpg similarity index 100% rename from models/fire.jpg rename to Content/models/fire.jpg diff --git a/models/flare0.jpg b/Content/models/flare0.jpg similarity index 100% rename from models/flare0.jpg rename to Content/models/flare0.jpg diff --git a/models/flare1.jpg b/Content/models/flare1.jpg similarity index 100% rename from models/flare1.jpg rename to Content/models/flare1.jpg diff --git a/models/flare2.jpg b/Content/models/flare2.jpg similarity index 100% rename from models/flare2.jpg rename to Content/models/flare2.jpg diff --git a/models/flare3.jpg b/Content/models/flare3.jpg similarity index 100% rename from models/flare3.jpg rename to Content/models/flare3.jpg diff --git a/models/flare4.jpg b/Content/models/flare4.jpg similarity index 100% rename from models/flare4.jpg rename to Content/models/flare4.jpg diff --git a/models/flare5.jpg b/Content/models/flare5.jpg similarity index 100% rename from models/flare5.jpg rename to Content/models/flare5.jpg diff --git a/models/flare6.jpg b/Content/models/flare6.jpg similarity index 100% rename from models/flare6.jpg rename to Content/models/flare6.jpg diff --git a/models/girl.wiscene b/Content/models/girl.wiscene similarity index 100% rename from models/girl.wiscene rename to Content/models/girl.wiscene diff --git a/models/grassbb.png b/Content/models/grassbb.png similarity index 100% rename from models/grassbb.png rename to Content/models/grassbb.png diff --git a/models/grid.dds b/Content/models/grid.dds similarity index 100% rename from models/grid.dds rename to Content/models/grid.dds diff --git a/models/grid.obj b/Content/models/grid.obj similarity index 100% rename from models/grid.obj rename to Content/models/grid.obj diff --git a/models/hairparticle_torus.wiscene b/Content/models/hairparticle_torus.wiscene similarity index 100% rename from models/hairparticle_torus.wiscene rename to Content/models/hairparticle_torus.wiscene diff --git a/models/icosphere.obj b/Content/models/icosphere.obj similarity index 100% rename from models/icosphere.obj rename to Content/models/icosphere.obj diff --git a/models/lensflare_light.wiscene b/Content/models/lensflare_light.wiscene similarity index 100% rename from models/lensflare_light.wiscene rename to Content/models/lensflare_light.wiscene diff --git a/models/lightmap_bake_test.wiscene b/Content/models/lightmap_bake_test.wiscene similarity index 100% rename from models/lightmap_bake_test.wiscene rename to Content/models/lightmap_bake_test.wiscene diff --git a/models/orb.dds b/Content/models/orb.dds similarity index 100% rename from models/orb.dds rename to Content/models/orb.dds diff --git a/models/physics_test.wiscene b/Content/models/physics_test.wiscene similarity index 100% rename from models/physics_test.wiscene rename to Content/models/physics_test.wiscene diff --git a/models/plane.obj b/Content/models/plane.obj similarity index 100% rename from models/plane.obj rename to Content/models/plane.obj diff --git a/models/playground.wiscene b/Content/models/playground.wiscene similarity index 100% rename from models/playground.wiscene rename to Content/models/playground.wiscene diff --git a/models/repack.png b/Content/models/repack.png similarity index 100% rename from models/repack.png rename to Content/models/repack.png diff --git a/models/ripple.png b/Content/models/ripple.png similarity index 100% rename from models/ripple.png rename to Content/models/ripple.png diff --git a/models/shadows_test.wiscene b/Content/models/shadows_test.wiscene similarity index 100% rename from models/shadows_test.wiscene rename to Content/models/shadows_test.wiscene diff --git a/models/shadowspriority_point_test.wiscene b/Content/models/shadowspriority_point_test.wiscene similarity index 100% rename from models/shadowspriority_point_test.wiscene rename to Content/models/shadowspriority_point_test.wiscene diff --git a/models/shadowspriority_spot_test.wiscene b/Content/models/shadowspriority_spot_test.wiscene similarity index 100% rename from models/shadowspriority_spot_test.wiscene rename to Content/models/shadowspriority_spot_test.wiscene diff --git a/models/sky.dds b/Content/models/sky.dds similarity index 100% rename from models/sky.dds rename to Content/models/sky.dds diff --git a/models/smoke0.png b/Content/models/smoke0.png similarity index 100% rename from models/smoke0.png rename to Content/models/smoke0.png diff --git a/models/sound3D_test.wiscene b/Content/models/sound3D_test.wiscene similarity index 100% rename from models/sound3D_test.wiscene rename to Content/models/sound3D_test.wiscene diff --git a/models/suzanne.obj b/Content/models/suzanne.obj similarity index 100% rename from models/suzanne.obj rename to Content/models/suzanne.obj diff --git a/models/suzanne.wiscene b/Content/models/suzanne.wiscene similarity index 100% rename from models/suzanne.wiscene rename to Content/models/suzanne.wiscene diff --git a/models/teapot.obj b/Content/models/teapot.obj similarity index 100% rename from models/teapot.obj rename to Content/models/teapot.obj diff --git a/models/teapot.wiscene b/Content/models/teapot.wiscene similarity index 100% rename from models/teapot.wiscene rename to Content/models/teapot.wiscene diff --git a/models/torus.obj b/Content/models/torus.obj similarity index 100% rename from models/torus.obj rename to Content/models/torus.obj diff --git a/models/uvsphere.obj b/Content/models/uvsphere.obj similarity index 100% rename from models/uvsphere.obj rename to Content/models/uvsphere.obj diff --git a/models/volumetric_test.wiscene b/Content/models/volumetric_test.wiscene similarity index 100% rename from models/volumetric_test.wiscene rename to Content/models/volumetric_test.wiscene diff --git a/models/water.wav b/Content/models/water.wav similarity index 100% rename from models/water.wav rename to Content/models/water.wav diff --git a/models/waterNormalMap.jpg b/Content/models/waterNormalMap.jpg similarity index 100% rename from models/waterNormalMap.jpg rename to Content/models/waterNormalMap.jpg diff --git a/models/water_plane.wiscene b/Content/models/water_plane.wiscene similarity index 100% rename from models/water_plane.wiscene rename to Content/models/water_plane.wiscene diff --git a/models/water_test.wiscene b/Content/models/water_test.wiscene similarity index 100% rename from models/water_test.wiscene rename to Content/models/water_test.wiscene diff --git a/scripts/camera_animation_clamped.lua b/Content/scripts/camera_animation_clamped.lua similarity index 100% rename from scripts/camera_animation_clamped.lua rename to Content/scripts/camera_animation_clamped.lua diff --git a/scripts/camera_animation_repeat.lua b/Content/scripts/camera_animation_repeat.lua similarity index 100% rename from scripts/camera_animation_repeat.lua rename to Content/scripts/camera_animation_repeat.lua diff --git a/scripts/character_controller_tps.lua b/Content/scripts/character_controller_tps.lua similarity index 100% rename from scripts/character_controller_tps.lua rename to Content/scripts/character_controller_tps.lua diff --git a/scripts/debug_draw.lua b/Content/scripts/debug_draw.lua similarity index 100% rename from scripts/debug_draw.lua rename to Content/scripts/debug_draw.lua diff --git a/scripts/dungeon_generator.lua b/Content/scripts/dungeon_generator.lua similarity index 100% rename from scripts/dungeon_generator.lua rename to Content/scripts/dungeon_generator.lua diff --git a/scripts/emitter_burst.lua b/Content/scripts/emitter_burst.lua similarity index 100% rename from scripts/emitter_burst.lua rename to Content/scripts/emitter_burst.lua diff --git a/scripts/fighting_game.lua b/Content/scripts/fighting_game.lua similarity index 100% rename from scripts/fighting_game.lua rename to Content/scripts/fighting_game.lua diff --git a/scripts/hp_bar.png b/Content/scripts/hp_bar.png similarity index 100% rename from scripts/hp_bar.png rename to Content/scripts/hp_bar.png diff --git a/scripts/move_object.lua b/Content/scripts/move_object.lua similarity index 100% rename from scripts/move_object.lua rename to Content/scripts/move_object.lua diff --git a/scripts/pick.lua b/Content/scripts/pick.lua similarity index 100% rename from scripts/pick.lua rename to Content/scripts/pick.lua diff --git a/scripts/rotate_model.lua b/Content/scripts/rotate_model.lua similarity index 100% rename from scripts/rotate_model.lua rename to Content/scripts/rotate_model.lua diff --git a/scripts/set_material_color.lua b/Content/scripts/set_material_color.lua similarity index 100% rename from scripts/set_material_color.lua rename to Content/scripts/set_material_color.lua diff --git a/scripts/set_material_emissive.lua b/Content/scripts/set_material_emissive.lua similarity index 100% rename from scripts/set_material_emissive.lua rename to Content/scripts/set_material_emissive.lua diff --git a/Editor/App_Windows.cpp b/Editor/App_Windows.cpp index a778465ea..331ee2b87 100644 --- a/Editor/App_Windows.cpp +++ b/Editor/App_Windows.cpp @@ -51,7 +51,7 @@ public: main.infoDisplay.resolution = true; main.infoDisplay.fpsinfo = true; - wiRenderer::SetShaderPath("shaders/"); + wiStartupArguments::Parse(L"dx12"); } void Uninitialize() noexcept @@ -118,11 +118,6 @@ protected: // Event handlers void OnActivated(CoreApplicationView const& /*applicationView*/, IActivatedEventArgs const& args) { - if (args.Kind() == ActivationKind::Launch) - { - auto launchArgs = (const LaunchActivatedEventArgs*)(&args); - wiStartupArguments::Parse(launchArgs->Arguments().data()); - } CoreWindow::GetForCurrentThread().Activate(); } diff --git a/Editor/CMakeLists.txt b/Editor/CMakeLists.txt index 0df125fbe..edb91c90e 100644 --- a/Editor/CMakeLists.txt +++ b/Editor/CMakeLists.txt @@ -53,4 +53,19 @@ else () WickedEngine Threads::Threads ) + + # Copy shaders to build and source folders just to be safe: + add_custom_command( + TARGET WickedEngineEditor POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/WickedEngine/shaders/spirv ${CMAKE_CURRENT_SOURCE_DIR}/shaders/spirv + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/WickedEngine/shaders/spirv ${CMAKE_CURRENT_BINARY_DIR}/shaders/spirv + ) + endif () + +# Copy content to build folder: +add_custom_command( + TARGET WickedEngineEditor POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/images ${CMAKE_CURRENT_BINARY_DIR}/images +) + diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index 0687c5d83..28b64164f 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -342,30 +342,27 @@ void EditorComponent::ResizeLayout() //////////////////////////////////////////////////////////////////////////////////// - translatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 5 - 25, 0)); + translatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 4 - 25, 0)); translatorCheckBox.SetSize(XMFLOAT2(18, 18)); - isScalatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 5 - 25 - 40 * 2, 22)); + isScalatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 4 - 25 - 40 * 2, 22)); isScalatorCheckBox.SetSize(XMFLOAT2(18, 18)); - isRotatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 5 - 25 - 40 * 1, 22)); + isRotatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 4 - 25 - 40 * 1, 22)); isRotatorCheckBox.SetSize(XMFLOAT2(18, 18)); - isTranslatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 5 - 25, 22)); + isTranslatorCheckBox.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 4 - 25, 22)); isTranslatorCheckBox.SetSize(XMFLOAT2(18, 18)); - saveButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 5, 0)); + saveButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 4, 0)); saveButton.SetSize(XMFLOAT2(100, 40)); - modelButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 4, 0)); + modelButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 3, 0)); modelButton.SetSize(XMFLOAT2(100, 40)); - scriptButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 3, 0)); + scriptButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 2, 0)); scriptButton.SetSize(XMFLOAT2(100, 40)); - shaderButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 2, 0)); - shaderButton.SetSize(XMFLOAT2(100, 40)); - clearButton.SetPos(XMFLOAT2(screenW - 50 - 55 - 105 * 1, 0)); clearButton.SetSize(XMFLOAT2(100, 40)); @@ -770,19 +767,6 @@ void EditorComponent::Load() GetGUI().AddWidget(&scriptButton); - shaderButton.Create("Reload Shaders"); - shaderButton.SetTooltip("Reload shaders from the default directory..."); - shaderButton.SetColor(wiColor(255, 33, 140, 180), wiWidget::WIDGETSTATE::IDLE); - shaderButton.SetColor(wiColor(255, 100, 140, 255), wiWidget::WIDGETSTATE::FOCUS); - shaderButton.font.params.size -= 2; - shaderButton.OnClick([](wiEventArgs args) { - - wiRenderer::ReloadShaders(); - - }); - GetGUI().AddWidget(&shaderButton); - - clearButton.Create("Clear World"); clearButton.SetTooltip("Delete every model from the scene"); clearButton.SetColor(wiColor(255, 173, 43, 180), wiWidget::WIDGETSTATE::IDLE); diff --git a/Editor/Editor.h b/Editor/Editor.h index cadfdbfc4..9a055c0d6 100644 --- a/Editor/Editor.h +++ b/Editor/Editor.h @@ -93,7 +93,6 @@ public: wiComboBox saveModeComboBox; wiButton modelButton; wiButton scriptButton; - wiButton shaderButton; wiButton clearButton; wiButton helpButton; wiButton exitButton; diff --git a/Editor/Editor_SOURCE.vcxitems b/Editor/Editor_SOURCE.vcxitems index 27208bf8c..e7ffd0977 100644 --- a/Editor/Editor_SOURCE.vcxitems +++ b/Editor/Editor_SOURCE.vcxitems @@ -92,6 +92,21 @@ + + true + true + Document + + + true + true + Document + + + true + true + Document + true true diff --git a/Editor/Editor_SOURCE.vcxitems.filters b/Editor/Editor_SOURCE.vcxitems.filters index 11cdf1fe7..6b6a183b9 100644 --- a/Editor/Editor_SOURCE.vcxitems.filters +++ b/Editor/Editor_SOURCE.vcxitems.filters @@ -115,4 +115,9 @@ images + + + + + \ No newline at end of file diff --git a/Editor/Editor_UWP.vcxproj b/Editor/Editor_UWP.vcxproj index 7e0800e89..109ba9e88 100644 --- a/Editor/Editor_UWP.vcxproj +++ b/Editor/Editor_UWP.vcxproj @@ -45,8 +45,7 @@ - - + @@ -74,7 +73,7 @@ stdafx.h $(IntDir)stdafx.pch - $(ProjectDir);$(IntermediateOutputPath);../WickedEngine;%(AdditionalIncludeDirectories) + $(ProjectDir);$(IntermediateOutputPath);$(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4453;28204 _DEBUG;%(PreprocessorDefinitions) @@ -90,13 +89,14 @@ PerMonitorHighDPIAware - $(OutDir)shaders/%(Filename).cso + $(OutDir)shaders/hlsl5/%(Filename).cso 5.0 false false - IF NOT EXIST "$(OutDir)shaders\" mkdir "$(OutDir)shaders\" + + @@ -108,7 +108,7 @@ stdafx.h $(IntDir)stdafx.pch - $(ProjectDir);$(IntermediateOutputPath);../WickedEngine;%(AdditionalIncludeDirectories) + $(ProjectDir);$(IntermediateOutputPath);$(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4453;28204 NDEBUG;%(PreprocessorDefinitions) @@ -124,11 +124,12 @@ PerMonitorHighDPIAware - $(OutDir)shaders/%(Filename).cso + $(OutDir)shaders/hlsl5/%(Filename).cso 5.0 - IF NOT EXIST "$(OutDir)shaders\" mkdir "$(OutDir)shaders\" + + diff --git a/Editor/Editor_Windows.vcxproj b/Editor/Editor_Windows.vcxproj index 878bc5b91..5dfa26291 100644 --- a/Editor/Editor_Windows.vcxproj +++ b/Editor/Editor_Windows.vcxproj @@ -64,7 +64,7 @@ Level3 Disabled _DEBUG;_WINDOWS;%(PreprocessorDefinitions) - ../WickedEngine;%(AdditionalIncludeDirectories) + $(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) $(IntDir)$(TargetName).pch true stdcpp17 @@ -72,7 +72,7 @@ Windows true - $(SolutionDir)BUILD\$(Platform)\$(Configuration);$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) false @@ -85,7 +85,8 @@ shaders/%(Filename).cso - xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y + + @@ -96,7 +97,7 @@ true true NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - ../WickedEngine;%(AdditionalIncludeDirectories) + $(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) true MultiThreaded $(IntDir)$(TargetName).pch @@ -108,14 +109,15 @@ true true true - $(SolutionDir)BUILD\$(Platform)\$(Configuration);$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) 5.0 shaders/%(Filename).cso - xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y + + diff --git a/Editor/PaintToolWindow.cpp b/Editor/PaintToolWindow.cpp index 9507e9df9..83109d7d8 100644 --- a/Editor/PaintToolWindow.cpp +++ b/Editor/PaintToolWindow.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #include "Editor.h" #include "PaintToolWindow.h" -#include "ShaderInterop_Paint.h" +#include "shaders/ShaderInterop_Paint.h" #include #include diff --git a/Editor/Translator.cpp b/Editor/Translator.cpp index 225a1eca4..9c200ac1e 100644 --- a/Editor/Translator.cpp +++ b/Editor/Translator.cpp @@ -3,7 +3,7 @@ #include "wiRenderer.h" #include "wiInput.h" #include "wiMath.h" -#include "ShaderInterop_Renderer.h" +#include "shaders/ShaderInterop_Renderer.h" #include "wiEvent.h" using namespace wiGraphics; diff --git a/Editor/main_Windows.cpp b/Editor/main_Windows.cpp index d52820108..ec4f66bd1 100644 --- a/Editor/main_Windows.cpp +++ b/Editor/main_Windows.cpp @@ -248,6 +248,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) break; case WM_SETFOCUS: editor.is_window_active = true; + std::thread([] { + wiBackLog::post("[Shader check] Started..."); + if (wiShaderCompiler::CheckRegisteredShadersOutdated()) + { + wiBackLog::post("[Shader check] Changes detected, initiating reload..."); + wiEvent::Subscribe_Once(SYSTEM_EVENT_THREAD_SAFE_POINT, [](uint64_t userdata) { + wiRenderer::ReloadShaders(); + }); + } + else + { + wiBackLog::post("[Shader check] All up to date"); + } + }).detach(); break; case WM_PAINT: { diff --git a/README.md b/README.md index 0fef6f933..c0c5974da 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + # Wicked Engine @@ -11,40 +11,44 @@
- -Wicked Engine is an open-source game engine written in C++. It is easy to use, high performance and feature rich. There are no external dependencies, but some free libraries are included as part of the source code. The MIT license means that anyone is free to download, modify, and share it. This project is hosted on GitHub. + +Wicked Engine is an open-source C++ engine focusing on modern rendering techniques and performance. Use this as a framework for your graphics projects, or learning. Some programming skills are required for the best experience, but some simple tools like an Editor are also included. It is free to be used for anything good.
+This project is hosted on GitHub. -- [Documentation](Documentation/WickedEngine-Documentation.md)
-- [Scripting API Documentation](Documentation/ScriptingAPI-Documentation.md)
+- [Documentation](Content/Documentation/WickedEngine-Documentation.md)
+- [Scripting API Documentation](Content/Documentation/ScriptingAPI-Documentation.md)
- [Features](features.txt)
-- [Devblog](https://turanszkij.wordpress.com/)
+- [Devblog](https://wickedengine.net/)
- [Videos](https://www.youtube.com/playlist?list=PLLN-1FTGyLU_HJoC5zx6hJkB3D2XLiaxS)
-You can download the engine by using Git and cloning the repository, or downloading it as zip. This will give you the full C++ source code that you must build for yourself. Building is simply pressing F5 in Visual Studio. You can also choose to download a pre-built version of the Editor or Tests applications, which will allow you to load content and write LUA scripts.
+You can download the source code by using Git and cloning the repository, or downloading it as zip. You can also choose to download a pre-built version of the Editor or Tests applications, which will allow you to try out features, load content and execute LUA scripts.
+Tip: try loading models or scripts from the Content folder using the Editor app to see how everything works. +
-![Emitter](https://turanszkij.files.wordpress.com/2019/02/emitterskinned2.gif) ![Drone](https://turanszkij.files.wordpress.com/2018/11/drone_anim.gif)
- + ### Platforms: - Windows 10 Desktop [Visual Studio 2019] - UWP [Visual Studio 2019] -- Linux [CMake 3.7] +- Linux (experimental) [CMake 3.7] ### How to build: #### Windows To build Wicked Engine for Windows 10, use Visual Studio and the provided `WickedEngine.sln` solution file. There are a couple of projects that you can run up front: Editor, Tests and Template. You just have to set either as startup project and press F5 in Visual Studio to build and run. For optimal performance, choose `Release` mode, for the best debugging experience, choose `Debug` mode. - + -If you want to develop an application that uses Wicked Engine, you will have to link to WickedEngine_Windows.lib or WickedEngine_UWP.lib.lib and `#include "WickedEngine.h"` into the source code. For examples, look at the Template, Editor and Tests projects in Visual Studio that do this. +If you want to develop an application that uses Wicked Engine, you can build the WickedEngine static library project for the appropriate platform, such as `WickedEngine_Windows` and link against it. Including the `"WickedEngine.h"` header will attempt to link the binaries for the appropriate platform, but search directories should be set up beforehand. For example, you can set additional library directories to `$(SolutionDir)BUILD\$(Platform)\$(Configuration)` by default. For examples, see the `Template`, `Tests`, and `Editor` projects. You can also dowload prebuilt and packaged versions of the Editor and Tests here: [![Github Build Status](https://github.com/turanszkij/WickedEngine/workflows/Build/badge.svg)](https://github.com/turanszkij/WickedEngine/actions) If you have questions or stuck, please use the `windows` communication channel on Discord: [![Discord chat](https://img.shields.io/discord/602811659224088577?logo=discord)](https://discord.gg/CFjRYmE) -Note: Building 32-bit and ARM versions are possible, but no longer provided by default. The developer will need to configure the solution themselves for these platforms. For ARM platform, also use the `-D BT_USE_DOUBLE_PRECISION=1` definition when compiling. +Note: Building 32-bit and ARM versions should be possible, but no longer provided by default. You will need to configure the solution for these platforms yourself if you want this. For ARM platform, also use the `-D BT_USE_DOUBLE_PRECISION=1` definition when compiling. + +Cmake: It is possible to build the windows version with Cmake, but the recommended way is to use the provided WickedEngine.sln file with Visual Studio as this is the most tested method. #### Linux The Linux support is experimental. You can find a sample build script for Ubuntu 20.04 [here](.github/workflows/build.yml) (in the linux section). You might need to install some dependencies, such as Vulkan SDK 1.2 or greater (to get DirectXShaderCompiler), SDL2, cmake 3.7 and g++ compiler (C++ 17 compliant version). For Ubuntu 20.04, you can use the following commands to install dependencies: @@ -76,7 +80,7 @@ If you have questions or stuck, please use the `linux` communication channel on #### Initialization (C++): - + ```cpp // Include engine headers: @@ -178,11 +182,11 @@ For more code samples and advanced use cases, please see the example projects, l ### Scripting API: - + You can use a great number of engine features through the Lua scripting api, which can even be used real time while the program is running. The included applications, like the Editor, contain a scripting input method toggled by the "Home" key. A blue screen will be presented where the user can type in LUA commands. It is very minimal in regards to input methods. -For further details, please check the scripting API documentation: [Wicked Engine Scripting API](Documentation/ScriptingAPI-Documentation.md) +For further details, please check the scripting API documentation: [Wicked Engine Scripting API](Content/Documentation/ScriptingAPI-Documentation.md) ### Model import/export: @@ -194,11 +198,10 @@ In addition, the Editor supports the importing of some common model formats (the - GLTF 2.0 The preferred workflow is to import models into the Editor, and save them as WISCENE, then any Wicked Engine application can open them.
-(The old Blender exporter script is now not supported! (from version 0.21.0), because the engine was redesigned with Entity-Component System at its core. The old object oriented version can be found [here].) ### Graphics API: -The default renderer is DirectX 11 on Windows and Vulkan on Linux. There is also an optional DirectX12 renderer for Windows. +The default renderer is `DirectX 11` on Windows and `Vulkan` on Linux. There is also an optional `DirectX 12` renderer for Windows. You can specify command line arguments (without any prefix) to switch between render devices or other settings. Currently the list of options: @@ -207,11 +210,11 @@ You can specify command line arguments (without any prefix) to switch between re - + - + @@ -223,26 +226,7 @@ You can specify command line arguments (without any prefix) to switch between re
dx12Use DirectX 12 rendering device*Use DirectX 12 rendering device
vulkanUse Vulkan rendering device**Use Vulkan rendering device
debugdevice
- - -* *DX12 will try to load shaders from WickedEngine/shaders/hlsl6 directory. -HLSL6 shaders can be compiled by Rebuilding the Shaders_HLSL6 project from within Visual Studio (Python 3 required for building). - -* **Vulkan support will be built into the application if the Vulkan SDK is installed on the build machine. -Vulkan will try to load shaders from WickedEngine/shaders/spirv directory. -SPIRV shaders can be compiled by Rebuilding the Shaders_SPIRV project from within Visual Studio (Python 3 required for building). -For Linux builds, spirv shaders will be built by using Cmake system. - -
- -### Contributions - -Contributions can be submitted on Github by following the steps below: -1) Open an issue and describe the feature or patch in detail -2) The feature or patch will be discussed in the issue, and determined if it would benefit the project -3) After the request is accepted, open a pull request and reference the issue with #issue_number -4) Code review will be conducted and the pull request will be merged when it meets the requirements -5) When the pull request passes, you will be added to the credits as a contributor and your name shall be remembered by future generations +
@@ -254,7 +238,7 @@ Contributions can be submitted on Github by following the steps below:
-### Finally, take a look at some screenshots: +### Screenshots: Sponza scene with voxel GI enabled: ![Sponza](https://turanszkij.files.wordpress.com/2020/08/vxgi_sponza_small.png) diff --git a/Template_UWP/Main.cpp b/Template_UWP/Main.cpp index 7ad4b9c42..d58c51853 100644 --- a/Template_UWP/Main.cpp +++ b/Template_UWP/Main.cpp @@ -49,8 +49,6 @@ public: main.infoDisplay.watermark = true; main.infoDisplay.resolution = true; main.infoDisplay.fpsinfo = true; - - wiRenderer::SetShaderPath("shaders/"); } void Uninitialize() noexcept @@ -117,11 +115,6 @@ protected: // Event handlers void OnActivated(CoreApplicationView const & /*applicationView*/, IActivatedEventArgs const & args) { - if (args.Kind() == ActivationKind::Launch) - { - auto launchArgs = (const LaunchActivatedEventArgs*)(&args); - wiStartupArguments::Parse(launchArgs->Arguments().data()); - } CoreWindow::GetForCurrentThread().Activate(); } diff --git a/Template_UWP/Template_UWP.vcxproj b/Template_UWP/Template_UWP.vcxproj index c5aa03081..903cd2a3f 100644 --- a/Template_UWP/Template_UWP.vcxproj +++ b/Template_UWP/Template_UWP.vcxproj @@ -43,9 +43,7 @@
- - - + @@ -72,7 +70,7 @@ pch.h $(IntDir)pch.pch - $(ProjectDir);$(IntermediateOutputPath);../WickedEngine;%(AdditionalIncludeDirectories) + $(ProjectDir);$(IntermediateOutputPath);$(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4453;28204 _DEBUG;%(PreprocessorDefinitions) @@ -88,7 +86,8 @@ - IF NOT EXIST "$(OutDir)shaders\" mkdir "$(OutDir)shaders\" + + false @@ -98,7 +97,7 @@ 5.0 - $(OutDir)shaders/%(Filename).cso + $(OutDir)shaders/hlsl5/%(Filename).cso @@ -110,7 +109,7 @@ pch.h $(IntDir)pch.pch - $(ProjectDir);$(IntermediateOutputPath);../WickedEngine;%(AdditionalIncludeDirectories) + $(ProjectDir);$(IntermediateOutputPath);$(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) /bigobj %(AdditionalOptions) 4453;28204 NDEBUG;%(PreprocessorDefinitions) @@ -126,11 +125,12 @@ - IF NOT EXIST "$(OutDir)shaders\" mkdir "$(OutDir)shaders\" + + 5.0 - $(OutDir)shaders/%(Filename).cso + $(OutDir)shaders/hlsl5/%(Filename).cso @@ -159,8 +159,913 @@ + + true + Document + true + + + true + Document + true + + + true + Document + true + + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + + Document + + diff --git a/Template_UWP/Template_UWP.vcxproj.filters b/Template_UWP/Template_UWP.vcxproj.filters index b20708c84..904359c08 100644 --- a/Template_UWP/Template_UWP.vcxproj.filters +++ b/Template_UWP/Template_UWP.vcxproj.filters @@ -43,4 +43,9 @@ + + + + + \ No newline at end of file diff --git a/Template_Windows/Template_Windows.vcxproj b/Template_Windows/Template_Windows.vcxproj index 9877c397d..2fd04a674 100644 --- a/Template_Windows/Template_Windows.vcxproj +++ b/Template_Windows/Template_Windows.vcxproj @@ -62,7 +62,7 @@ true NDEBUG;_WINDOWS;%(PreprocessorDefinitions) true - ../WickedEngine;%(AdditionalIncludeDirectories) + $(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) MultiThreaded true stdcpp17 @@ -72,10 +72,12 @@ true true true - $(SolutionDir)BUILD\$(Platform)\$(Configuration);$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y + xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\dxil.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\d3dcompiler_47.dll" "$(OutDir)" /c /y @@ -85,17 +87,19 @@ Disabled _DEBUG;_WINDOWS;%(PreprocessorDefinitions) true - ../WickedEngine;%(AdditionalIncludeDirectories) + $(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) true stdcpp17 Windows true - $(SolutionDir)BUILD\$(Platform)\$(Configuration);$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y + xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\dxil.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\d3dcompiler_47.dll" "$(OutDir)" /c /y @@ -126,6 +130,23 @@ {06163dcb-b183-4ed9-9c62-13ef1658e049} + + + true + Document + true + + + true + Document + true + + + true + Document + true + + diff --git a/Template_Windows/Template_Windows.vcxproj.filters b/Template_Windows/Template_Windows.vcxproj.filters index d3f1243f1..e5bb75190 100644 --- a/Template_Windows/Template_Windows.vcxproj.filters +++ b/Template_Windows/Template_Windows.vcxproj.filters @@ -47,4 +47,9 @@ Resource Files + + + + + \ No newline at end of file diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 893c9147a..b838befd7 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -32,8 +32,25 @@ else() WickedEngine Threads::Threads ) + + # Copy shaders to build and source folders just to be safe: + add_custom_command( + TARGET Tests POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/WickedEngine/shaders/spirv ${CMAKE_CURRENT_SOURCE_DIR}/shaders/spirv + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/WickedEngine/shaders/spirv ${CMAKE_CURRENT_BINARY_DIR}/shaders/spirv + ) + endif () if (MSVC) set_property(TARGET Tests PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") endif () + + +# Copy content to build folder: +add_custom_command( + TARGET Tests POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/images ${CMAKE_CURRENT_BINARY_DIR}/images + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/sound ${CMAKE_CURRENT_BINARY_DIR}/sound + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Content ${CMAKE_CURRENT_BINARY_DIR}/../Content +) diff --git a/Tests/Tests.cpp b/Tests/Tests.cpp index 2c1b32ebe..1dc73f4f6 100644 --- a/Tests/Tests.cpp +++ b/Tests/Tests.cpp @@ -166,16 +166,16 @@ void TestsRenderer::Load() } case 1: wiRenderer::SetTemporalAAEnabled(true); - wiScene::LoadModel("../models/teapot.wiscene"); + wiScene::LoadModel("../Content/models/teapot.wiscene"); break; case 2: - wiScene::LoadModel("../models/emitter_smoke.wiscene"); + wiScene::LoadModel("../Content/models/emitter_smoke.wiscene"); break; case 3: - wiScene::LoadModel("../models/emitter_skinned.wiscene"); + wiScene::LoadModel("../Content/models/emitter_skinned.wiscene"); break; case 4: - wiScene::LoadModel("../models/hairparticle_torus.wiscene", XMMatrixTranslation(0, 1, 0)); + wiScene::LoadModel("../Content/models/hairparticle_torus.wiscene", XMMatrixTranslation(0, 1, 0)); break; case 5: wiRenderer::SetToDrawGridHelper(true); @@ -183,18 +183,18 @@ void TestsRenderer::Load() break; case 6: wiRenderer::SetTemporalAAEnabled(true); - wiScene::LoadModel("../models/water_test.wiscene", XMMatrixTranslation(0, 1, 0)); + wiScene::LoadModel("../Content/models/water_test.wiscene", XMMatrixTranslation(0, 1, 0)); break; case 7: wiRenderer::SetTemporalAAEnabled(true); - wiScene::LoadModel("../models/shadows_test.wiscene", XMMatrixTranslation(0, 1, 0)); + wiScene::LoadModel("../Content/models/shadows_test.wiscene", XMMatrixTranslation(0, 1, 0)); break; case 8: wiRenderer::SetTemporalAAEnabled(true); - wiScene::LoadModel("../models/physics_test.wiscene"); + wiScene::LoadModel("../Content/models/physics_test.wiscene"); break; case 9: - wiScene::LoadModel("../models/cloth_test.wiscene", XMMatrixTranslation(0, 3, 4)); + wiScene::LoadModel("../Content/models/cloth_test.wiscene", XMMatrixTranslation(0, 3, 4)); break; case 10: RunJobSystemTest(); @@ -204,7 +204,7 @@ void TestsRenderer::Load() break; case 12: wiRenderer::SetTemporalAAEnabled(true); - wiScene::LoadModel("../models/volumetric_test.wiscene", XMMatrixTranslation(0, 0, 4)); + wiScene::LoadModel("../Content/models/volumetric_test.wiscene", XMMatrixTranslation(0, 0, 4)); break; case 13: RunSpriteTest(); @@ -212,7 +212,7 @@ void TestsRenderer::Load() case 14: wiRenderer::GetDevice()->SetVSyncEnabled(false); // turn off vsync if we can to accelerate the baking wiRenderer::SetTemporalAAEnabled(true); - wiScene::LoadModel("../models/lightmap_bake_test.wiscene", XMMatrixTranslation(0, 0, 4)); + wiScene::LoadModel("../Content/models/lightmap_bake_test.wiscene", XMMatrixTranslation(0, 0, 4)); break; case 15: RunNetworkTest(); @@ -236,7 +236,7 @@ void TestsRenderer::Load() case 17: { Scene scene; - LoadModel(scene, "../models/girl.wiscene", XMMatrixScaling(0.7f, 0.7f, 0.7f)); + LoadModel(scene, "../Content/models/girl.wiscene", XMMatrixScaling(0.7f, 0.7f, 0.7f)); ik_entity = scene.Entity_FindByName("mano_L"); // hand bone in girl.wiscene if (ik_entity != INVALID_ENTITY) @@ -269,7 +269,7 @@ void TestsRenderer::Load() case 18: { - wiScene::LoadModel("../models/suzanne.wiscene"); + wiScene::LoadModel("../Content/models/suzanne.wiscene"); wiProfiler::SetEnabled(true); Scene& scene = wiScene::GetScene(); scene.Entity_CreateLight("testlight", XMFLOAT3(0, 2, -4), XMFLOAT3(1, 1, 1), 4, 10); @@ -538,7 +538,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, no animation: { - static wiSprite sprite("../images/logo_small.png"); + static wiSprite sprite("../Content/logo_small.png"); sprite.params = params; AddSprite(&sprite); @@ -554,7 +554,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, fade animation: { - static wiSprite sprite("../images/logo_small.png"); + static wiSprite sprite("../Content/logo_small.png"); sprite.params = params; sprite.anim = wiSprite::Anim(); sprite.anim.fad = 1.2f; // (you can also do opacity animation with sprite.anim.opa) @@ -573,7 +573,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, wobble animation: { - static wiSprite sprite("../images/logo_small.png"); + static wiSprite sprite("../Content/logo_small.png"); sprite.params = params; sprite.anim = wiSprite::Anim(); sprite.anim.wobbleAnim.amount = XMFLOAT2(0.11f, 0.18f); @@ -592,7 +592,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, rotate animation: { - static wiSprite sprite("../images/logo_small.png"); + static wiSprite sprite("../Content/logo_small.png"); sprite.params = params; sprite.anim = wiSprite::Anim(); sprite.anim.rot = 2.8f; @@ -611,7 +611,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, movingtex: { - static wiSprite sprite("images/movingtex.png", "../images/logo_small.png"); // first param is the texture we will display (and also scroll here). Second param is a mask texture + static wiSprite sprite("images/movingtex.png", "../Content/logo_small.png"); // first param is the texture we will display (and also scroll here). Second param is a mask texture // Don't overwrite all params for this, because we want to keep the mask... sprite.params.pos = params.pos; sprite.params.siz = params.siz; diff --git a/Tests/Tests.vcxproj b/Tests/Tests.vcxproj index 44489926b..3955b2d27 100644 --- a/Tests/Tests.vcxproj +++ b/Tests/Tests.vcxproj @@ -65,7 +65,7 @@ true NDEBUG;_WINDOWS;%(PreprocessorDefinitions) true - ../WickedEngine;%(AdditionalIncludeDirectories) + $(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) MultiThreaded true stdcpp17 @@ -75,10 +75,12 @@ true true true - $(SolutionDir)BUILD\$(Platform)\$(Configuration);$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y + xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\dxil.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\d3dcompiler_47.dll" "$(OutDir)" /c /y @@ -88,7 +90,7 @@ Disabled _DEBUG;_WINDOWS;%(PreprocessorDefinitions) true - ../WickedEngine;%(AdditionalIncludeDirectories) + $(SolutionDir)WickedEngine;%(AdditionalIncludeDirectories) MultiThreadedDebugDLL true stdcpp17 @@ -96,10 +98,12 @@ Windows true - $(SolutionDir)BUILD\$(Platform)\$(Configuration);$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y + xcopy "$(SolutionDir)WickedEngine\dxcompiler.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\dxil.dll" "$(OutDir)" /c /y +xcopy "$(SolutionDir)WickedEngine\d3dcompiler_47.dll" "$(OutDir)" /c /y @@ -131,6 +135,21 @@ + + true + Document + true + + + true + Document + true + + + true + Document + true + true diff --git a/Tests/Tests.vcxproj.filters b/Tests/Tests.vcxproj.filters index 8c4e1a2fc..99ffd102b 100644 --- a/Tests/Tests.vcxproj.filters +++ b/Tests/Tests.vcxproj.filters @@ -67,4 +67,9 @@ sound + + + + + \ No newline at end of file diff --git a/Tests/test_script.lua b/Tests/test_script.lua index 20469e5e2..9ce0f3328 100644 --- a/Tests/test_script.lua +++ b/Tests/test_script.lua @@ -4,15 +4,15 @@ backlog_post("Begin script: test_script.lua"); -- Load a model: -local parent = LoadModel("../models/teapot.wiscene"); -LoadModel("../models/cameras.wiscene"); +local parent = LoadModel("../Content/models/teapot.wiscene"); +LoadModel("../Content/models/cameras.wiscene"); -- Load camera sample script: -dofile("../scripts/camera_animation_repeat.lua"); +dofile("../Content/scripts/camera_animation_repeat.lua"); ToggleCameraAnimation(); -- Load an image: -local sprite = Sprite("../images/logo_small.png"); +local sprite = Sprite("../logo_small.png"); sprite.SetParams(ImageParams(100,100,128,128)); -- Set this image as renderable to the active component: local component = main.GetActivePath(); diff --git a/WickedEngine.sln b/WickedEngine.sln index 853fc92b3..a66963732 100644 --- a/WickedEngine.sln +++ b/WickedEngine.sln @@ -26,12 +26,9 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WickedEngine_Windows", "WickedEngine\WickedEngine_Windows.vcxproj", "{06163DCB-B183-4ED9-9C62-13EF1658E049}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WickedEngine_UWP", "WickedEngine\WickedEngine_UWP.vcxproj", "{60DA258F-E95F-4CF4-A46B-17D80644464B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Content", "Content.vcxitems", "{C48F6BFF-F91B-4DB5-98B5-15287DFB7C95}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Shaders_SOURCE", "WickedEngine\Shaders_SOURCE.vcxitems", "{92E86448-0724-4387-ABAC-96E63EDF4190}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Shaders_HLSL6", "WickedEngine\Shaders_HLSL6.vcxproj", "{9C8F8910-CCA3-41CB-A2FA-3545CDD5D8BF}" + ProjectSection(ProjectDependencies) = postProject + {3B74A7FE-CED7-4723-8824-AC708A865B98} = {3B74A7FE-CED7-4723-8824-AC708A865B98} + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Supplementary", "Supplementary", "{BF8FCAB8-D7D3-4DAE-92DE-4B5037E9A0ED}" ProjectSection(SolutionItems) = preProject @@ -48,44 +45,26 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Supplementary", "Supplement README.md = README.md EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Shaders_SPIRV", "WickedEngine\Shaders_SPIRV.vcxproj", "{DF832DE3-02FA-4D00-B853-1229A9505E14}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{6C5B74BD-2300-47A1-8FE1-DB88D6F55959}" - ProjectSection(SolutionItems) = preProject - Documentation\ScriptingAPI-Documentation.md = Documentation\ScriptingAPI-Documentation.md - Documentation\WickedEngine-Documentation.md = Documentation\WickedEngine-Documentation.md +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OfflineShaderCompiler", "WickedEngine\OfflineShaderCompiler.vcxproj", "{3B74A7FE-CED7-4723-8824-AC708A865B98}" + ProjectSection(ProjectDependencies) = postProject + {06163DCB-B183-4ED9-9C62-13EF1658E049} = {06163DCB-B183-4ED9-9C62-13EF1658E049} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{3257CB8C-789A-4370-88CB-6DB5D77D300D}" - ProjectSection(SolutionItems) = preProject - scripts\camera_animation_clamped.lua = scripts\camera_animation_clamped.lua - scripts\camera_animation_repeat.lua = scripts\camera_animation_repeat.lua - scripts\character_controller_tps.lua = scripts\character_controller_tps.lua - scripts\debug_draw.lua = scripts\debug_draw.lua - scripts\dungeon_generator.lua = scripts\dungeon_generator.lua - scripts\emitter_burst.lua = scripts\emitter_burst.lua - scripts\fighting_game.lua = scripts\fighting_game.lua - scripts\move_object.lua = scripts\move_object.lua - scripts\pick.lua = scripts\pick.lua - scripts\rotate_model.lua = scripts\rotate_model.lua - scripts\set_material_color.lua = scripts\set_material_color.lua - scripts\set_material_emissive.lua = scripts\set_material_emissive.lua - EndProjectSection +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Shaders_SOURCE", "WickedEngine\shaders\Shaders_SOURCE.vcxitems", "{92E86448-0724-4387-ABAC-96E63EDF4190}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Content", "Content\Content.vcxitems", "{C48F6BFF-F91B-4DB5-98B5-15287DFB7C95}" EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution - WickedEngine\Shaders_SOURCE.vcxitems*{06163dcb-b183-4ed9-9c62-13ef1658e049}*SharedItemsImports = 4 WickedEngine\WickedEngine_SOURCE.vcxitems*{06163dcb-b183-4ed9-9c62-13ef1658e049}*SharedItemsImports = 4 WickedEngine\WickedEngine_SOURCE.vcxitems*{45d41acc-2c3c-43d2-bc10-02aa73ffc7c7}*SharedItemsImports = 9 Editor\Editor_SOURCE.vcxitems*{5fe97b9b-a445-4eea-a42d-9de60b891d48}*SharedItemsImports = 4 WickedEngine\WickedEngine_SOURCE.vcxitems*{60da258f-e95f-4cf4-a46b-17d80644464b}*SharedItemsImports = 4 Editor\Editor_SOURCE.vcxitems*{867febca-09c4-4fe7-8a4c-4d9b1c27e7d0}*SharedItemsImports = 9 - WickedEngine\Shaders_SOURCE.vcxitems*{92e86448-0724-4387-abac-96e63edf4190}*SharedItemsImports = 9 - WickedEngine\Shaders_SOURCE.vcxitems*{c222218b-b6d1-406b-b2c0-8c1ced4a8d19}*SharedItemsImports = 4 - Content.vcxitems*{c48f6bff-f91b-4db5-98b5-15287dfb7c95}*SharedItemsImports = 9 - Content.vcxitems*{fa78bfad-4b23-4a6b-92fa-a48ce56bed03}*SharedItemsImports = 4 + WickedEngine\shaders\Shaders_SOURCE.vcxitems*{92e86448-0724-4387-abac-96e63edf4190}*SharedItemsImports = 9 + Content\Content.vcxitems*{c48f6bff-f91b-4db5-98b5-15287dfb7c95}*SharedItemsImports = 9 + Content\Content.vcxitems*{fa78bfad-4b23-4a6b-92fa-a48ce56bed03}*SharedItemsImports = 4 Editor\Editor_SOURCE.vcxitems*{fa78bfad-4b23-4a6b-92fa-a48ce56bed03}*SharedItemsImports = 4 - WickedEngine\Shaders_SOURCE.vcxitems*{fa78bfad-4b23-4a6b-92fa-a48ce56bed03}*SharedItemsImports = 4 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -124,22 +103,14 @@ Global {60DA258F-E95F-4CF4-A46B-17D80644464B}.Debug|x64.Build.0 = Debug|x64 {60DA258F-E95F-4CF4-A46B-17D80644464B}.Release|x64.ActiveCfg = Release|x64 {60DA258F-E95F-4CF4-A46B-17D80644464B}.Release|x64.Build.0 = Release|x64 - {9C8F8910-CCA3-41CB-A2FA-3545CDD5D8BF}.Debug|x64.ActiveCfg = Release|x64 - {9C8F8910-CCA3-41CB-A2FA-3545CDD5D8BF}.Debug|x64.Build.0 = Release|x64 - {9C8F8910-CCA3-41CB-A2FA-3545CDD5D8BF}.Release|x64.ActiveCfg = Release|x64 - {9C8F8910-CCA3-41CB-A2FA-3545CDD5D8BF}.Release|x64.Build.0 = Release|x64 - {DF832DE3-02FA-4D00-B853-1229A9505E14}.Debug|x64.ActiveCfg = Release|x64 - {DF832DE3-02FA-4D00-B853-1229A9505E14}.Debug|x64.Build.0 = Release|x64 - {DF832DE3-02FA-4D00-B853-1229A9505E14}.Release|x64.ActiveCfg = Release|x64 - {DF832DE3-02FA-4D00-B853-1229A9505E14}.Release|x64.Build.0 = Release|x64 + {3B74A7FE-CED7-4723-8824-AC708A865B98}.Debug|x64.ActiveCfg = Debug|x64 + {3B74A7FE-CED7-4723-8824-AC708A865B98}.Debug|x64.Build.0 = Debug|x64 + {3B74A7FE-CED7-4723-8824-AC708A865B98}.Release|x64.ActiveCfg = Release|x64 + {3B74A7FE-CED7-4723-8824-AC708A865B98}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {6C5B74BD-2300-47A1-8FE1-DB88D6F55959} = {BF8FCAB8-D7D3-4DAE-92DE-4B5037E9A0ED} - {3257CB8C-789A-4370-88CB-6DB5D77D300D} = {BF8FCAB8-D7D3-4DAE-92DE-4B5037E9A0ED} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E3FF044A-B72E-4ED5-BE05-AB641BA048CD} EndGlobalSection diff --git a/WickedEngine/CMakeLists.txt b/WickedEngine/CMakeLists.txt index 4cc8ffe2a..9ca818c94 100644 --- a/WickedEngine/CMakeLists.txt +++ b/WickedEngine/CMakeLists.txt @@ -94,11 +94,11 @@ add_library(${TARGET_NAME} STATIC wiSpriteFont_BindLua.cpp wiStartupArguments.cpp wiTextureHelper.cpp - wiTimer.cpp wiVersion.cpp wiWidget.cpp wiXInput.cpp wiBlueNoise.cpp + wiShaderCompiler.cpp ) target_include_directories(${TARGET_NAME} PUBLIC @@ -115,11 +115,7 @@ if (WIN32) target_compile_definitions(${TARGET_NAME} PUBLIC UNICODE _UNICODE ) - - add_dependencies(${TARGET_NAME} - Shaders_Legacy - Shaders_DXC - ) + else () target_link_libraries(${TARGET_NAME} PUBLIC Vulkan::Vulkan @@ -127,11 +123,12 @@ else () ) target_link_libraries(${TARGET_NAME} PRIVATE dl) + + add_dependencies(${TARGET_NAME} + Shaders_SPIRV + ) endif() -add_dependencies(${TARGET_NAME} - Shaders_SPIRV -) if (PLATFORM MATCHES "SDL2") target_compile_definitions(${TARGET_NAME} PUBLIC SDL2=1) diff --git a/WickedEngine/MainComponent.cpp b/WickedEngine/MainComponent.cpp index 0bf6b426d..50f6d1730 100644 --- a/WickedEngine/MainComponent.cpp +++ b/WickedEngine/MainComponent.cpp @@ -73,7 +73,17 @@ void MainComponent::Run() // Until engine is not loaded, present initialization screen... CommandList cmd = wiRenderer::GetDevice()->BeginCommandList(); wiRenderer::GetDevice()->PresentBegin(cmd); - wiFont::Draw(wiBackLog::getText(), wiFontParams(4, 4, infoDisplay.size), cmd); + wiFontParams params; + params.posX = 5.f; + params.posY = 5.f; + string text = wiBackLog::getText(); + float textheight = wiFont::textHeight(text, params); + float screenheight = wiRenderer::GetDevice()->GetScreenHeight(); + if (textheight > screenheight) + { + params.posY = screenheight - textheight; + } + wiFont::Draw(text, params, cmd); wiRenderer::GetDevice()->PresentEnd(cmd); return; } @@ -379,6 +389,7 @@ void MainComponent::SetWindow(wiPlatform::window_type window, bool fullscreen) else if (use_dx11) { #ifdef WICKEDENGINE_BUILD_DX11 + wiRenderer::SetShaderPath(wiRenderer::GetShaderPath() + "hlsl5/"); wiRenderer::SetDevice(std::make_shared(window, fullscreen, debugdevice)); #endif } diff --git a/WickedEngine/OfflineShaderCompiler.vcxproj b/WickedEngine/OfflineShaderCompiler.vcxproj new file mode 100644 index 000000000..e63cc8776 --- /dev/null +++ b/WickedEngine/OfflineShaderCompiler.vcxproj @@ -0,0 +1,117 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {3b74a7fe-ced7-4723-8824-ac708a865b98} + OfflineShaderCompiler + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + true + $(SolutionDir)BUILD\$(Platform)\$(Configuration)\$(ProjectName)\ + $(ProjectName)\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)BUILD\$(Platform)\$(Configuration)\$(ProjectName)\ + $(ProjectName)\$(Platform)\$(Configuration)\ + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Console + true + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + + + $(OutDir)$(TargetName) hlsl5 hlsl6 spirv shaderdump + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + MultiThreaded + + + Console + true + true + true + $(SolutionDir)BUILD\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) + + + $(OutDir)$(TargetName) hlsl5 hlsl6 spirv shaderdump + + + + + + + + true + Document + true + + + true + true + Document + + + true + true + Document + + + + + + \ No newline at end of file diff --git a/WickedEngine/RenderPath3D.cpp b/WickedEngine/RenderPath3D.cpp index 7d7b6afe3..f421150eb 100644 --- a/WickedEngine/RenderPath3D.cpp +++ b/WickedEngine/RenderPath3D.cpp @@ -3,7 +3,7 @@ #include "wiImage.h" #include "wiHelper.h" #include "wiTextureHelper.h" -#include "ResourceMapping.h" +#include "shaders/ResourceMapping.h" #include "wiProfiler.h" using namespace wiGraphics; diff --git a/WickedEngine/RenderPath3D_PathTracing.cpp b/WickedEngine/RenderPath3D_PathTracing.cpp index ccdde0108..006ea0b8a 100644 --- a/WickedEngine/RenderPath3D_PathTracing.cpp +++ b/WickedEngine/RenderPath3D_PathTracing.cpp @@ -4,7 +4,7 @@ #include "wiHelper.h" #include "wiTextureHelper.h" #include "wiSprite.h" -#include "ResourceMapping.h" +#include "shaders/ResourceMapping.h" #include "wiProfiler.h" #include "wiScene.h" diff --git a/WickedEngine/Shaders_HLSL6.vcxproj b/WickedEngine/Shaders_HLSL6.vcxproj deleted file mode 100644 index cae5b8109..000000000 --- a/WickedEngine/Shaders_HLSL6.vcxproj +++ /dev/null @@ -1,71 +0,0 @@ - - - - - Release - x64 - - - - - - - - - - 16.0 - Win32Proj - {9c8f8910-cca3-41cb-a2fa-3545cdd5d8bf} - ShadersHLSL6 - 10.0 - - - - Utility - false - v142 - true - Unicode - - - - - - - - - - - false - $(SolutionDir)BUILD\$(Platform)\$(Configuration)\ - $(ProjectName)\$(Platform)\$(Configuration)\ - - - - Level3 - true - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - - - Console - true - true - true - - - 6.4 - shaders/hlsl6/%(Filename).cso - -flegacy-macro-expansion %(AdditionalOptions) - HLSL6 - - - compile_shaders_hlsl6.py - - - - - - \ No newline at end of file diff --git a/WickedEngine/Shaders_SPIRV.vcxproj b/WickedEngine/Shaders_SPIRV.vcxproj deleted file mode 100644 index 3662ca8fd..000000000 --- a/WickedEngine/Shaders_SPIRV.vcxproj +++ /dev/null @@ -1,70 +0,0 @@ - - - - - Release - x64 - - - - 16.0 - Win32Proj - {DF832DE3-02FA-4D00-B853-1229A9505E14} - ShadersHLSL6 - 10.0 - - - - Utility - false - v142 - true - Unicode - - - - - - - - - - - false - $(SolutionDir)BUILD\$(Platform)\$(Configuration)\ - $(ProjectName)\$(Platform)\$(Configuration)\ - - - - Level3 - true - true - true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - - - Console - true - true - true - - - 6.4 - shaders/spirv/%(Filename).cso - -flegacy-macro-expansion -spirv -fvk-use-dx-layout %(AdditionalOptions) - - - compile_shaders_spirv.py - - - - - - - - - - - - \ No newline at end of file diff --git a/WickedEngine/Utility/dxcapi.h b/WickedEngine/Utility/dxcapi.h index b4ee971fd..21aafd3ec 100644 --- a/WickedEngine/Utility/dxcapi.h +++ b/WickedEngine/Utility/dxcapi.h @@ -320,7 +320,7 @@ struct IDxcCompiler2 : public IDxcCompiler { _In_ UINT32 defineCount, // Number of defines _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) _COM_Outptr_ IDxcOperationResult **ppResult, // Compiler output status, buffer, and errors - _Outptr_opt_result_z_ LPWSTR *ppDebugBlobName,// Suggested file name for debug blob. (Must be HeapFree()'d!) + _Outptr_opt_result_z_ LPWSTR *ppDebugBlobName,// Suggested file name for debug blob. (Must be CoTaskMemFree()'d!) _COM_Outptr_opt_ IDxcBlob **ppDebugBlob // Debug blob ) = 0; }; @@ -557,6 +557,36 @@ struct IDxcOptimizer : public IUnknown { _COM_Outptr_opt_ IDxcBlobEncoding **ppOutputText) = 0; }; +static const UINT32 DxcVersionInfoFlags_None = 0; +static const UINT32 DxcVersionInfoFlags_Debug = 1; // Matches VS_FF_DEBUG +static const UINT32 DxcVersionInfoFlags_Internal = 2; // Internal Validator (non-signing) + +CROSS_PLATFORM_UUIDOF(IDxcVersionInfo, "b04f5b50-2059-4f12-a8ff-a1e0cde1cc7e") +struct IDxcVersionInfo : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE GetVersion(_Out_ UINT32 *pMajor, _Out_ UINT32 *pMinor) = 0; + virtual HRESULT STDMETHODCALLTYPE GetFlags(_Out_ UINT32 *pFlags) = 0; +}; + +CROSS_PLATFORM_UUIDOF(IDxcVersionInfo2, "fb6904c4-42f0-4b62-9c46-983af7da7c83") +struct IDxcVersionInfo2 : public IDxcVersionInfo { + virtual HRESULT STDMETHODCALLTYPE GetCommitInfo( + _Out_ UINT32 *pCommitCount, // The total number commits. + _Outptr_result_z_ char **pCommitHash // The SHA of the latest commit. (Must be CoTaskMemFree()'d!) + ) = 0; +}; + +CROSS_PLATFORM_UUIDOF(IDxcVersionInfo3, "5e13e843-9d25-473c-9ad2-03b2d0b44b1e") +struct IDxcVersionInfo3 : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE GetCustomVersionString( + _Outptr_result_z_ char **pVersionString // Custom version string for compiler. (Must be CoTaskMemFree()'d!) + ) = 0; +}; + +struct DxcArgPair { + const WCHAR *pName; + const WCHAR *pValue; +}; + CROSS_PLATFORM_UUIDOF(IDxcPdbUtils, "E6C9647E-9D6A-4C3B-B94C-524B5A6C343D") struct IDxcPdbUtils : public IUnknown { virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pPdbOrDxil) = 0; @@ -571,6 +601,9 @@ struct IDxcPdbUtils : public IUnknown { virtual HRESULT STDMETHODCALLTYPE GetArgCount(_Out_ UINT32 *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetArg(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetArgPairCount(_Out_ UINT32 *pCount) = 0; + virtual HRESULT STDMETHODCALLTYPE GetArgPair(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pName, _Outptr_result_z_ BSTR *pValue) = 0; + virtual HRESULT STDMETHODCALLTYPE GetDefineCount(_Out_ UINT32 *pCount) = 0; virtual HRESULT STDMETHODCALLTYPE GetDefine(_In_ UINT32 uIndex, _Outptr_result_z_ BSTR *pResult) = 0; @@ -583,21 +616,13 @@ struct IDxcPdbUtils : public IUnknown { virtual BOOL STDMETHODCALLTYPE IsFullPDB() = 0; virtual HRESULT STDMETHODCALLTYPE GetFullPDB(_COM_Outptr_ IDxcBlob **ppFullPDB) = 0; -}; -static const UINT32 DxcVersionInfoFlags_None = 0; -static const UINT32 DxcVersionInfoFlags_Debug = 1; // Matches VS_FF_DEBUG -static const UINT32 DxcVersionInfoFlags_Internal = 2; // Internal Validator (non-signing) + virtual HRESULT STDMETHODCALLTYPE GetVersionInfo(_COM_Outptr_ IDxcVersionInfo **ppVersionInfo) = 0; -CROSS_PLATFORM_UUIDOF(IDxcVersionInfo, "b04f5b50-2059-4f12-a8ff-a1e0cde1cc7e") -struct IDxcVersionInfo : public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetVersion(_Out_ UINT32 *pMajor, _Out_ UINT32 *pMinor) = 0; - virtual HRESULT STDMETHODCALLTYPE GetFlags(_Out_ UINT32 *pFlags) = 0; -}; - -CROSS_PLATFORM_UUIDOF(IDxcVersionInfo2, "fb6904c4-42f0-4b62-9c46-983af7da7c83") -struct IDxcVersionInfo2 : public IDxcVersionInfo { - virtual HRESULT STDMETHODCALLTYPE GetCommitInfo(_Out_ UINT32 *pCommitCount, _Out_ char **pCommitHash) = 0; + virtual HRESULT STDMETHODCALLTYPE SetCompiler(_In_ IDxcCompiler3 *pCompiler) = 0; + virtual HRESULT STDMETHODCALLTYPE CompileForFullPDB(_COM_Outptr_ IDxcResult **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE OverrideArgs(_In_ DxcArgPair *pArgPairs, UINT32 uNumArgPairs) = 0; + virtual HRESULT STDMETHODCALLTYPE OverrideRootSignature(_In_ const WCHAR *pRootSignature) = 0; }; // Note: __declspec(selectany) requires 'extern' diff --git a/WickedEngine/WickedEngine.h b/WickedEngine/WickedEngine.h index 21de99760..87fde9b79 100644 --- a/WickedEngine/WickedEngine.h +++ b/WickedEngine/WickedEngine.h @@ -59,6 +59,7 @@ #include "wiJobSystem.h" #include "wiNetwork.h" #include "wiEvent.h" +#include "wiShaderCompiler.h" #ifdef _WIN32 #ifdef PLATFORM_UWP diff --git a/WickedEngine/WickedEngine_SOURCE.vcxitems b/WickedEngine/WickedEngine_SOURCE.vcxitems index c0d4a1a1c..b684c5ec0 100644 --- a/WickedEngine/WickedEngine_SOURCE.vcxitems +++ b/WickedEngine/WickedEngine_SOURCE.vcxitems @@ -229,23 +229,7 @@ - - - - - - - - - - - - - - - - @@ -254,6 +238,7 @@ + @@ -319,8 +304,6 @@ - - @@ -333,6 +316,7 @@ + @@ -672,6 +656,7 @@ + @@ -707,7 +692,6 @@ - diff --git a/WickedEngine/WickedEngine_SOURCE.vcxitems.filters b/WickedEngine/WickedEngine_SOURCE.vcxitems.filters index 567db5d1a..0388eb2bc 100644 --- a/WickedEngine/WickedEngine_SOURCE.vcxitems.filters +++ b/WickedEngine/WickedEngine_SOURCE.vcxitems.filters @@ -46,9 +46,6 @@ {5ac4a1c9-91a8-4d52-9cd6-6139a848a2f3} - - {042fbecf-7b1e-4c61-9b93-f3e5ca541b99} - {4cb4ddc4-c5a9-483b-b6cf-2c4382340e7a} @@ -147,9 +144,6 @@ ENGINE\Common - - ENGINE\Graphics\GPUMapping - ENGINE\High level interface @@ -171,12 +165,6 @@ ENGINE\Scripting\LuaBindings - - ENGINE\Graphics\GPUMapping - - - ENGINE\Graphics\GPUMapping - ENGINE\Scripting\LuaBindings @@ -903,27 +891,15 @@ ENGINE\Helpers - - ENGINE\Graphics\GPUMapping - ENGINE\Graphics\API ENGINE\Graphics\API - - ENGINE\Graphics\GPUMapping - ENGINE\Graphics - - ENGINE\Graphics\GPUMapping - - - ENGINE\Graphics\GPUMapping - ENGINE\Graphics @@ -933,9 +909,6 @@ UTILITY - - ENGINE\Graphics\GPUMapping - ENGINE\Graphics\API @@ -951,39 +924,18 @@ ENGINE\Graphics - - ENGINE\Graphics\GPUMapping - - - ENGINE\Graphics\GPUMapping - - - ENGINE\Graphics\GPUMapping - UTILITY ENGINE\System - - ENGINE\Graphics\GPUMapping - - - ENGINE\Graphics\GPUMapping - - - ENGINE\Graphics\GPUMapping - ENGINE\Physics ENGINE\Graphics - - ENGINE\Graphics\GPUMapping - UTILITY @@ -1035,12 +987,6 @@ ENGINE\Scripting\LuaBindings - - ENGINE\Graphics\GPUMapping - - - ENGINE\Graphics\GPUMapping - ENGINE\Audio @@ -1083,9 +1029,6 @@ ENGINE\Graphics\API - - ENGINE\Graphics\GPUMapping - UTILITY @@ -1137,6 +1080,12 @@ UTILITY + + ENGINE\Graphics\API + + + UTILITY + @@ -1724,9 +1673,6 @@ ENGINE\Helpers - - ENGINE\Helpers - ENGINE\Graphics @@ -1886,6 +1832,9 @@ ENGINE\Helpers + + ENGINE\Graphics\API + diff --git a/WickedEngine/WickedEngine_Windows.vcxproj b/WickedEngine/WickedEngine_Windows.vcxproj index db2e99f83..2e54b27ba 100644 --- a/WickedEngine/WickedEngine_Windows.vcxproj +++ b/WickedEngine/WickedEngine_Windows.vcxproj @@ -35,7 +35,6 @@ - @@ -85,7 +84,7 @@ true - $(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories);%(AdditionalLibraryDirectories) + %(AdditionalLibraryDirectories) IF NOT EXIST "$(ProjectDir)shaders\" mkdir "$(ProjectDir)shaders\" @@ -118,7 +117,7 @@ 5.0 - $(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories);%(AdditionalLibraryDirectories) + %(AdditionalLibraryDirectories) true diff --git a/WickedEngine/compile_shaders_hlsl6.py b/WickedEngine/compile_shaders_hlsl6.py deleted file mode 100644 index 9efc1e719..000000000 --- a/WickedEngine/compile_shaders_hlsl6.py +++ /dev/null @@ -1,88 +0,0 @@ -import os -import threading -import xml.etree.ElementTree as ET -from subprocess import check_output - -# The shader compiler scripts parses the Shaders_SOURCE project filters to determine which shaders to compile and how -# Right now it depends on dxc.exe and dxcompiler.dll being available in the same directory as the script -# dxil.dll will be used to sign the shader binaries if it is available in the same directory as the script - -tree = ET.parse('Shaders_SOURCE.vcxitems.filters') -root = tree.getroot() - -from pathlib import Path -Path("shaders/hlsl6").mkdir(parents=True, exist_ok=True) - -threads = [] - -def compile(cmd): - try: - print(cmd) - result = check_output(cmd, shell=True).decode() - if len(result) > 0: - print(result) - except: - print("DXC error") - -namespace = "{http://schemas.microsoft.com/developer/msbuild/2003}" -for item in root.iter(): - try: - name = item.attrib["Include"] - filename, file_extension = os.path.splitext(name) - if file_extension != ".hlsl": - continue - name = name.replace("$(MSBuildThisFileDirectory)", "") - for shaderprofile in item.iter(namespace + "Filter"): - profile = shaderprofile.text - - #if name != "rtshadow_denoise_temporalCS.hlsl": - # continue - - cmd = "dxc " + name + " -T " - - if profile == "VS": - cmd += "vs" - if profile == "PS": - cmd += "ps" - if profile == "GS": - cmd += "gs" - if profile == "HS": - cmd += "hs" - if profile == "DS": - cmd += "ds" - if profile == "CS": - cmd += "cs" - if profile == "LIB": - cmd += "lib" - if profile == "MS": - cmd += "ms" - if profile == "AS": - cmd += "as" - - cmd += "_6_5 " - - #cmd += " -all-resources-bound " - #cmd += " -pack-optimized " - cmd += " -res-may-alias " - #cmd += " -no-legacy-cbuf-layout " - - cmd += " -flegacy-macro-expansion " - - cmd += " -D HLSL6 " - - output_name = os.path.splitext(name)[0] + ".cso " - - cmd += " -Fo " + "shaders/hlsl6/" + output_name - t = threading.Thread(target=compile, args=(cmd,)) - threads.append(t) - t.start() - - break - - except: - continue - - -for t in threads: - t.join() - diff --git a/WickedEngine/compile_shaders_spirv.py b/WickedEngine/compile_shaders_spirv.py deleted file mode 100644 index 1198cad5d..000000000 --- a/WickedEngine/compile_shaders_spirv.py +++ /dev/null @@ -1,105 +0,0 @@ -import os -import threading -import xml.etree.ElementTree as ET -from subprocess import check_output - -# The shader compiler scripts parses the Shaders_SOURCE project filters to determine which shaders to compile and how -# Right now it depends on dxc.exe and dxcompiler.dll being available in the same directory as the script - -tree = ET.parse('Shaders_SOURCE.vcxitems.filters') -root = tree.getroot() - -from pathlib import Path -Path("shaders/spirv").mkdir(parents=True, exist_ok=True) - -threads = [] - -def compile(cmd): - try: - print(cmd) - result = check_output(cmd, shell=True).decode() - if len(result) > 0: - print(result) - except: - print("DXC error") - -namespace = "{http://schemas.microsoft.com/developer/msbuild/2003}" -for item in root.iter(): - try: - name = item.attrib["Include"] - filename, file_extension = os.path.splitext(name) - if file_extension != ".hlsl": - continue - name = name.replace("$(MSBuildThisFileDirectory)", "") - for shaderprofile in item.iter(namespace + "Filter"): - profile = shaderprofile.text - - #if name != "rtreflectionLIB.hlsl": - # continue - - cmd = "dxc " + name + " -T " - - if profile == "VS": - cmd += "vs" - if profile == "PS": - cmd += "ps" - if profile == "GS": - cmd += "gs" - if profile == "HS": - cmd += "hs" - if profile == "DS": - cmd += "ds" - if profile == "CS": - cmd += "cs" - if profile == "LIB": - cmd += "lib" - if profile == "MS": - cmd += "ms" - if profile == "AS": - cmd += "as" - - cmd += "_6_5 " - - #cmd += " -all-resources-bound " - #cmd += " -pack-optimized " - cmd += " -res-may-alias " - #cmd += " -no-legacy-cbuf-layout " - - cmd += " -spirv " - cmd += " -fspv-target-env=vulkan1.2 " - cmd += " -fvk-use-dx-layout " - cmd += " -fvk-use-dx-position-w " - cmd += " -flegacy-macro-expansion " - - # NOTE: Don't use -fvk-invert-y because it's not trivial when multiple connecting - # shader stages are using SV_POSITION. - # But when sharing structs between stages, it is not feasible to modify SV_POSITION to custom semantic - # This will be handled by flipping the viewport instead - #if profile == "VS" or profile == "DS" or profile == "GS": - # cmd += " -fvk-invert-y " - - #cmd += " -fvk-b-shift 0 0 " - cmd += " -fvk-t-shift 1000 0 " - cmd += " -fvk-u-shift 2000 0 " - cmd += " -fvk-s-shift 3000 0 " - - cmd += " -Vd " #DISABLE VALIDATION: There is currently a validation bug with raytracing RayTCurrent()!!! - - cmd += " -D SPIRV " - - output_name = os.path.splitext(name)[0] + ".cso " - - cmd += " -Fo " + "shaders/spirv/" + output_name - t = threading.Thread(target=compile, args=(cmd,)) - threads.append(t) - t.start() - - break - - except: - continue - - -for t in threads: - t.join() - diff --git a/WickedEngine/d3dcompiler_47.dll b/WickedEngine/d3dcompiler_47.dll new file mode 100644 index 000000000..669763121 Binary files /dev/null and b/WickedEngine/d3dcompiler_47.dll differ diff --git a/WickedEngine/dxc.exe b/WickedEngine/dxc.exe deleted file mode 100644 index 7a1a481f1..000000000 Binary files a/WickedEngine/dxc.exe and /dev/null differ diff --git a/WickedEngine/dxcompiler.dll b/WickedEngine/dxcompiler.dll index d61ce699b..7273fc190 100644 Binary files a/WickedEngine/dxcompiler.dll and b/WickedEngine/dxcompiler.dll differ diff --git a/WickedEngine/dxil.dll b/WickedEngine/dxil.dll index 96b71263d..598d4aee1 100644 Binary files a/WickedEngine/dxil.dll and b/WickedEngine/dxil.dll differ diff --git a/WickedEngine/offlineshadercompiler.cpp b/WickedEngine/offlineshadercompiler.cpp new file mode 100644 index 000000000..3e37a7ac6 --- /dev/null +++ b/WickedEngine/offlineshadercompiler.cpp @@ -0,0 +1,505 @@ +#include "WickedEngine.h" + +#include +#include +#include +#include +#include +#include + +std::mutex locker; +std::vector shaders[wiGraphics::SHADERSTAGE_COUNT]; +struct Target +{ + wiGraphics::SHADERFORMAT format; + std::string dir; +}; +std::vector targets; +std::unordered_map results; +bool rebuild = false; +bool shaderdump_enabled = false; + +int main(int argc, char* argv[]) +{ + std::cout << "[Wicked Engine Offline Shader Compiler]" << std::endl; + std::cout << "Available command arguments:" << std::endl; + std::cout << "\thlsl5 : \tCompile shaders to hlsl5 (dx11) format (using d3dcompiler)" << std::endl; + std::cout << "\thlsl6 : \tCompile shaders to hlsl6 (dx12) format (using dxcompiler)" << std::endl; + std::cout << "\tspirv : \tCompile shaders to spirv (vulkan) format (using dxcompiler)" << std::endl; + std::cout << "\trebuild : \tAll shaders will be rebuilt, regardless if they are outdated or not" << std::endl; + std::cout << "\tshaderdump : \tShaders will be saved to wiShaderDump.h C++ header file (rebuild is assumed)" << std::endl; + std::cout << "Command arguments used: "; + + wiStartupArguments::Parse(argc, argv); + + if (wiStartupArguments::HasArgument("hlsl5")) + { + targets.push_back({ wiGraphics::SHADERFORMAT_HLSL5, "shaders/hlsl5/" }); + std::cout << "hlsl5 "; + } + if (wiStartupArguments::HasArgument("hlsl6")) + { + targets.push_back({ wiGraphics::SHADERFORMAT_HLSL6, "shaders/hlsl6/" }); + std::cout << "hlsl6 "; + } + if (wiStartupArguments::HasArgument("spirv")) + { + targets.push_back({ wiGraphics::SHADERFORMAT_SPIRV, "shaders/spirv/" }); + std::cout << "spirv "; + } + + if (wiStartupArguments::HasArgument("shaderdump")) + { + shaderdump_enabled = true; + rebuild = true; + std::cout << "shaderdump "; + } + + if (wiStartupArguments::HasArgument("rebuild")) + { + rebuild = true; + std::cout << "rebuild "; + } + + std::cout << std::endl; + + if (targets.empty()) + { + targets = { + { wiGraphics::SHADERFORMAT_HLSL5, "shaders/hlsl5/" }, + { wiGraphics::SHADERFORMAT_HLSL6, "shaders/hlsl6/" }, + { wiGraphics::SHADERFORMAT_SPIRV, "shaders/spirv/" }, + }; + std::cout << "No shader formats were specified, assuming command arguments: hlsl5 spirv hlsl6" << std::endl; + } + + shaders[wiGraphics::CS] = { + "hairparticle_simulateCS.hlsl" , + "hairparticle_finishUpdateCS.hlsl" , + "emittedparticle_simulateCS.hlsl" , + "generateMIPChainCubeCS_float4.hlsl" , + "generateMIPChainCubeCS_unorm4.hlsl" , + "generateMIPChainCubeArrayCS_float4.hlsl" , + "generateMIPChainCubeArrayCS_unorm4.hlsl" , + "generateMIPChain3DCS_float4.hlsl" , + "generateMIPChain3DCS_unorm4.hlsl" , + "generateMIPChain2DCS_float4.hlsl" , + "generateMIPChain2DCS_unorm4.hlsl" , + "blur_gaussian_float4CS.hlsl" , + "bloomseparateCS.hlsl" , + "depthoffield_mainCS.hlsl" , + "depthoffield_neighborhoodMaxCOCCS.hlsl" , + "depthoffield_prepassCS.hlsl" , + "depthoffield_upsampleCS.hlsl" , + "depthoffield_tileMaxCOC_verticalCS.hlsl" , + "depthoffield_tileMaxCOC_horizontalCS.hlsl" , + "voxelRadianceSecondaryBounceCS.hlsl" , + "voxelSceneCopyClearCS.hlsl" , + "voxelClearOnlyNormalCS.hlsl" , + "upsample_bilateral_float1CS.hlsl" , + "upsample_bilateral_float4CS.hlsl" , + "upsample_bilateral_unorm1CS.hlsl" , + "upsample_bilateral_unorm4CS.hlsl" , + "temporalaaCS.hlsl" , + "tileFrustumsCS.hlsl" , + "tonemapCS.hlsl" , + "ssr_resolveCS.hlsl" , + "ssr_temporalCS.hlsl" , + "ssaoCS.hlsl" , + "ssr_medianCS.hlsl" , + "ssr_raytraceCS.hlsl" , + "sharpenCS.hlsl" , + "skinningCS.hlsl" , + "skinningCS_LDS.hlsl" , + "resolveMSAADepthStencilCS.hlsl" , + "raytrace_shadeCS.hlsl" , + "raytrace_tilesortCS.hlsl" , + "raytrace_kickjobsCS.hlsl" , + "raytrace_launchCS.hlsl" , + "paint_textureCS.hlsl" , + "raytrace_closesthitCS.hlsl" , + "oceanUpdateDisplacementMapCS.hlsl" , + "oceanUpdateGradientFoldingCS.hlsl" , + "oceanSimulatorCS.hlsl" , + "msao_interleaveCS.hlsl" , + "msao_preparedepthbuffers1CS.hlsl" , + "msao_preparedepthbuffers2CS.hlsl" , + "msao_blurupsampleCS.hlsl" , + "msao_blurupsampleCS_blendout.hlsl" , + "msao_blurupsampleCS_premin.hlsl" , + "msao_blurupsampleCS_premin_blendout.hlsl" , + "msaoCS.hlsl" , + "motionblur_neighborhoodMaxVelocityCS.hlsl" , + "motionblur_tileMaxVelocity_horizontalCS.hlsl" , + "motionblur_tileMaxVelocity_verticalCS.hlsl" , + "luminancePass2CS.hlsl" , + "motionblur_kickjobsCS.hlsl" , + "motionblurCS.hlsl" , + "motionblurCS_cheap.hlsl" , + "motionblurCS_earlyexit.hlsl" , + "lineardepthCS.hlsl" , + "luminancePass1CS.hlsl" , + "lightShaftsCS.hlsl" , + "lightCullingCS_ADVANCED_DEBUG.hlsl" , + "lightCullingCS_DEBUG.hlsl" , + "lightCullingCS.hlsl" , + "lightCullingCS_ADVANCED.hlsl" , + "hbaoCS.hlsl" , + "gpusortlib_sortInnerCS.hlsl" , + "gpusortlib_sortStepCS.hlsl" , + "gpusortlib_kickoffSortCS.hlsl" , + "gpusortlib_sortCS.hlsl" , + "fxaaCS.hlsl" , + "filterEnvMapCS.hlsl" , + "fft_512x512_c2c_CS.hlsl" , + "fft_512x512_c2c_v2_CS.hlsl" , + "emittedparticle_sphpartitionCS.hlsl" , + "emittedparticle_sphpartitionoffsetsCS.hlsl" , + "emittedparticle_sphpartitionoffsetsresetCS.hlsl" , + "emittedparticle_simulateCS_SORTING.hlsl" , + "emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.hlsl" , + "emittedparticle_sphdensityCS.hlsl" , + "emittedparticle_sphforceCS.hlsl" , + "emittedparticle_kickoffUpdateCS.hlsl" , + "emittedparticle_simulateCS_DEPTHCOLLISIONS.hlsl" , + "emittedparticle_emitCS.hlsl" , + "emittedparticle_emitCS_FROMMESH.hlsl" , + "emittedparticle_emitCS_volume.hlsl" , + "emittedparticle_finishUpdateCS.hlsl" , + "downsample4xCS.hlsl" , + "depthoffield_prepassCS_earlyexit.hlsl" , + "depthoffield_mainCS_cheap.hlsl" , + "depthoffield_mainCS_earlyexit.hlsl" , + "depthoffield_postfilterCS.hlsl" , + "depthoffield_kickjobsCS.hlsl" , + "copytexture2D_float4_borderexpandCS.hlsl" , + "copytexture2D_unorm4_borderexpandCS.hlsl" , + "copytexture2D_unorm4CS.hlsl" , + "copytexture2D_float4CS.hlsl" , + "chromatic_aberrationCS.hlsl" , + "bvh_hierarchyCS.hlsl" , + "bvh_primitivesCS.hlsl" , + "bvh_propagateaabbCS.hlsl" , + "blur_gaussian_wide_unorm1CS.hlsl" , + "blur_gaussian_wide_unorm4CS.hlsl" , + "blur_gaussian_unorm1CS.hlsl" , + "blur_gaussian_unorm4CS.hlsl" , + "blur_gaussian_wide_float1CS.hlsl" , + "blur_gaussian_wide_float3CS.hlsl" , + "blur_gaussian_wide_float4CS.hlsl" , + "blur_bilateral_wide_unorm4CS.hlsl" , + "blur_gaussian_float1CS.hlsl" , + "blur_gaussian_float3CS.hlsl" , + "blur_bilateral_unorm4CS.hlsl" , + "blur_bilateral_wide_float1CS.hlsl" , + "blur_bilateral_wide_float3CS.hlsl" , + "blur_bilateral_wide_float4CS.hlsl" , + "blur_bilateral_wide_unorm1CS.hlsl" , + "blur_bilateral_float1CS.hlsl" , + "blur_bilateral_float3CS.hlsl" , + "blur_bilateral_float4CS.hlsl" , + "blur_bilateral_unorm1CS.hlsl" , + "bloomcombineCS.hlsl" , + "voxelSceneCopyClearCS_TemporalSmoothing.hlsl" , + "normalsfromdepthCS.hlsl" , + "volumetricCloud_shapenoiseCS.hlsl" , + "volumetricCloud_detailnoiseCS.hlsl" , + "volumetricCloud_curlnoiseCS.hlsl" , + "volumetricCloud_weathermapCS.hlsl" , + "volumetricCloud_renderCS.hlsl" , + "volumetricCloud_reprojectCS.hlsl" , + "shadingRateClassificationCS.hlsl" , + "shadingRateClassificationCS_DEBUG.hlsl" , + "skyAtmosphere_transmittanceLutCS.hlsl" , + "skyAtmosphere_skyViewLutCS.hlsl" , + "skyAtmosphere_multiScatteredLuminanceLutCS.hlsl" , + "skyAtmosphere_skyLuminanceLutCS.hlsl" , + "rtao_denoise_blurCS.hlsl" , + "rtao_denoise_temporalCS.hlsl" , + "rtshadow_denoise_temporalCS.hlsl" , + "upsample_bilateral_uint4CS.hlsl" , + "screenspaceshadowCS.hlsl" , + }; + + shaders[wiGraphics::PS] = { + "emittedparticlePS_soft.hlsl" , + "screenPS.hlsl" , + "imagePS_separatenormalmap.hlsl" , + "imagePS_separatenormalmap_bicubic.hlsl" , + "imagePS_backgroundblur_masked.hlsl" , + "imagePS_masked.hlsl" , + "imagePS_backgroundblur.hlsl" , + "imagePS.hlsl" , + "emittedparticlePS_soft_lighting.hlsl" , + "oceanSurfacePS.hlsl" , + "hairparticlePS.hlsl" , + "impostorPS.hlsl" , + "volumetricLight_SpotPS.hlsl" , + "volumetricLight_PointPS.hlsl" , + "volumetricLight_DirectionalPS.hlsl" , + "voxelPS.hlsl" , + "vertexcolorPS.hlsl" , + "upsample_bilateralPS.hlsl" , + "sunPS.hlsl" , + "skyPS_dynamic.hlsl" , + "skyPS_static.hlsl" , + "skyPS_velocity.hlsl" , + "shadowPS_transparent.hlsl" , + "shadowPS_water.hlsl" , + "shadowPS_alphatest.hlsl" , + "renderlightmapPS.hlsl" , + "raytrace_debugbvhPS.hlsl" , + "outlinePS.hlsl" , + "oceanSurfaceSimplePS.hlsl" , + "objectPS_transparent_pom.hlsl" , + "objectPS_water.hlsl" , + "objectPS_voxelizer.hlsl" , + "objectPS_voxelizer_terrain.hlsl" , + "objectPS_transparent.hlsl" , + "objectPS_transparent_planarreflection.hlsl" , + "objectPS_planarreflection.hlsl" , + "objectPS_pom.hlsl" , + "objectPS_terrain.hlsl" , + "objectPS.hlsl" , + "objectPS_hologram.hlsl" , + "objectPS_paintradius.hlsl" , + "objectPS_simplest.hlsl" , + "objectPS_debug.hlsl" , + "objectPS_prepass.hlsl" , + "objectPS_prepass_alphatest.hlsl" , + "objectPS_anisotropic.hlsl" , + "objectPS_transparent_anisotropic.hlsl" , + "objectPS_cloth.hlsl" , + "objectPS_transparent_cloth.hlsl" , + "objectPS_clearcoat.hlsl" , + "objectPS_transparent_clearcoat.hlsl" , + "objectPS_cloth_clearcoat.hlsl" , + "objectPS_transparent_cloth_clearcoat.hlsl" , + "objectPS_cartoon.hlsl" , + "objectPS_transparent_cartoon.hlsl" , + "objectPS_unlit.hlsl" , + "objectPS_transparent_unlit.hlsl" , + "lightVisualizerPS.hlsl" , + "lensFlarePS.hlsl" , + "impostorPS_wire.hlsl" , + "impostorPS_simple.hlsl" , + "impostorPS_prepass.hlsl" , + "hairparticlePS_simplest.hlsl" , + "hairparticlePS_prepass.hlsl" , + "forceFieldVisualizerPS.hlsl" , + "fontPS.hlsl" , + "envMap_skyPS_static.hlsl" , + "envMap_skyPS_dynamic.hlsl" , + "envMapPS.hlsl" , + "envMapPS_terrain.hlsl" , + "emittedparticlePS_soft_distortion.hlsl" , + "downsampleDepthBuffer4xPS.hlsl" , + "emittedparticlePS_simplest.hlsl" , + "cubeMapPS.hlsl" , + "circlePS.hlsl" , + "captureImpostorPS_normal.hlsl" , + "captureImpostorPS_surface.hlsl" , + "captureImpostorPS_albedo.hlsl" , + }; + + shaders[wiGraphics::VS] = { + "hairparticleVS.hlsl" , + "emittedparticleVS.hlsl" , + "imageVS.hlsl" , + "fontVS.hlsl" , + "voxelVS.hlsl" , + "vertexcolorVS.hlsl" , + "volumetriclight_directionalVS.hlsl" , + "volumetriclight_pointVS.hlsl" , + "volumetriclight_spotVS.hlsl" , + "vSpotLightVS.hlsl" , + "vPointLightVS.hlsl" , + "sphereVS.hlsl" , + "skyVS.hlsl" , + "shadowVS_transparent.hlsl" , + "shadowVS.hlsl" , + "shadowVS_alphatest.hlsl" , + "screenVS.hlsl" , + "renderlightmapVS.hlsl" , + "raytrace_screenVS.hlsl" , + "oceanSurfaceVS.hlsl" , + "objectVS_simple.hlsl" , + "objectVS_voxelizer.hlsl" , + "objectVS_common.hlsl" , + "objectVS_common_tessellation.hlsl" , + "objectVS_prepass.hlsl" , + "objectVS_prepass_alphatest.hlsl" , + "objectVS_prepass_tessellation.hlsl" , + "objectVS_prepass_alphatest_tessellation.hlsl" , + "objectVS_debug.hlsl" , + "lensFlareVS.hlsl" , + "impostorVS.hlsl" , + "forceFieldPointVisualizerVS.hlsl" , + "forceFieldPlaneVisualizerVS.hlsl" , + "envMap_skyVS.hlsl" , + "envMapVS.hlsl" , + "envMap_skyVS_emulation.hlsl" , + "envMapVS_emulation.hlsl" , + "cubeShadowVS.hlsl" , + "cubeShadowVS_alphatest.hlsl" , + "cubeShadowVS_emulation.hlsl" , + "cubeShadowVS_alphatest_emulation.hlsl" , + "cubeShadowVS_transparent.hlsl" , + "cubeShadowVS_transparent_emulation.hlsl" , + "cubeVS.hlsl", + }; + + shaders[wiGraphics::GS] = { + "envMap_skyGS_emulation.hlsl" , + "envMapGS_emulation.hlsl" , + "cubeShadowGS_emulation.hlsl" , + "cubeShadowGS_alphatest_emulation.hlsl" , + "cubeShadowGS_transparent_emulation.hlsl" , + "voxelGS.hlsl" , + "objectGS_voxelizer.hlsl" , + "lensFlareGS.hlsl" , + }; + + shaders[wiGraphics::DS] = { + "objectDS.hlsl", + "objectDS_prepass.hlsl", + "objectDS_prepass_alphatest.hlsl", + }; + + shaders[wiGraphics::HS] = { + "objectHS.hlsl", + "objectHS_prepass.hlsl", + "objectHS_prepass_alphatest.hlsl", + }; + + shaders[wiGraphics::AS] = { + + }; + + shaders[wiGraphics::MS] = { + "emittedparticleMS.hlsl", + }; + + shaders[wiGraphics::LIB] = { + "rtaoLIB.hlsl", + "rtreflectionLIB.hlsl", + "rtshadowLIB.hlsl", + }; + + wiShaderCompiler::Initialize(); + wiJobSystem::Initialize(); + wiJobSystem::context ctx; + + std::string SHADERSOURCEPATH = wiRenderer::GetShaderSourcePath(); + wiHelper::MakePathAbsolute(SHADERSOURCEPATH); + + std::cout << "[Wicked Engine Offline Shader Compiler] Searching for outdated shaders..." << std::endl; + wiTimer timer; + + for (auto& target : targets) + { + std::string SHADERPATH = target.dir; + wiHelper::DirectoryCreate(SHADERPATH); + + for (int i = 0; i < wiGraphics::SHADERSTAGE_COUNT; ++i) + { + if (target.format == wiGraphics::SHADERFORMAT_HLSL5) + { + if ( + i == wiGraphics::MS || + i == wiGraphics::AS || + i == wiGraphics::LIB + ) + { + // shader stage not applicable to HLSL5 + continue; + } + } + + for (auto& shader : shaders[i]) + { + wiJobSystem::Execute(ctx, [=](wiJobArgs args) { + std::string shaderbinaryfilename = wiHelper::ReplaceExtension(SHADERPATH + shader, "cso"); + if (!rebuild && !wiShaderCompiler::IsShaderOutdated(shaderbinaryfilename)) + { + return; + } + + wiShaderCompiler::CompilerInput input; + input.format = target.format; + input.stage = (wiGraphics::SHADERSTAGE)i; + input.shadersourcefilename = SHADERSOURCEPATH + shader; + input.include_directories.push_back(SHADERSOURCEPATH); + + wiShaderCompiler::CompilerOutput output; + wiShaderCompiler::Compile(input, output); + + if (output.IsValid()) + { + wiShaderCompiler::SaveShaderAndMetadata(shaderbinaryfilename, output); + + locker.lock(); + std::cout << "shader compiled: " << shaderbinaryfilename << std::endl; + if (shaderdump_enabled) + { + results[shaderbinaryfilename] = output; + } + locker.unlock(); + } + else + { + locker.lock(); + std::cerr << "shader compile FAILED: " << shaderbinaryfilename << std::endl << output.error_message; + locker.unlock(); + std::exit(1); + } + + }); + } + } + } + wiJobSystem::Wait(ctx); + + std::cout << "[Wicked Engine Offline Shader Compiler] Finished in " << std::setprecision(4) << timer.elapsed_seconds() << " seconds" << std::endl; + + if (shaderdump_enabled) + { + std::cout << "[Wicked Engine Offline Shader Compiler] Creating ShaderDump..." << std::endl; + timer.record(); + std::stringstream ss; + ss << "namespace wiShaderDump {" << std::endl; + for (auto& x : results) + { + auto& name = x.first; + auto& output = x.second; + + std::string name_repl = name; + std::replace(name_repl.begin(), name_repl.end(), '/', '_'); + std::replace(name_repl.begin(), name_repl.end(), '.', '_'); + ss << "const uint8_t " << name_repl << "[] = {"; + for (size_t i = 0; i < output.shadersize; ++i) + { + ss << (uint32_t)output.shaderdata[i] << ","; + } + ss << "};" << std::endl; + } + ss << "struct ShaderDumpEntry{const uint8_t* data; size_t size;};" << std::endl; + ss << "const std::unordered_map shaderdump = {" << std::endl; + for (auto& x : results) + { + auto& name = x.first; + auto& output = x.second; + + std::string name_repl = name; + std::replace(name_repl.begin(), name_repl.end(), '/', '_'); + std::replace(name_repl.begin(), name_repl.end(), '.', '_'); + ss << "std::pair(\"" << name << "\", {" << name_repl << ",sizeof(" << name_repl << ")})," << std::endl; + } + ss << "};" << std::endl; // map end + ss << "}" << std::endl; // namespace end + wiHelper::FileWrite("wiShaderDump.h", (uint8_t*)ss.str().c_str(), ss.str().length()); + std::cout << "[Wicked Engine Offline Shader Compiler] ShaderDump written to wiShaderDump.h in " << std::setprecision(4) << timer.elapsed_seconds() << " seconds" << std::endl; + } + + return 0; +} diff --git a/WickedEngine/shaders/CMakeLists.txt b/WickedEngine/shaders/CMakeLists.txt index 596462d22..1ac73ff8d 100644 --- a/WickedEngine/shaders/CMakeLists.txt +++ b/WickedEngine/shaders/CMakeLists.txt @@ -317,7 +317,7 @@ function(Generate_Shaders_SPIRV SHADERS_SRC_LIST SHADER_TYPE) get_filename_component(FILE_NAME ${Shader} NAME_WLE) set(SPIRV_OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${SPIRV_OUTPUT_DIR}/${FILE_NAME}.cso") - set(SPIRV_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../${Shader}") + set(SPIRV_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/${Shader}") # Only do this for shaders that are missing or updated (very slow re-config otherwise) file(TIMESTAMP "${SPIRV_SOURCE}" NEWTIMESTAMP) @@ -336,7 +336,7 @@ function(Generate_Shaders_SPIRV SHADERS_SRC_LIST SHADER_TYPE) set(COMMAND_PARAMS ${DXC_TARGET} "${SPIRV_SOURCE}" -T "${SHADER_TYPE}_6_5" - -I "${CMAKE_CURRENT_SOURCE_DIR}/../" + -I "${CMAKE_CURRENT_SOURCE_DIR}/" -D SPIRV #-all-resources-bound #-pack-optimized @@ -401,89 +401,3 @@ Generate_Shaders_SPIRV(SHADERS_LIB lib) add_custom_target(Shaders_SPIRV DEPENDS ${SPIRV_BINARY_FILES}) set_property(TARGET "Shaders_SPIRV" PROPERTY FOLDER "Shaders") - -if (WIN32) - # Legacy Shader Model 5 for DirectX11 - set(LEGACY_SHADER_SOURCES) - function(Generate_Shaders_Legacy SHADERS_SRC_LIST SHADER_TYPE) - foreach (Shader IN LISTS ${SHADERS_SRC_LIST}) - get_filename_component(FILE_NAME ${Shader} NAME_WLE) - - set(SHADER_OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}//${FILE_NAME}.cso") - set(SHADER_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../${Shader}") - - set(COMMAND_PARAMS "fxc" - "${SHADER_SOURCE}" - /T "${SHADER_TYPE}_5_0" - /I "${CMAKE_CURRENT_SOURCE_DIR}/../" - /E "main" - /nologo - /Qstrip_reflect - /Qstrip_debug - /Fo ${SHADER_OUTPUT} - ) - - add_custom_command( - OUTPUT ${SHADER_OUTPUT} - COMMAND ${COMMAND_PARAMS} - DEPENDS ${SHADER_SOURCE} - ) - list(APPEND LEGACY_SHADER_BINARY_FILES ${SHADER_OUTPUT}) - endforeach() - set(LEGACY_SHADER_BINARY_FILES ${LEGACY_SHADER_BINARY_FILES} PARENT_SCOPE) - - endfunction() - - Generate_Shaders_Legacy(SHADERS_VS vs) - Generate_Shaders_Legacy(SHADERS_HS hs) - Generate_Shaders_Legacy(SHADERS_DS ds) - Generate_Shaders_Legacy(SHADERS_GS gs) - Generate_Shaders_Legacy(SHADERS_PS ps) - Generate_Shaders_Legacy(SHADERS_CS cs) - add_custom_target(Shaders_Legacy DEPENDS ${LEGACY_SHADER_BINARY_FILES}) - set_property(TARGET "Shaders_Legacy" PROPERTY FOLDER "Shaders") - - # DXC (Shader Model 6.0+ for DirectX12) - set(DXC_OUTPUT_DIR hlsl6) - function(Generate_Shaders_DXC SHADERS_SRC_LIST SHADER_TYPE) - foreach (Shader IN LISTS ${SHADERS_SRC_LIST}) - get_filename_component(FILE_NAME ${Shader} NAME_WLE) - - set(DXC_OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${DXC_OUTPUT_DIR}/${FILE_NAME}.cso") - set(DXC_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../${Shader}") - set(COMMAND_PARAMS ${DXC_TARGET} - "${DXC_SOURCE}" - -T "${SHADER_TYPE}_6_5" - -I "${CMAKE_CURRENT_SOURCE_DIR}/../" - -D HLSL6 - #-all-resources-bound - #-pack-optimized - -res-may-alias - #-no-legacy-cbuf-layout - -flegacy-macro-expansion - -Fo ${DXC_OUTPUT} - ) - - add_custom_command( - OUTPUT ${DXC_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/${DXC_OUTPUT_DIR}/" - COMMAND ${COMMAND_PARAMS} - DEPENDS ${DXC_SOURCE} - ) - list(APPEND DXC_BINARY_FILES ${DXC_OUTPUT}) - endforeach() - - set(DXC_BINARY_FILES ${DXC_BINARY_FILES} PARENT_SCOPE) - endfunction() - - Generate_Shaders_DXC(SHADERS_VS vs) - Generate_Shaders_DXC(SHADERS_HS hs) - Generate_Shaders_DXC(SHADERS_DS ds) - Generate_Shaders_DXC(SHADERS_GS gs) - Generate_Shaders_DXC(SHADERS_PS ps) - Generate_Shaders_DXC(SHADERS_CS cs) - Generate_Shaders_DXC(SHADERS_LIB lib) - - add_custom_target(Shaders_DXC DEPENDS ${DXC_BINARY_FILES}) - set_property(TARGET "Shaders_DXC" PROPERTY FOLDER "Shaders") -endif () diff --git a/WickedEngine/ConstantBufferMapping.h b/WickedEngine/shaders/ConstantBufferMapping.h similarity index 100% rename from WickedEngine/ConstantBufferMapping.h rename to WickedEngine/shaders/ConstantBufferMapping.h diff --git a/WickedEngine/ResourceMapping.h b/WickedEngine/shaders/ResourceMapping.h similarity index 100% rename from WickedEngine/ResourceMapping.h rename to WickedEngine/shaders/ResourceMapping.h diff --git a/WickedEngine/SamplerMapping.h b/WickedEngine/shaders/SamplerMapping.h similarity index 100% rename from WickedEngine/SamplerMapping.h rename to WickedEngine/shaders/SamplerMapping.h diff --git a/WickedEngine/ShaderInterop.h b/WickedEngine/shaders/ShaderInterop.h similarity index 96% rename from WickedEngine/ShaderInterop.h rename to WickedEngine/shaders/ShaderInterop.h index f7007b625..f5d56b606 100644 --- a/WickedEngine/ShaderInterop.h +++ b/WickedEngine/shaders/ShaderInterop.h @@ -73,16 +73,22 @@ typedef XMINT4 int4; #define BINDLESS #define RAYTRACINGACCELERATIONSTRUCTURE(name, slot) RaytracingAccelerationStructure name : register(t ## slot) #else -#define WaveReadLaneFirst(a) (a) -#define WaveActiveBitOr(a) (a) +#define DISABLE_WAVE_INTRINSICS #endif // HLSL6 || SPIRV #ifdef SPIRV #define PUSHCONSTANT(name, type) [[vk::push_constant]] type name; -#else -#define PUSHCONSTANT(name, type) ConstantBuffer name : register(b999) #endif // SPIRV +#ifdef HLSL6 +#define PUSHCONSTANT(name, type) ConstantBuffer name : register(b999) +#endif // HLSL6 + +#ifdef DISABLE_WAVE_INTRINSICS +#define WaveReadLaneFirst(a) (a) +#define WaveActiveBitOr(a) (a) +#endif // DISABLE_WAVE_INTRINSICS + #endif // __cplusplus #endif // WI_SHADERINTEROP_H diff --git a/WickedEngine/ShaderInterop_BVH.h b/WickedEngine/shaders/ShaderInterop_BVH.h similarity index 100% rename from WickedEngine/ShaderInterop_BVH.h rename to WickedEngine/shaders/ShaderInterop_BVH.h diff --git a/WickedEngine/ShaderInterop_EmittedParticle.h b/WickedEngine/shaders/ShaderInterop_EmittedParticle.h similarity index 100% rename from WickedEngine/ShaderInterop_EmittedParticle.h rename to WickedEngine/shaders/ShaderInterop_EmittedParticle.h diff --git a/WickedEngine/ShaderInterop_FFTGenerator.h b/WickedEngine/shaders/ShaderInterop_FFTGenerator.h similarity index 100% rename from WickedEngine/ShaderInterop_FFTGenerator.h rename to WickedEngine/shaders/ShaderInterop_FFTGenerator.h diff --git a/WickedEngine/ShaderInterop_Font.h b/WickedEngine/shaders/ShaderInterop_Font.h similarity index 100% rename from WickedEngine/ShaderInterop_Font.h rename to WickedEngine/shaders/ShaderInterop_Font.h diff --git a/WickedEngine/ShaderInterop_GPUSortLib.h b/WickedEngine/shaders/ShaderInterop_GPUSortLib.h similarity index 100% rename from WickedEngine/ShaderInterop_GPUSortLib.h rename to WickedEngine/shaders/ShaderInterop_GPUSortLib.h diff --git a/WickedEngine/ShaderInterop_HairParticle.h b/WickedEngine/shaders/ShaderInterop_HairParticle.h similarity index 100% rename from WickedEngine/ShaderInterop_HairParticle.h rename to WickedEngine/shaders/ShaderInterop_HairParticle.h diff --git a/WickedEngine/ShaderInterop_Image.h b/WickedEngine/shaders/ShaderInterop_Image.h similarity index 100% rename from WickedEngine/ShaderInterop_Image.h rename to WickedEngine/shaders/ShaderInterop_Image.h diff --git a/WickedEngine/ShaderInterop_Ocean.h b/WickedEngine/shaders/ShaderInterop_Ocean.h similarity index 100% rename from WickedEngine/ShaderInterop_Ocean.h rename to WickedEngine/shaders/ShaderInterop_Ocean.h diff --git a/WickedEngine/ShaderInterop_Paint.h b/WickedEngine/shaders/ShaderInterop_Paint.h similarity index 100% rename from WickedEngine/ShaderInterop_Paint.h rename to WickedEngine/shaders/ShaderInterop_Paint.h diff --git a/WickedEngine/ShaderInterop_Postprocess.h b/WickedEngine/shaders/ShaderInterop_Postprocess.h similarity index 100% rename from WickedEngine/ShaderInterop_Postprocess.h rename to WickedEngine/shaders/ShaderInterop_Postprocess.h diff --git a/WickedEngine/ShaderInterop_Raytracing.h b/WickedEngine/shaders/ShaderInterop_Raytracing.h similarity index 100% rename from WickedEngine/ShaderInterop_Raytracing.h rename to WickedEngine/shaders/ShaderInterop_Raytracing.h diff --git a/WickedEngine/ShaderInterop_Renderer.h b/WickedEngine/shaders/ShaderInterop_Renderer.h similarity index 100% rename from WickedEngine/ShaderInterop_Renderer.h rename to WickedEngine/shaders/ShaderInterop_Renderer.h diff --git a/WickedEngine/ShaderInterop_Skinning.h b/WickedEngine/shaders/ShaderInterop_Skinning.h similarity index 100% rename from WickedEngine/ShaderInterop_Skinning.h rename to WickedEngine/shaders/ShaderInterop_Skinning.h diff --git a/WickedEngine/ShaderInterop_Utility.h b/WickedEngine/shaders/ShaderInterop_Utility.h similarity index 100% rename from WickedEngine/ShaderInterop_Utility.h rename to WickedEngine/shaders/ShaderInterop_Utility.h diff --git a/WickedEngine/Shaders_SOURCE.vcxitems b/WickedEngine/shaders/Shaders_SOURCE.vcxitems similarity index 99% rename from WickedEngine/Shaders_SOURCE.vcxitems rename to WickedEngine/shaders/Shaders_SOURCE.vcxitems index c308b5aa5..5c832ddf9 100644 --- a/WickedEngine/Shaders_SOURCE.vcxitems +++ b/WickedEngine/shaders/Shaders_SOURCE.vcxitems @@ -2956,4 +2956,24 @@ Vertex + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WickedEngine/Shaders_SOURCE.vcxitems.filters b/WickedEngine/shaders/Shaders_SOURCE.vcxitems.filters similarity index 94% rename from WickedEngine/Shaders_SOURCE.vcxitems.filters rename to WickedEngine/shaders/Shaders_SOURCE.vcxitems.filters index ccc8e2e5b..f3ba3a149 100644 --- a/WickedEngine/Shaders_SOURCE.vcxitems.filters +++ b/WickedEngine/shaders/Shaders_SOURCE.vcxitems.filters @@ -28,6 +28,9 @@ {92e70786-aab6-48dd-9d04-277448eaa897} + + {d43cceda-5146-4e72-92e4-e97b4b91fd6e} + @@ -978,4 +981,60 @@ CS + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + + interop + + \ No newline at end of file diff --git a/WickedEngine/bitonicSortHF.hlsli b/WickedEngine/shaders/bitonicSortHF.hlsli similarity index 100% rename from WickedEngine/bitonicSortHF.hlsli rename to WickedEngine/shaders/bitonicSortHF.hlsli diff --git a/WickedEngine/bloomcombineCS.hlsl b/WickedEngine/shaders/bloomcombineCS.hlsl similarity index 100% rename from WickedEngine/bloomcombineCS.hlsl rename to WickedEngine/shaders/bloomcombineCS.hlsl diff --git a/WickedEngine/bloomseparateCS.hlsl b/WickedEngine/shaders/bloomseparateCS.hlsl similarity index 100% rename from WickedEngine/bloomseparateCS.hlsl rename to WickedEngine/shaders/bloomseparateCS.hlsl diff --git a/WickedEngine/blur_bilateral_float1CS.hlsl b/WickedEngine/shaders/blur_bilateral_float1CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_float1CS.hlsl rename to WickedEngine/shaders/blur_bilateral_float1CS.hlsl diff --git a/WickedEngine/blur_bilateral_float3CS.hlsl b/WickedEngine/shaders/blur_bilateral_float3CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_float3CS.hlsl rename to WickedEngine/shaders/blur_bilateral_float3CS.hlsl diff --git a/WickedEngine/blur_bilateral_float4CS.hlsl b/WickedEngine/shaders/blur_bilateral_float4CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_float4CS.hlsl rename to WickedEngine/shaders/blur_bilateral_float4CS.hlsl diff --git a/WickedEngine/blur_bilateral_unorm1CS.hlsl b/WickedEngine/shaders/blur_bilateral_unorm1CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_unorm1CS.hlsl rename to WickedEngine/shaders/blur_bilateral_unorm1CS.hlsl diff --git a/WickedEngine/blur_bilateral_unorm4CS.hlsl b/WickedEngine/shaders/blur_bilateral_unorm4CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_unorm4CS.hlsl rename to WickedEngine/shaders/blur_bilateral_unorm4CS.hlsl diff --git a/WickedEngine/blur_bilateral_wide_float1CS.hlsl b/WickedEngine/shaders/blur_bilateral_wide_float1CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_wide_float1CS.hlsl rename to WickedEngine/shaders/blur_bilateral_wide_float1CS.hlsl diff --git a/WickedEngine/blur_bilateral_wide_float3CS.hlsl b/WickedEngine/shaders/blur_bilateral_wide_float3CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_wide_float3CS.hlsl rename to WickedEngine/shaders/blur_bilateral_wide_float3CS.hlsl diff --git a/WickedEngine/blur_bilateral_wide_float4CS.hlsl b/WickedEngine/shaders/blur_bilateral_wide_float4CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_wide_float4CS.hlsl rename to WickedEngine/shaders/blur_bilateral_wide_float4CS.hlsl diff --git a/WickedEngine/blur_bilateral_wide_unorm1CS.hlsl b/WickedEngine/shaders/blur_bilateral_wide_unorm1CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_wide_unorm1CS.hlsl rename to WickedEngine/shaders/blur_bilateral_wide_unorm1CS.hlsl diff --git a/WickedEngine/blur_bilateral_wide_unorm4CS.hlsl b/WickedEngine/shaders/blur_bilateral_wide_unorm4CS.hlsl similarity index 100% rename from WickedEngine/blur_bilateral_wide_unorm4CS.hlsl rename to WickedEngine/shaders/blur_bilateral_wide_unorm4CS.hlsl diff --git a/WickedEngine/blur_gaussian_float1CS.hlsl b/WickedEngine/shaders/blur_gaussian_float1CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_float1CS.hlsl rename to WickedEngine/shaders/blur_gaussian_float1CS.hlsl diff --git a/WickedEngine/blur_gaussian_float3CS.hlsl b/WickedEngine/shaders/blur_gaussian_float3CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_float3CS.hlsl rename to WickedEngine/shaders/blur_gaussian_float3CS.hlsl diff --git a/WickedEngine/blur_gaussian_float4CS.hlsl b/WickedEngine/shaders/blur_gaussian_float4CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_float4CS.hlsl rename to WickedEngine/shaders/blur_gaussian_float4CS.hlsl diff --git a/WickedEngine/blur_gaussian_unorm1CS.hlsl b/WickedEngine/shaders/blur_gaussian_unorm1CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_unorm1CS.hlsl rename to WickedEngine/shaders/blur_gaussian_unorm1CS.hlsl diff --git a/WickedEngine/blur_gaussian_unorm4CS.hlsl b/WickedEngine/shaders/blur_gaussian_unorm4CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_unorm4CS.hlsl rename to WickedEngine/shaders/blur_gaussian_unorm4CS.hlsl diff --git a/WickedEngine/blur_gaussian_wide_float1CS.hlsl b/WickedEngine/shaders/blur_gaussian_wide_float1CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_wide_float1CS.hlsl rename to WickedEngine/shaders/blur_gaussian_wide_float1CS.hlsl diff --git a/WickedEngine/blur_gaussian_wide_float3CS.hlsl b/WickedEngine/shaders/blur_gaussian_wide_float3CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_wide_float3CS.hlsl rename to WickedEngine/shaders/blur_gaussian_wide_float3CS.hlsl diff --git a/WickedEngine/blur_gaussian_wide_float4CS.hlsl b/WickedEngine/shaders/blur_gaussian_wide_float4CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_wide_float4CS.hlsl rename to WickedEngine/shaders/blur_gaussian_wide_float4CS.hlsl diff --git a/WickedEngine/blur_gaussian_wide_unorm1CS.hlsl b/WickedEngine/shaders/blur_gaussian_wide_unorm1CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_wide_unorm1CS.hlsl rename to WickedEngine/shaders/blur_gaussian_wide_unorm1CS.hlsl diff --git a/WickedEngine/blur_gaussian_wide_unorm4CS.hlsl b/WickedEngine/shaders/blur_gaussian_wide_unorm4CS.hlsl similarity index 100% rename from WickedEngine/blur_gaussian_wide_unorm4CS.hlsl rename to WickedEngine/shaders/blur_gaussian_wide_unorm4CS.hlsl diff --git a/WickedEngine/brdf.hlsli b/WickedEngine/shaders/brdf.hlsli similarity index 100% rename from WickedEngine/brdf.hlsli rename to WickedEngine/shaders/brdf.hlsli diff --git a/WickedEngine/bvh_hierarchyCS.hlsl b/WickedEngine/shaders/bvh_hierarchyCS.hlsl similarity index 100% rename from WickedEngine/bvh_hierarchyCS.hlsl rename to WickedEngine/shaders/bvh_hierarchyCS.hlsl diff --git a/WickedEngine/bvh_primitivesCS.hlsl b/WickedEngine/shaders/bvh_primitivesCS.hlsl similarity index 100% rename from WickedEngine/bvh_primitivesCS.hlsl rename to WickedEngine/shaders/bvh_primitivesCS.hlsl diff --git a/WickedEngine/bvh_propagateaabbCS.hlsl b/WickedEngine/shaders/bvh_propagateaabbCS.hlsl similarity index 100% rename from WickedEngine/bvh_propagateaabbCS.hlsl rename to WickedEngine/shaders/bvh_propagateaabbCS.hlsl diff --git a/WickedEngine/captureImpostorPS_albedo.hlsl b/WickedEngine/shaders/captureImpostorPS_albedo.hlsl similarity index 100% rename from WickedEngine/captureImpostorPS_albedo.hlsl rename to WickedEngine/shaders/captureImpostorPS_albedo.hlsl diff --git a/WickedEngine/captureImpostorPS_normal.hlsl b/WickedEngine/shaders/captureImpostorPS_normal.hlsl similarity index 100% rename from WickedEngine/captureImpostorPS_normal.hlsl rename to WickedEngine/shaders/captureImpostorPS_normal.hlsl diff --git a/WickedEngine/captureImpostorPS_surface.hlsl b/WickedEngine/shaders/captureImpostorPS_surface.hlsl similarity index 100% rename from WickedEngine/captureImpostorPS_surface.hlsl rename to WickedEngine/shaders/captureImpostorPS_surface.hlsl diff --git a/WickedEngine/chromatic_aberrationCS.hlsl b/WickedEngine/shaders/chromatic_aberrationCS.hlsl similarity index 100% rename from WickedEngine/chromatic_aberrationCS.hlsl rename to WickedEngine/shaders/chromatic_aberrationCS.hlsl diff --git a/WickedEngine/circle.hlsli b/WickedEngine/shaders/circle.hlsli similarity index 100% rename from WickedEngine/circle.hlsli rename to WickedEngine/shaders/circle.hlsli diff --git a/WickedEngine/circlePS.hlsl b/WickedEngine/shaders/circlePS.hlsl similarity index 100% rename from WickedEngine/circlePS.hlsl rename to WickedEngine/shaders/circlePS.hlsl diff --git a/WickedEngine/cone.hlsli b/WickedEngine/shaders/cone.hlsli similarity index 100% rename from WickedEngine/cone.hlsli rename to WickedEngine/shaders/cone.hlsli diff --git a/WickedEngine/copytexture2D_float4CS.hlsl b/WickedEngine/shaders/copytexture2D_float4CS.hlsl similarity index 100% rename from WickedEngine/copytexture2D_float4CS.hlsl rename to WickedEngine/shaders/copytexture2D_float4CS.hlsl diff --git a/WickedEngine/copytexture2D_float4_borderexpandCS.hlsl b/WickedEngine/shaders/copytexture2D_float4_borderexpandCS.hlsl similarity index 100% rename from WickedEngine/copytexture2D_float4_borderexpandCS.hlsl rename to WickedEngine/shaders/copytexture2D_float4_borderexpandCS.hlsl diff --git a/WickedEngine/copytexture2D_unorm4CS.hlsl b/WickedEngine/shaders/copytexture2D_unorm4CS.hlsl similarity index 100% rename from WickedEngine/copytexture2D_unorm4CS.hlsl rename to WickedEngine/shaders/copytexture2D_unorm4CS.hlsl diff --git a/WickedEngine/copytexture2D_unorm4_borderexpandCS.hlsl b/WickedEngine/shaders/copytexture2D_unorm4_borderexpandCS.hlsl similarity index 100% rename from WickedEngine/copytexture2D_unorm4_borderexpandCS.hlsl rename to WickedEngine/shaders/copytexture2D_unorm4_borderexpandCS.hlsl diff --git a/WickedEngine/cube.hlsli b/WickedEngine/shaders/cube.hlsli similarity index 100% rename from WickedEngine/cube.hlsli rename to WickedEngine/shaders/cube.hlsli diff --git a/WickedEngine/cubeMapPS.hlsl b/WickedEngine/shaders/cubeMapPS.hlsl similarity index 100% rename from WickedEngine/cubeMapPS.hlsl rename to WickedEngine/shaders/cubeMapPS.hlsl diff --git a/WickedEngine/cubeShadowGS_alphatest_emulation.hlsl b/WickedEngine/shaders/cubeShadowGS_alphatest_emulation.hlsl similarity index 100% rename from WickedEngine/cubeShadowGS_alphatest_emulation.hlsl rename to WickedEngine/shaders/cubeShadowGS_alphatest_emulation.hlsl diff --git a/WickedEngine/cubeShadowGS_emulation.hlsl b/WickedEngine/shaders/cubeShadowGS_emulation.hlsl similarity index 100% rename from WickedEngine/cubeShadowGS_emulation.hlsl rename to WickedEngine/shaders/cubeShadowGS_emulation.hlsl diff --git a/WickedEngine/cubeShadowGS_transparent_emulation.hlsl b/WickedEngine/shaders/cubeShadowGS_transparent_emulation.hlsl similarity index 100% rename from WickedEngine/cubeShadowGS_transparent_emulation.hlsl rename to WickedEngine/shaders/cubeShadowGS_transparent_emulation.hlsl diff --git a/WickedEngine/cubeShadowVS.hlsl b/WickedEngine/shaders/cubeShadowVS.hlsl similarity index 100% rename from WickedEngine/cubeShadowVS.hlsl rename to WickedEngine/shaders/cubeShadowVS.hlsl diff --git a/WickedEngine/cubeShadowVS_alphatest.hlsl b/WickedEngine/shaders/cubeShadowVS_alphatest.hlsl similarity index 100% rename from WickedEngine/cubeShadowVS_alphatest.hlsl rename to WickedEngine/shaders/cubeShadowVS_alphatest.hlsl diff --git a/WickedEngine/cubeShadowVS_alphatest_emulation.hlsl b/WickedEngine/shaders/cubeShadowVS_alphatest_emulation.hlsl similarity index 100% rename from WickedEngine/cubeShadowVS_alphatest_emulation.hlsl rename to WickedEngine/shaders/cubeShadowVS_alphatest_emulation.hlsl diff --git a/WickedEngine/cubeShadowVS_emulation.hlsl b/WickedEngine/shaders/cubeShadowVS_emulation.hlsl similarity index 100% rename from WickedEngine/cubeShadowVS_emulation.hlsl rename to WickedEngine/shaders/cubeShadowVS_emulation.hlsl diff --git a/WickedEngine/cubeShadowVS_transparent.hlsl b/WickedEngine/shaders/cubeShadowVS_transparent.hlsl similarity index 100% rename from WickedEngine/cubeShadowVS_transparent.hlsl rename to WickedEngine/shaders/cubeShadowVS_transparent.hlsl diff --git a/WickedEngine/cubeShadowVS_transparent_emulation.hlsl b/WickedEngine/shaders/cubeShadowVS_transparent_emulation.hlsl similarity index 100% rename from WickedEngine/cubeShadowVS_transparent_emulation.hlsl rename to WickedEngine/shaders/cubeShadowVS_transparent_emulation.hlsl diff --git a/WickedEngine/cubeVS.hlsl b/WickedEngine/shaders/cubeVS.hlsl similarity index 100% rename from WickedEngine/cubeVS.hlsl rename to WickedEngine/shaders/cubeVS.hlsl diff --git a/WickedEngine/cullingShaderHF.hlsli b/WickedEngine/shaders/cullingShaderHF.hlsli similarity index 100% rename from WickedEngine/cullingShaderHF.hlsli rename to WickedEngine/shaders/cullingShaderHF.hlsli diff --git a/WickedEngine/cylinder.hlsli b/WickedEngine/shaders/cylinder.hlsli similarity index 100% rename from WickedEngine/cylinder.hlsli rename to WickedEngine/shaders/cylinder.hlsli diff --git a/WickedEngine/depthOfFieldHF.hlsli b/WickedEngine/shaders/depthOfFieldHF.hlsli similarity index 100% rename from WickedEngine/depthOfFieldHF.hlsli rename to WickedEngine/shaders/depthOfFieldHF.hlsli diff --git a/WickedEngine/depthoffield_kickjobsCS.hlsl b/WickedEngine/shaders/depthoffield_kickjobsCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_kickjobsCS.hlsl rename to WickedEngine/shaders/depthoffield_kickjobsCS.hlsl diff --git a/WickedEngine/depthoffield_mainCS.hlsl b/WickedEngine/shaders/depthoffield_mainCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_mainCS.hlsl rename to WickedEngine/shaders/depthoffield_mainCS.hlsl diff --git a/WickedEngine/depthoffield_mainCS_cheap.hlsl b/WickedEngine/shaders/depthoffield_mainCS_cheap.hlsl similarity index 100% rename from WickedEngine/depthoffield_mainCS_cheap.hlsl rename to WickedEngine/shaders/depthoffield_mainCS_cheap.hlsl diff --git a/WickedEngine/depthoffield_mainCS_earlyexit.hlsl b/WickedEngine/shaders/depthoffield_mainCS_earlyexit.hlsl similarity index 100% rename from WickedEngine/depthoffield_mainCS_earlyexit.hlsl rename to WickedEngine/shaders/depthoffield_mainCS_earlyexit.hlsl diff --git a/WickedEngine/depthoffield_neighborhoodMaxCOCCS.hlsl b/WickedEngine/shaders/depthoffield_neighborhoodMaxCOCCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_neighborhoodMaxCOCCS.hlsl rename to WickedEngine/shaders/depthoffield_neighborhoodMaxCOCCS.hlsl diff --git a/WickedEngine/depthoffield_postfilterCS.hlsl b/WickedEngine/shaders/depthoffield_postfilterCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_postfilterCS.hlsl rename to WickedEngine/shaders/depthoffield_postfilterCS.hlsl diff --git a/WickedEngine/depthoffield_prepassCS.hlsl b/WickedEngine/shaders/depthoffield_prepassCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_prepassCS.hlsl rename to WickedEngine/shaders/depthoffield_prepassCS.hlsl diff --git a/WickedEngine/depthoffield_prepassCS_earlyexit.hlsl b/WickedEngine/shaders/depthoffield_prepassCS_earlyexit.hlsl similarity index 100% rename from WickedEngine/depthoffield_prepassCS_earlyexit.hlsl rename to WickedEngine/shaders/depthoffield_prepassCS_earlyexit.hlsl diff --git a/WickedEngine/depthoffield_tileMaxCOC_horizontalCS.hlsl b/WickedEngine/shaders/depthoffield_tileMaxCOC_horizontalCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_tileMaxCOC_horizontalCS.hlsl rename to WickedEngine/shaders/depthoffield_tileMaxCOC_horizontalCS.hlsl diff --git a/WickedEngine/depthoffield_tileMaxCOC_verticalCS.hlsl b/WickedEngine/shaders/depthoffield_tileMaxCOC_verticalCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_tileMaxCOC_verticalCS.hlsl rename to WickedEngine/shaders/depthoffield_tileMaxCOC_verticalCS.hlsl diff --git a/WickedEngine/depthoffield_upsampleCS.hlsl b/WickedEngine/shaders/depthoffield_upsampleCS.hlsl similarity index 100% rename from WickedEngine/depthoffield_upsampleCS.hlsl rename to WickedEngine/shaders/depthoffield_upsampleCS.hlsl diff --git a/WickedEngine/downsample4xCS.hlsl b/WickedEngine/shaders/downsample4xCS.hlsl similarity index 100% rename from WickedEngine/downsample4xCS.hlsl rename to WickedEngine/shaders/downsample4xCS.hlsl diff --git a/WickedEngine/downsampleDepthBuffer4xPS.hlsl b/WickedEngine/shaders/downsampleDepthBuffer4xPS.hlsl similarity index 100% rename from WickedEngine/downsampleDepthBuffer4xPS.hlsl rename to WickedEngine/shaders/downsampleDepthBuffer4xPS.hlsl diff --git a/WickedEngine/emittedparticleHF.hlsli b/WickedEngine/shaders/emittedparticleHF.hlsli similarity index 100% rename from WickedEngine/emittedparticleHF.hlsli rename to WickedEngine/shaders/emittedparticleHF.hlsli diff --git a/WickedEngine/emittedparticleMS.hlsl b/WickedEngine/shaders/emittedparticleMS.hlsl similarity index 100% rename from WickedEngine/emittedparticleMS.hlsl rename to WickedEngine/shaders/emittedparticleMS.hlsl diff --git a/WickedEngine/emittedparticlePS_simplest.hlsl b/WickedEngine/shaders/emittedparticlePS_simplest.hlsl similarity index 100% rename from WickedEngine/emittedparticlePS_simplest.hlsl rename to WickedEngine/shaders/emittedparticlePS_simplest.hlsl diff --git a/WickedEngine/emittedparticlePS_soft.hlsl b/WickedEngine/shaders/emittedparticlePS_soft.hlsl similarity index 100% rename from WickedEngine/emittedparticlePS_soft.hlsl rename to WickedEngine/shaders/emittedparticlePS_soft.hlsl diff --git a/WickedEngine/emittedparticlePS_soft_distortion.hlsl b/WickedEngine/shaders/emittedparticlePS_soft_distortion.hlsl similarity index 100% rename from WickedEngine/emittedparticlePS_soft_distortion.hlsl rename to WickedEngine/shaders/emittedparticlePS_soft_distortion.hlsl diff --git a/WickedEngine/emittedparticlePS_soft_lighting.hlsl b/WickedEngine/shaders/emittedparticlePS_soft_lighting.hlsl similarity index 100% rename from WickedEngine/emittedparticlePS_soft_lighting.hlsl rename to WickedEngine/shaders/emittedparticlePS_soft_lighting.hlsl diff --git a/WickedEngine/emittedparticleVS.hlsl b/WickedEngine/shaders/emittedparticleVS.hlsl similarity index 100% rename from WickedEngine/emittedparticleVS.hlsl rename to WickedEngine/shaders/emittedparticleVS.hlsl diff --git a/WickedEngine/emittedparticle_emitCS.hlsl b/WickedEngine/shaders/emittedparticle_emitCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_emitCS.hlsl rename to WickedEngine/shaders/emittedparticle_emitCS.hlsl diff --git a/WickedEngine/emittedparticle_emitCS_FROMMESH.hlsl b/WickedEngine/shaders/emittedparticle_emitCS_FROMMESH.hlsl similarity index 100% rename from WickedEngine/emittedparticle_emitCS_FROMMESH.hlsl rename to WickedEngine/shaders/emittedparticle_emitCS_FROMMESH.hlsl diff --git a/WickedEngine/emittedparticle_emitCS_volume.hlsl b/WickedEngine/shaders/emittedparticle_emitCS_volume.hlsl similarity index 100% rename from WickedEngine/emittedparticle_emitCS_volume.hlsl rename to WickedEngine/shaders/emittedparticle_emitCS_volume.hlsl diff --git a/WickedEngine/emittedparticle_finishUpdateCS.hlsl b/WickedEngine/shaders/emittedparticle_finishUpdateCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_finishUpdateCS.hlsl rename to WickedEngine/shaders/emittedparticle_finishUpdateCS.hlsl diff --git a/WickedEngine/emittedparticle_kickoffUpdateCS.hlsl b/WickedEngine/shaders/emittedparticle_kickoffUpdateCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_kickoffUpdateCS.hlsl rename to WickedEngine/shaders/emittedparticle_kickoffUpdateCS.hlsl diff --git a/WickedEngine/emittedparticle_simulateCS.hlsl b/WickedEngine/shaders/emittedparticle_simulateCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_simulateCS.hlsl rename to WickedEngine/shaders/emittedparticle_simulateCS.hlsl diff --git a/WickedEngine/emittedparticle_simulateCS_DEPTHCOLLISIONS.hlsl b/WickedEngine/shaders/emittedparticle_simulateCS_DEPTHCOLLISIONS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_simulateCS_DEPTHCOLLISIONS.hlsl rename to WickedEngine/shaders/emittedparticle_simulateCS_DEPTHCOLLISIONS.hlsl diff --git a/WickedEngine/emittedparticle_simulateCS_SORTING.hlsl b/WickedEngine/shaders/emittedparticle_simulateCS_SORTING.hlsl similarity index 100% rename from WickedEngine/emittedparticle_simulateCS_SORTING.hlsl rename to WickedEngine/shaders/emittedparticle_simulateCS_SORTING.hlsl diff --git a/WickedEngine/emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.hlsl b/WickedEngine/shaders/emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.hlsl rename to WickedEngine/shaders/emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.hlsl diff --git a/WickedEngine/emittedparticle_sphdensityCS.hlsl b/WickedEngine/shaders/emittedparticle_sphdensityCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_sphdensityCS.hlsl rename to WickedEngine/shaders/emittedparticle_sphdensityCS.hlsl diff --git a/WickedEngine/emittedparticle_sphforceCS.hlsl b/WickedEngine/shaders/emittedparticle_sphforceCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_sphforceCS.hlsl rename to WickedEngine/shaders/emittedparticle_sphforceCS.hlsl diff --git a/WickedEngine/emittedparticle_sphpartitionCS.hlsl b/WickedEngine/shaders/emittedparticle_sphpartitionCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_sphpartitionCS.hlsl rename to WickedEngine/shaders/emittedparticle_sphpartitionCS.hlsl diff --git a/WickedEngine/emittedparticle_sphpartitionoffsetsCS.hlsl b/WickedEngine/shaders/emittedparticle_sphpartitionoffsetsCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_sphpartitionoffsetsCS.hlsl rename to WickedEngine/shaders/emittedparticle_sphpartitionoffsetsCS.hlsl diff --git a/WickedEngine/emittedparticle_sphpartitionoffsetsresetCS.hlsl b/WickedEngine/shaders/emittedparticle_sphpartitionoffsetsresetCS.hlsl similarity index 100% rename from WickedEngine/emittedparticle_sphpartitionoffsetsresetCS.hlsl rename to WickedEngine/shaders/emittedparticle_sphpartitionoffsetsresetCS.hlsl diff --git a/WickedEngine/envMapGS_emulation.hlsl b/WickedEngine/shaders/envMapGS_emulation.hlsl similarity index 100% rename from WickedEngine/envMapGS_emulation.hlsl rename to WickedEngine/shaders/envMapGS_emulation.hlsl diff --git a/WickedEngine/envMapPS.hlsl b/WickedEngine/shaders/envMapPS.hlsl similarity index 100% rename from WickedEngine/envMapPS.hlsl rename to WickedEngine/shaders/envMapPS.hlsl diff --git a/WickedEngine/envMapPS_terrain.hlsl b/WickedEngine/shaders/envMapPS_terrain.hlsl similarity index 100% rename from WickedEngine/envMapPS_terrain.hlsl rename to WickedEngine/shaders/envMapPS_terrain.hlsl diff --git a/WickedEngine/envMapVS.hlsl b/WickedEngine/shaders/envMapVS.hlsl similarity index 100% rename from WickedEngine/envMapVS.hlsl rename to WickedEngine/shaders/envMapVS.hlsl diff --git a/WickedEngine/envMapVS_emulation.hlsl b/WickedEngine/shaders/envMapVS_emulation.hlsl similarity index 100% rename from WickedEngine/envMapVS_emulation.hlsl rename to WickedEngine/shaders/envMapVS_emulation.hlsl diff --git a/WickedEngine/envMap_skyGS_emulation.hlsl b/WickedEngine/shaders/envMap_skyGS_emulation.hlsl similarity index 100% rename from WickedEngine/envMap_skyGS_emulation.hlsl rename to WickedEngine/shaders/envMap_skyGS_emulation.hlsl diff --git a/WickedEngine/envMap_skyPS_dynamic.hlsl b/WickedEngine/shaders/envMap_skyPS_dynamic.hlsl similarity index 100% rename from WickedEngine/envMap_skyPS_dynamic.hlsl rename to WickedEngine/shaders/envMap_skyPS_dynamic.hlsl diff --git a/WickedEngine/envMap_skyPS_static.hlsl b/WickedEngine/shaders/envMap_skyPS_static.hlsl similarity index 100% rename from WickedEngine/envMap_skyPS_static.hlsl rename to WickedEngine/shaders/envMap_skyPS_static.hlsl diff --git a/WickedEngine/envMap_skyVS.hlsl b/WickedEngine/shaders/envMap_skyVS.hlsl similarity index 100% rename from WickedEngine/envMap_skyVS.hlsl rename to WickedEngine/shaders/envMap_skyVS.hlsl diff --git a/WickedEngine/envMap_skyVS_emulation.hlsl b/WickedEngine/shaders/envMap_skyVS_emulation.hlsl similarity index 100% rename from WickedEngine/envMap_skyVS_emulation.hlsl rename to WickedEngine/shaders/envMap_skyVS_emulation.hlsl diff --git a/WickedEngine/fft_512x512_c2c_CS.hlsl b/WickedEngine/shaders/fft_512x512_c2c_CS.hlsl similarity index 100% rename from WickedEngine/fft_512x512_c2c_CS.hlsl rename to WickedEngine/shaders/fft_512x512_c2c_CS.hlsl diff --git a/WickedEngine/fft_512x512_c2c_v2_CS.hlsl b/WickedEngine/shaders/fft_512x512_c2c_v2_CS.hlsl similarity index 100% rename from WickedEngine/fft_512x512_c2c_v2_CS.hlsl rename to WickedEngine/shaders/fft_512x512_c2c_v2_CS.hlsl diff --git a/WickedEngine/filterEnvMapCS.hlsl b/WickedEngine/shaders/filterEnvMapCS.hlsl similarity index 100% rename from WickedEngine/filterEnvMapCS.hlsl rename to WickedEngine/shaders/filterEnvMapCS.hlsl diff --git a/WickedEngine/fontPS.hlsl b/WickedEngine/shaders/fontPS.hlsl similarity index 100% rename from WickedEngine/fontPS.hlsl rename to WickedEngine/shaders/fontPS.hlsl diff --git a/WickedEngine/fontVS.hlsl b/WickedEngine/shaders/fontVS.hlsl similarity index 100% rename from WickedEngine/fontVS.hlsl rename to WickedEngine/shaders/fontVS.hlsl diff --git a/WickedEngine/forceFieldPlaneVisualizerVS.hlsl b/WickedEngine/shaders/forceFieldPlaneVisualizerVS.hlsl similarity index 100% rename from WickedEngine/forceFieldPlaneVisualizerVS.hlsl rename to WickedEngine/shaders/forceFieldPlaneVisualizerVS.hlsl diff --git a/WickedEngine/forceFieldPointVisualizerVS.hlsl b/WickedEngine/shaders/forceFieldPointVisualizerVS.hlsl similarity index 100% rename from WickedEngine/forceFieldPointVisualizerVS.hlsl rename to WickedEngine/shaders/forceFieldPointVisualizerVS.hlsl diff --git a/WickedEngine/forceFieldVisualizerPS.hlsl b/WickedEngine/shaders/forceFieldVisualizerPS.hlsl similarity index 100% rename from WickedEngine/forceFieldVisualizerPS.hlsl rename to WickedEngine/shaders/forceFieldVisualizerPS.hlsl diff --git a/WickedEngine/fxaa.hlsli b/WickedEngine/shaders/fxaa.hlsli similarity index 100% rename from WickedEngine/fxaa.hlsli rename to WickedEngine/shaders/fxaa.hlsli diff --git a/WickedEngine/fxaaCS.hlsl b/WickedEngine/shaders/fxaaCS.hlsl similarity index 100% rename from WickedEngine/fxaaCS.hlsl rename to WickedEngine/shaders/fxaaCS.hlsl diff --git a/WickedEngine/generateMIPChain2DCS_float4.hlsl b/WickedEngine/shaders/generateMIPChain2DCS_float4.hlsl similarity index 100% rename from WickedEngine/generateMIPChain2DCS_float4.hlsl rename to WickedEngine/shaders/generateMIPChain2DCS_float4.hlsl diff --git a/WickedEngine/generateMIPChain2DCS_unorm4.hlsl b/WickedEngine/shaders/generateMIPChain2DCS_unorm4.hlsl similarity index 100% rename from WickedEngine/generateMIPChain2DCS_unorm4.hlsl rename to WickedEngine/shaders/generateMIPChain2DCS_unorm4.hlsl diff --git a/WickedEngine/generateMIPChain3DCS_float4.hlsl b/WickedEngine/shaders/generateMIPChain3DCS_float4.hlsl similarity index 100% rename from WickedEngine/generateMIPChain3DCS_float4.hlsl rename to WickedEngine/shaders/generateMIPChain3DCS_float4.hlsl diff --git a/WickedEngine/generateMIPChain3DCS_unorm4.hlsl b/WickedEngine/shaders/generateMIPChain3DCS_unorm4.hlsl similarity index 100% rename from WickedEngine/generateMIPChain3DCS_unorm4.hlsl rename to WickedEngine/shaders/generateMIPChain3DCS_unorm4.hlsl diff --git a/WickedEngine/generateMIPChainCubeArrayCS_float4.hlsl b/WickedEngine/shaders/generateMIPChainCubeArrayCS_float4.hlsl similarity index 100% rename from WickedEngine/generateMIPChainCubeArrayCS_float4.hlsl rename to WickedEngine/shaders/generateMIPChainCubeArrayCS_float4.hlsl diff --git a/WickedEngine/generateMIPChainCubeArrayCS_unorm4.hlsl b/WickedEngine/shaders/generateMIPChainCubeArrayCS_unorm4.hlsl similarity index 100% rename from WickedEngine/generateMIPChainCubeArrayCS_unorm4.hlsl rename to WickedEngine/shaders/generateMIPChainCubeArrayCS_unorm4.hlsl diff --git a/WickedEngine/generateMIPChainCubeCS_float4.hlsl b/WickedEngine/shaders/generateMIPChainCubeCS_float4.hlsl similarity index 100% rename from WickedEngine/generateMIPChainCubeCS_float4.hlsl rename to WickedEngine/shaders/generateMIPChainCubeCS_float4.hlsl diff --git a/WickedEngine/generateMIPChainCubeCS_unorm4.hlsl b/WickedEngine/shaders/generateMIPChainCubeCS_unorm4.hlsl similarity index 100% rename from WickedEngine/generateMIPChainCubeCS_unorm4.hlsl rename to WickedEngine/shaders/generateMIPChainCubeCS_unorm4.hlsl diff --git a/WickedEngine/globals.hlsli b/WickedEngine/shaders/globals.hlsli similarity index 93% rename from WickedEngine/globals.hlsli rename to WickedEngine/shaders/globals.hlsli index 145f9ef82..57a026ecc 100644 --- a/WickedEngine/globals.hlsli +++ b/WickedEngine/shaders/globals.hlsli @@ -64,7 +64,7 @@ inline float GetScreenWidth() { return g_xFrame_ScreenWidthHeight.x; } inline float GetScreenHeight() { return g_xFrame_ScreenWidthHeight.y; } inline float2 GetInternalResolution() { return g_xFrame_InternalResolution; } inline float GetTime() { return g_xFrame_Time; } -inline uint2 GetTemporalAASampleRotation() { return uint2((g_xFrame_TemporalAASampleRotation >> 0) & 0x000000FF, (g_xFrame_TemporalAASampleRotation >> 8) & 0x000000FF); } +inline uint2 GetTemporalAASampleRotation() { return uint2((g_xFrame_TemporalAASampleRotation >> 0u) & 0x000000FF, (g_xFrame_TemporalAASampleRotation >> 8) & 0x000000FF); } inline bool IsStaticSky() { return g_xFrame_StaticSkyGamma > 0.0; } inline float GetFogAmount(float dist) @@ -156,7 +156,7 @@ inline uint3 unflatten3D(uint idx, uint3 dim) // Creates a unit cube triangle strip from just vertex ID (14 vertices) inline float3 CreateCube(in uint vertexID) { - uint b = 1 << vertexID; + uint b = 1u << vertexID; return float3((0x287a & b) != 0, (0x02af & b) != 0, (0x31e3 & b) != 0); } @@ -409,75 +409,75 @@ float4 SampleTextureCatmullRom(in Texture2D tex, in SamplerState linearS inline uint pack_unitvector(in float3 value) { uint retVal = 0; - retVal |= (uint)((value.x * 0.5 + 0.5) * 255.0) << 0; - retVal |= (uint)((value.y * 0.5 + 0.5) * 255.0) << 8; - retVal |= (uint)((value.z * 0.5 + 0.5) * 255.0) << 16; + retVal |= (uint)((value.x * 0.5 + 0.5) * 255.0) << 0u; + retVal |= (uint)((value.y * 0.5 + 0.5) * 255.0) << 8u; + retVal |= (uint)((value.z * 0.5 + 0.5) * 255.0) << 16u; return retVal; } inline float3 unpack_unitvector(in uint value) { float3 retVal; - retVal.x = (float)((value >> 0) & 0xFF) / 255.0 * 2 - 1; - retVal.y = (float)((value >> 8) & 0xFF) / 255.0 * 2 - 1; - retVal.z = (float)((value >> 16) & 0xFF) / 255.0 * 2 - 1; + retVal.x = (float)((value >> 0u) & 0xFF) / 255.0 * 2 - 1; + retVal.y = (float)((value >> 8u) & 0xFF) / 255.0 * 2 - 1; + retVal.z = (float)((value >> 16u) & 0xFF) / 255.0 * 2 - 1; return retVal; } inline uint pack_utangent(in float4 value) { uint retVal = 0; - retVal |= (uint)((value.x * 0.5 + 0.5) * 255.0) << 0; - retVal |= (uint)((value.y * 0.5 + 0.5) * 255.0) << 8; - retVal |= (uint)((value.z * 0.5 + 0.5) * 255.0) << 16; - retVal |= (uint)((value.w * 0.5 + 0.5) * 255.0) << 24; + retVal |= (uint)((value.x * 0.5 + 0.5) * 255.0) << 0u; + retVal |= (uint)((value.y * 0.5 + 0.5) * 255.0) << 8u; + retVal |= (uint)((value.z * 0.5 + 0.5) * 255.0) << 16u; + retVal |= (uint)((value.w * 0.5 + 0.5) * 255.0) << 24u; return retVal; } inline float4 unpack_utangent(in uint value) { float4 retVal; - retVal.x = (float)((value >> 0) & 0xFF) / 255.0; - retVal.y = (float)((value >> 8) & 0xFF) / 255.0; - retVal.z = (float)((value >> 16) & 0xFF) / 255.0; - retVal.w = (float)((value >> 24) & 0xFF) / 255.0; + retVal.x = (float)((value >> 0u) & 0xFF) / 255.0; + retVal.y = (float)((value >> 8u) & 0xFF) / 255.0; + retVal.z = (float)((value >> 16u) & 0xFF) / 255.0; + retVal.w = (float)((value >> 24u) & 0xFF) / 255.0; return retVal; } inline uint pack_rgba(in float4 value) { uint retVal = 0; - retVal |= (uint)(value.x * 255.0) << 0; - retVal |= (uint)(value.y * 255.0) << 8; - retVal |= (uint)(value.z * 255.0) << 16; - retVal |= (uint)(value.w * 255.0) << 24; + retVal |= (uint)(value.x * 255.0) << 0u; + retVal |= (uint)(value.y * 255.0) << 8u; + retVal |= (uint)(value.z * 255.0) << 16u; + retVal |= (uint)(value.w * 255.0) << 24u; return retVal; } inline float4 unpack_rgba(in uint value) { float4 retVal; - retVal.x = (float)((value >> 0) & 0xFF) / 255.0; - retVal.y = (float)((value >> 8) & 0xFF) / 255.0; - retVal.z = (float)((value >> 16) & 0xFF) / 255.0; - retVal.w = (float)((value >> 24) & 0xFF) / 255.0; + retVal.x = (float)((value >> 0u) & 0xFF) / 255.0; + retVal.y = (float)((value >> 8u) & 0xFF) / 255.0; + retVal.z = (float)((value >> 16u) & 0xFF) / 255.0; + retVal.w = (float)((value >> 24u) & 0xFF) / 255.0; return retVal; } inline uint2 pack_half2(in float2 value) { uint retVal = 0; - retVal = f32tof16(value.x) | (f32tof16(value.y) << 16); + retVal = f32tof16(value.x) | (f32tof16(value.y) << 16u); return retVal; } inline float2 unpack_half2(in uint value) { float2 retVal; retVal.x = f16tof32(value.x); - retVal.y = f16tof32(value.x >> 16); + retVal.y = f16tof32(value.x >> 16u); return retVal; } inline uint2 pack_half3(in float3 value) { uint2 retVal = 0; - retVal.x = f32tof16(value.x) | (f32tof16(value.y) << 16); + retVal.x = f32tof16(value.x) | (f32tof16(value.y) << 16u); retVal.y = f32tof16(value.z); return retVal; } @@ -485,24 +485,24 @@ inline float3 unpack_half3(in uint2 value) { float3 retVal; retVal.x = f16tof32(value.x); - retVal.y = f16tof32(value.x >> 16); + retVal.y = f16tof32(value.x >> 16u); retVal.z = f16tof32(value.y); return retVal; } inline uint2 pack_half4(in float4 value) { uint2 retVal = 0; - retVal.x = f32tof16(value.x) | (f32tof16(value.y) << 16); - retVal.y = f32tof16(value.z) | (f32tof16(value.w) << 16); + retVal.x = f32tof16(value.x) | (f32tof16(value.y) << 16u); + retVal.y = f32tof16(value.z) | (f32tof16(value.w) << 16u); return retVal; } inline float4 unpack_half4(in uint2 value) { float4 retVal; retVal.x = f16tof32(value.x); - retVal.y = f16tof32(value.x >> 16); + retVal.y = f16tof32(value.x >> 16u); retVal.z = f16tof32(value.y); - retVal.w = f16tof32(value.y >> 16); + retVal.w = f16tof32(value.y >> 16u); return retVal; } diff --git a/WickedEngine/gpusortlib_kickoffSortCS.hlsl b/WickedEngine/shaders/gpusortlib_kickoffSortCS.hlsl similarity index 100% rename from WickedEngine/gpusortlib_kickoffSortCS.hlsl rename to WickedEngine/shaders/gpusortlib_kickoffSortCS.hlsl diff --git a/WickedEngine/gpusortlib_sortCS.hlsl b/WickedEngine/shaders/gpusortlib_sortCS.hlsl similarity index 100% rename from WickedEngine/gpusortlib_sortCS.hlsl rename to WickedEngine/shaders/gpusortlib_sortCS.hlsl diff --git a/WickedEngine/gpusortlib_sortInnerCS.hlsl b/WickedEngine/shaders/gpusortlib_sortInnerCS.hlsl similarity index 100% rename from WickedEngine/gpusortlib_sortInnerCS.hlsl rename to WickedEngine/shaders/gpusortlib_sortInnerCS.hlsl diff --git a/WickedEngine/gpusortlib_sortStepCS.hlsl b/WickedEngine/shaders/gpusortlib_sortStepCS.hlsl similarity index 100% rename from WickedEngine/gpusortlib_sortStepCS.hlsl rename to WickedEngine/shaders/gpusortlib_sortStepCS.hlsl diff --git a/WickedEngine/hairparticleHF.hlsli b/WickedEngine/shaders/hairparticleHF.hlsli similarity index 100% rename from WickedEngine/hairparticleHF.hlsli rename to WickedEngine/shaders/hairparticleHF.hlsli diff --git a/WickedEngine/hairparticlePS.hlsl b/WickedEngine/shaders/hairparticlePS.hlsl similarity index 100% rename from WickedEngine/hairparticlePS.hlsl rename to WickedEngine/shaders/hairparticlePS.hlsl diff --git a/WickedEngine/hairparticlePS_prepass.hlsl b/WickedEngine/shaders/hairparticlePS_prepass.hlsl similarity index 100% rename from WickedEngine/hairparticlePS_prepass.hlsl rename to WickedEngine/shaders/hairparticlePS_prepass.hlsl diff --git a/WickedEngine/hairparticlePS_simplest.hlsl b/WickedEngine/shaders/hairparticlePS_simplest.hlsl similarity index 100% rename from WickedEngine/hairparticlePS_simplest.hlsl rename to WickedEngine/shaders/hairparticlePS_simplest.hlsl diff --git a/WickedEngine/hairparticleVS.hlsl b/WickedEngine/shaders/hairparticleVS.hlsl similarity index 100% rename from WickedEngine/hairparticleVS.hlsl rename to WickedEngine/shaders/hairparticleVS.hlsl diff --git a/WickedEngine/hairparticle_finishUpdateCS.hlsl b/WickedEngine/shaders/hairparticle_finishUpdateCS.hlsl similarity index 100% rename from WickedEngine/hairparticle_finishUpdateCS.hlsl rename to WickedEngine/shaders/hairparticle_finishUpdateCS.hlsl diff --git a/WickedEngine/hairparticle_simulateCS.hlsl b/WickedEngine/shaders/hairparticle_simulateCS.hlsl similarity index 100% rename from WickedEngine/hairparticle_simulateCS.hlsl rename to WickedEngine/shaders/hairparticle_simulateCS.hlsl diff --git a/WickedEngine/hbaoCS.hlsl b/WickedEngine/shaders/hbaoCS.hlsl similarity index 100% rename from WickedEngine/hbaoCS.hlsl rename to WickedEngine/shaders/hbaoCS.hlsl diff --git a/WickedEngine/icosphere.hlsli b/WickedEngine/shaders/icosphere.hlsli similarity index 100% rename from WickedEngine/icosphere.hlsli rename to WickedEngine/shaders/icosphere.hlsli diff --git a/WickedEngine/imageHF.hlsli b/WickedEngine/shaders/imageHF.hlsli similarity index 100% rename from WickedEngine/imageHF.hlsli rename to WickedEngine/shaders/imageHF.hlsli diff --git a/WickedEngine/imagePS.hlsl b/WickedEngine/shaders/imagePS.hlsl similarity index 100% rename from WickedEngine/imagePS.hlsl rename to WickedEngine/shaders/imagePS.hlsl diff --git a/WickedEngine/imagePS_backgroundblur.hlsl b/WickedEngine/shaders/imagePS_backgroundblur.hlsl similarity index 100% rename from WickedEngine/imagePS_backgroundblur.hlsl rename to WickedEngine/shaders/imagePS_backgroundblur.hlsl diff --git a/WickedEngine/imagePS_backgroundblur_masked.hlsl b/WickedEngine/shaders/imagePS_backgroundblur_masked.hlsl similarity index 100% rename from WickedEngine/imagePS_backgroundblur_masked.hlsl rename to WickedEngine/shaders/imagePS_backgroundblur_masked.hlsl diff --git a/WickedEngine/imagePS_masked.hlsl b/WickedEngine/shaders/imagePS_masked.hlsl similarity index 100% rename from WickedEngine/imagePS_masked.hlsl rename to WickedEngine/shaders/imagePS_masked.hlsl diff --git a/WickedEngine/imagePS_separatenormalmap.hlsl b/WickedEngine/shaders/imagePS_separatenormalmap.hlsl similarity index 100% rename from WickedEngine/imagePS_separatenormalmap.hlsl rename to WickedEngine/shaders/imagePS_separatenormalmap.hlsl diff --git a/WickedEngine/imagePS_separatenormalmap_bicubic.hlsl b/WickedEngine/shaders/imagePS_separatenormalmap_bicubic.hlsl similarity index 100% rename from WickedEngine/imagePS_separatenormalmap_bicubic.hlsl rename to WickedEngine/shaders/imagePS_separatenormalmap_bicubic.hlsl diff --git a/WickedEngine/imageVS.hlsl b/WickedEngine/shaders/imageVS.hlsl similarity index 100% rename from WickedEngine/imageVS.hlsl rename to WickedEngine/shaders/imageVS.hlsl diff --git a/WickedEngine/impostorHF.hlsli b/WickedEngine/shaders/impostorHF.hlsli similarity index 100% rename from WickedEngine/impostorHF.hlsli rename to WickedEngine/shaders/impostorHF.hlsli diff --git a/WickedEngine/impostorPS.hlsl b/WickedEngine/shaders/impostorPS.hlsl similarity index 100% rename from WickedEngine/impostorPS.hlsl rename to WickedEngine/shaders/impostorPS.hlsl diff --git a/WickedEngine/impostorPS_prepass.hlsl b/WickedEngine/shaders/impostorPS_prepass.hlsl similarity index 100% rename from WickedEngine/impostorPS_prepass.hlsl rename to WickedEngine/shaders/impostorPS_prepass.hlsl diff --git a/WickedEngine/impostorPS_simple.hlsl b/WickedEngine/shaders/impostorPS_simple.hlsl similarity index 100% rename from WickedEngine/impostorPS_simple.hlsl rename to WickedEngine/shaders/impostorPS_simple.hlsl diff --git a/WickedEngine/impostorPS_wire.hlsl b/WickedEngine/shaders/impostorPS_wire.hlsl similarity index 100% rename from WickedEngine/impostorPS_wire.hlsl rename to WickedEngine/shaders/impostorPS_wire.hlsl diff --git a/WickedEngine/impostorVS.hlsl b/WickedEngine/shaders/impostorVS.hlsl similarity index 100% rename from WickedEngine/impostorVS.hlsl rename to WickedEngine/shaders/impostorVS.hlsl diff --git a/WickedEngine/lensFlareGS.hlsl b/WickedEngine/shaders/lensFlareGS.hlsl similarity index 100% rename from WickedEngine/lensFlareGS.hlsl rename to WickedEngine/shaders/lensFlareGS.hlsl diff --git a/WickedEngine/lensFlarePS.hlsl b/WickedEngine/shaders/lensFlarePS.hlsl similarity index 100% rename from WickedEngine/lensFlarePS.hlsl rename to WickedEngine/shaders/lensFlarePS.hlsl diff --git a/WickedEngine/lensFlareVS.hlsl b/WickedEngine/shaders/lensFlareVS.hlsl similarity index 100% rename from WickedEngine/lensFlareVS.hlsl rename to WickedEngine/shaders/lensFlareVS.hlsl diff --git a/WickedEngine/lightCullingCS.hlsl b/WickedEngine/shaders/lightCullingCS.hlsl similarity index 100% rename from WickedEngine/lightCullingCS.hlsl rename to WickedEngine/shaders/lightCullingCS.hlsl diff --git a/WickedEngine/lightCullingCS_ADVANCED.hlsl b/WickedEngine/shaders/lightCullingCS_ADVANCED.hlsl similarity index 100% rename from WickedEngine/lightCullingCS_ADVANCED.hlsl rename to WickedEngine/shaders/lightCullingCS_ADVANCED.hlsl diff --git a/WickedEngine/lightCullingCS_ADVANCED_DEBUG.hlsl b/WickedEngine/shaders/lightCullingCS_ADVANCED_DEBUG.hlsl similarity index 100% rename from WickedEngine/lightCullingCS_ADVANCED_DEBUG.hlsl rename to WickedEngine/shaders/lightCullingCS_ADVANCED_DEBUG.hlsl diff --git a/WickedEngine/lightCullingCS_DEBUG.hlsl b/WickedEngine/shaders/lightCullingCS_DEBUG.hlsl similarity index 100% rename from WickedEngine/lightCullingCS_DEBUG.hlsl rename to WickedEngine/shaders/lightCullingCS_DEBUG.hlsl diff --git a/WickedEngine/lightShaftsCS.hlsl b/WickedEngine/shaders/lightShaftsCS.hlsl similarity index 100% rename from WickedEngine/lightShaftsCS.hlsl rename to WickedEngine/shaders/lightShaftsCS.hlsl diff --git a/WickedEngine/lightVisualizerPS.hlsl b/WickedEngine/shaders/lightVisualizerPS.hlsl similarity index 100% rename from WickedEngine/lightVisualizerPS.hlsl rename to WickedEngine/shaders/lightVisualizerPS.hlsl diff --git a/WickedEngine/lightingHF.hlsli b/WickedEngine/shaders/lightingHF.hlsli similarity index 100% rename from WickedEngine/lightingHF.hlsli rename to WickedEngine/shaders/lightingHF.hlsli diff --git a/WickedEngine/lineardepthCS.hlsl b/WickedEngine/shaders/lineardepthCS.hlsl similarity index 100% rename from WickedEngine/lineardepthCS.hlsl rename to WickedEngine/shaders/lineardepthCS.hlsl diff --git a/WickedEngine/luminancePass1CS.hlsl b/WickedEngine/shaders/luminancePass1CS.hlsl similarity index 100% rename from WickedEngine/luminancePass1CS.hlsl rename to WickedEngine/shaders/luminancePass1CS.hlsl diff --git a/WickedEngine/luminancePass2CS.hlsl b/WickedEngine/shaders/luminancePass2CS.hlsl similarity index 100% rename from WickedEngine/luminancePass2CS.hlsl rename to WickedEngine/shaders/luminancePass2CS.hlsl diff --git a/WickedEngine/motionblurCS.hlsl b/WickedEngine/shaders/motionblurCS.hlsl similarity index 100% rename from WickedEngine/motionblurCS.hlsl rename to WickedEngine/shaders/motionblurCS.hlsl diff --git a/WickedEngine/motionblurCS_cheap.hlsl b/WickedEngine/shaders/motionblurCS_cheap.hlsl similarity index 100% rename from WickedEngine/motionblurCS_cheap.hlsl rename to WickedEngine/shaders/motionblurCS_cheap.hlsl diff --git a/WickedEngine/motionblurCS_earlyexit.hlsl b/WickedEngine/shaders/motionblurCS_earlyexit.hlsl similarity index 100% rename from WickedEngine/motionblurCS_earlyexit.hlsl rename to WickedEngine/shaders/motionblurCS_earlyexit.hlsl diff --git a/WickedEngine/motionblur_kickjobsCS.hlsl b/WickedEngine/shaders/motionblur_kickjobsCS.hlsl similarity index 100% rename from WickedEngine/motionblur_kickjobsCS.hlsl rename to WickedEngine/shaders/motionblur_kickjobsCS.hlsl diff --git a/WickedEngine/motionblur_neighborhoodMaxVelocityCS.hlsl b/WickedEngine/shaders/motionblur_neighborhoodMaxVelocityCS.hlsl similarity index 100% rename from WickedEngine/motionblur_neighborhoodMaxVelocityCS.hlsl rename to WickedEngine/shaders/motionblur_neighborhoodMaxVelocityCS.hlsl diff --git a/WickedEngine/motionblur_tileMaxVelocity_horizontalCS.hlsl b/WickedEngine/shaders/motionblur_tileMaxVelocity_horizontalCS.hlsl similarity index 100% rename from WickedEngine/motionblur_tileMaxVelocity_horizontalCS.hlsl rename to WickedEngine/shaders/motionblur_tileMaxVelocity_horizontalCS.hlsl diff --git a/WickedEngine/motionblur_tileMaxVelocity_verticalCS.hlsl b/WickedEngine/shaders/motionblur_tileMaxVelocity_verticalCS.hlsl similarity index 100% rename from WickedEngine/motionblur_tileMaxVelocity_verticalCS.hlsl rename to WickedEngine/shaders/motionblur_tileMaxVelocity_verticalCS.hlsl diff --git a/WickedEngine/msaoCS.hlsl b/WickedEngine/shaders/msaoCS.hlsl similarity index 100% rename from WickedEngine/msaoCS.hlsl rename to WickedEngine/shaders/msaoCS.hlsl diff --git a/WickedEngine/msao_blurupsampleCS.hlsl b/WickedEngine/shaders/msao_blurupsampleCS.hlsl similarity index 100% rename from WickedEngine/msao_blurupsampleCS.hlsl rename to WickedEngine/shaders/msao_blurupsampleCS.hlsl diff --git a/WickedEngine/msao_blurupsampleCS_blendout.hlsl b/WickedEngine/shaders/msao_blurupsampleCS_blendout.hlsl similarity index 100% rename from WickedEngine/msao_blurupsampleCS_blendout.hlsl rename to WickedEngine/shaders/msao_blurupsampleCS_blendout.hlsl diff --git a/WickedEngine/msao_blurupsampleCS_premin.hlsl b/WickedEngine/shaders/msao_blurupsampleCS_premin.hlsl similarity index 100% rename from WickedEngine/msao_blurupsampleCS_premin.hlsl rename to WickedEngine/shaders/msao_blurupsampleCS_premin.hlsl diff --git a/WickedEngine/msao_blurupsampleCS_premin_blendout.hlsl b/WickedEngine/shaders/msao_blurupsampleCS_premin_blendout.hlsl similarity index 100% rename from WickedEngine/msao_blurupsampleCS_premin_blendout.hlsl rename to WickedEngine/shaders/msao_blurupsampleCS_premin_blendout.hlsl diff --git a/WickedEngine/msao_interleaveCS.hlsl b/WickedEngine/shaders/msao_interleaveCS.hlsl similarity index 100% rename from WickedEngine/msao_interleaveCS.hlsl rename to WickedEngine/shaders/msao_interleaveCS.hlsl diff --git a/WickedEngine/msao_preparedepthbuffers1CS.hlsl b/WickedEngine/shaders/msao_preparedepthbuffers1CS.hlsl similarity index 100% rename from WickedEngine/msao_preparedepthbuffers1CS.hlsl rename to WickedEngine/shaders/msao_preparedepthbuffers1CS.hlsl diff --git a/WickedEngine/msao_preparedepthbuffers2CS.hlsl b/WickedEngine/shaders/msao_preparedepthbuffers2CS.hlsl similarity index 100% rename from WickedEngine/msao_preparedepthbuffers2CS.hlsl rename to WickedEngine/shaders/msao_preparedepthbuffers2CS.hlsl diff --git a/WickedEngine/normalsfromdepthCS.hlsl b/WickedEngine/shaders/normalsfromdepthCS.hlsl similarity index 100% rename from WickedEngine/normalsfromdepthCS.hlsl rename to WickedEngine/shaders/normalsfromdepthCS.hlsl diff --git a/WickedEngine/objectDS.hlsl b/WickedEngine/shaders/objectDS.hlsl similarity index 100% rename from WickedEngine/objectDS.hlsl rename to WickedEngine/shaders/objectDS.hlsl diff --git a/WickedEngine/objectDS_prepass.hlsl b/WickedEngine/shaders/objectDS_prepass.hlsl similarity index 100% rename from WickedEngine/objectDS_prepass.hlsl rename to WickedEngine/shaders/objectDS_prepass.hlsl diff --git a/WickedEngine/objectDS_prepass_alphatest.hlsl b/WickedEngine/shaders/objectDS_prepass_alphatest.hlsl similarity index 100% rename from WickedEngine/objectDS_prepass_alphatest.hlsl rename to WickedEngine/shaders/objectDS_prepass_alphatest.hlsl diff --git a/WickedEngine/objectGS_voxelizer.hlsl b/WickedEngine/shaders/objectGS_voxelizer.hlsl similarity index 100% rename from WickedEngine/objectGS_voxelizer.hlsl rename to WickedEngine/shaders/objectGS_voxelizer.hlsl diff --git a/WickedEngine/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli similarity index 98% rename from WickedEngine/objectHF.hlsli rename to WickedEngine/shaders/objectHF.hlsli index 41deaa360..1856db698 100644 --- a/WickedEngine/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -259,15 +259,15 @@ struct VertexInput { const uint normal_wind = bindless_buffers[GetMesh().vb_pos_nor_wind].Load(vertexID * 16).w; float3 normal; - normal.x = (float)((normal_wind >> 0) & 0xFF) / 255.0 * 2 - 1; - normal.y = (float)((normal_wind >> 8) & 0xFF) / 255.0 * 2 - 1; - normal.z = (float)((normal_wind >> 16) & 0xFF) / 255.0 * 2 - 1; + normal.x = (float)((normal_wind >> 0u) & 0xFF) / 255.0 * 2 - 1; + normal.y = (float)((normal_wind >> 8u) & 0xFF) / 255.0 * 2 - 1; + normal.z = (float)((normal_wind >> 16u) & 0xFF) / 255.0 * 2 - 1; return normal; } float GetWindWeight() { const uint normal_wind = bindless_buffers[GetMesh().vb_pos_nor_wind].Load(vertexID * 16).w; - return ((normal_wind >> 24) & 0xFF) / 255.0; + return ((normal_wind >> 24u) & 0xFF) / 255.0; } #ifdef OBJECTSHADER_INPUT_TEX @@ -375,15 +375,15 @@ struct VertexInput { const uint normal_wind = asuint(pos.w); float3 normal; - normal.x = (float)((normal_wind >> 0) & 0xFF) / 255.0 * 2 - 1; - normal.y = (float)((normal_wind >> 8) & 0xFF) / 255.0 * 2 - 1; - normal.z = (float)((normal_wind >> 16) & 0xFF) / 255.0 * 2 - 1; + normal.x = (float)((normal_wind >> 0u) & 0xFF) / 255.0 * 2 - 1; + normal.y = (float)((normal_wind >> 8u) & 0xFF) / 255.0 * 2 - 1; + normal.z = (float)((normal_wind >> 16u) & 0xFF) / 255.0 * 2 - 1; return normal; } float GetWindWeight() { const uint normal_wind = asuint(pos.w); - return ((normal_wind >> 24) & 0xFF) / 255.0; + return ((normal_wind >> 24u) & 0xFF) / 255.0; } #ifdef OBJECTSHADER_INPUT_PRE @@ -719,7 +719,7 @@ inline void ForwardLighting(inout Surface surface, inout Lighting lighting) // Retrieve global entity index from local bucket, then remove bit from local bucket: const uint bucket_bit_index = firstbitlow(bucket_bits); const uint entity_index = bucket_bit_index; - bucket_bits ^= 1 << bucket_bit_index; + bucket_bits ^= 1u << bucket_bit_index; [branch] if (decalAccumulation.a < 1) @@ -788,7 +788,7 @@ inline void ForwardLighting(inout Surface surface, inout Lighting lighting) // Retrieve global entity index from local bucket, then remove bit from local bucket: const uint bucket_bit_index = firstbitlow(bucket_bits); const uint entity_index = bucket_bit_index; - bucket_bits ^= 1 << bucket_bit_index; + bucket_bits ^= 1u << bucket_bit_index; [branch] if (envmapAccumulation.a < 1) @@ -859,7 +859,7 @@ inline void ForwardLighting(inout Surface surface, inout Lighting lighting) // Retrieve global entity index from local bucket, then remove bit from local bucket: const uint bucket_bit_index = firstbitlow(bucket_bits); const uint entity_index = bucket * 32 + bucket_bit_index; - bucket_bits ^= 1 << bucket_bit_index; + bucket_bits ^= 1u << bucket_bit_index; ShaderEntity light = EntityArray[g_xFrame_LightArrayOffset + entity_index]; @@ -926,7 +926,7 @@ inline void TiledLighting(inout Surface surface, inout Lighting lighting) // Retrieve global entity index from local bucket, then remove bit from local bucket: const uint bucket_bit_index = firstbitlow(bucket_bits); const uint entity_index = bucket * 32 + bucket_bit_index; - bucket_bits ^= 1 << bucket_bit_index; + bucket_bits ^= 1u << bucket_bit_index; [branch] if (entity_index >= first_item && entity_index <= last_item && decalAccumulation.a < 1) @@ -1008,7 +1008,7 @@ inline void TiledLighting(inout Surface surface, inout Lighting lighting) // Retrieve global entity index from local bucket, then remove bit from local bucket: const uint bucket_bit_index = firstbitlow(bucket_bits); const uint entity_index = bucket * 32 + bucket_bit_index; - bucket_bits ^= 1 << bucket_bit_index; + bucket_bits ^= 1u << bucket_bit_index; [branch] if (entity_index >= first_item && entity_index <= last_item && envmapAccumulation.a < 1) @@ -1084,7 +1084,7 @@ inline void TiledLighting(inout Surface surface, inout Lighting lighting) // Retrieve global entity index from local bucket, then remove bit from local bucket: const uint bucket_bit_index = firstbitlow(bucket_bits); const uint entity_index = bucket * 32 + bucket_bit_index; - bucket_bits ^= 1 << bucket_bit_index; + bucket_bits ^= 1u << bucket_bit_index; // Check if it is a light and process: [branch] diff --git a/WickedEngine/objectHF_tessellation.hlsli b/WickedEngine/shaders/objectHF_tessellation.hlsli similarity index 100% rename from WickedEngine/objectHF_tessellation.hlsli rename to WickedEngine/shaders/objectHF_tessellation.hlsli diff --git a/WickedEngine/objectHS.hlsl b/WickedEngine/shaders/objectHS.hlsl similarity index 100% rename from WickedEngine/objectHS.hlsl rename to WickedEngine/shaders/objectHS.hlsl diff --git a/WickedEngine/objectHS_prepass.hlsl b/WickedEngine/shaders/objectHS_prepass.hlsl similarity index 100% rename from WickedEngine/objectHS_prepass.hlsl rename to WickedEngine/shaders/objectHS_prepass.hlsl diff --git a/WickedEngine/objectHS_prepass_alphatest.hlsl b/WickedEngine/shaders/objectHS_prepass_alphatest.hlsl similarity index 100% rename from WickedEngine/objectHS_prepass_alphatest.hlsl rename to WickedEngine/shaders/objectHS_prepass_alphatest.hlsl diff --git a/WickedEngine/objectPS.hlsl b/WickedEngine/shaders/objectPS.hlsl similarity index 100% rename from WickedEngine/objectPS.hlsl rename to WickedEngine/shaders/objectPS.hlsl diff --git a/WickedEngine/objectPS_anisotropic.hlsl b/WickedEngine/shaders/objectPS_anisotropic.hlsl similarity index 100% rename from WickedEngine/objectPS_anisotropic.hlsl rename to WickedEngine/shaders/objectPS_anisotropic.hlsl diff --git a/WickedEngine/objectPS_cartoon.hlsl b/WickedEngine/shaders/objectPS_cartoon.hlsl similarity index 100% rename from WickedEngine/objectPS_cartoon.hlsl rename to WickedEngine/shaders/objectPS_cartoon.hlsl diff --git a/WickedEngine/objectPS_clearcoat.hlsl b/WickedEngine/shaders/objectPS_clearcoat.hlsl similarity index 100% rename from WickedEngine/objectPS_clearcoat.hlsl rename to WickedEngine/shaders/objectPS_clearcoat.hlsl diff --git a/WickedEngine/objectPS_cloth.hlsl b/WickedEngine/shaders/objectPS_cloth.hlsl similarity index 100% rename from WickedEngine/objectPS_cloth.hlsl rename to WickedEngine/shaders/objectPS_cloth.hlsl diff --git a/WickedEngine/objectPS_cloth_clearcoat.hlsl b/WickedEngine/shaders/objectPS_cloth_clearcoat.hlsl similarity index 100% rename from WickedEngine/objectPS_cloth_clearcoat.hlsl rename to WickedEngine/shaders/objectPS_cloth_clearcoat.hlsl diff --git a/WickedEngine/objectPS_debug.hlsl b/WickedEngine/shaders/objectPS_debug.hlsl similarity index 100% rename from WickedEngine/objectPS_debug.hlsl rename to WickedEngine/shaders/objectPS_debug.hlsl diff --git a/WickedEngine/objectPS_hologram.hlsl b/WickedEngine/shaders/objectPS_hologram.hlsl similarity index 100% rename from WickedEngine/objectPS_hologram.hlsl rename to WickedEngine/shaders/objectPS_hologram.hlsl diff --git a/WickedEngine/objectPS_paintradius.hlsl b/WickedEngine/shaders/objectPS_paintradius.hlsl similarity index 100% rename from WickedEngine/objectPS_paintradius.hlsl rename to WickedEngine/shaders/objectPS_paintradius.hlsl diff --git a/WickedEngine/objectPS_planarreflection.hlsl b/WickedEngine/shaders/objectPS_planarreflection.hlsl similarity index 100% rename from WickedEngine/objectPS_planarreflection.hlsl rename to WickedEngine/shaders/objectPS_planarreflection.hlsl diff --git a/WickedEngine/objectPS_pom.hlsl b/WickedEngine/shaders/objectPS_pom.hlsl similarity index 100% rename from WickedEngine/objectPS_pom.hlsl rename to WickedEngine/shaders/objectPS_pom.hlsl diff --git a/WickedEngine/objectPS_prepass.hlsl b/WickedEngine/shaders/objectPS_prepass.hlsl similarity index 100% rename from WickedEngine/objectPS_prepass.hlsl rename to WickedEngine/shaders/objectPS_prepass.hlsl diff --git a/WickedEngine/objectPS_prepass_alphatest.hlsl b/WickedEngine/shaders/objectPS_prepass_alphatest.hlsl similarity index 100% rename from WickedEngine/objectPS_prepass_alphatest.hlsl rename to WickedEngine/shaders/objectPS_prepass_alphatest.hlsl diff --git a/WickedEngine/objectPS_simplest.hlsl b/WickedEngine/shaders/objectPS_simplest.hlsl similarity index 100% rename from WickedEngine/objectPS_simplest.hlsl rename to WickedEngine/shaders/objectPS_simplest.hlsl diff --git a/WickedEngine/objectPS_terrain.hlsl b/WickedEngine/shaders/objectPS_terrain.hlsl similarity index 100% rename from WickedEngine/objectPS_terrain.hlsl rename to WickedEngine/shaders/objectPS_terrain.hlsl diff --git a/WickedEngine/objectPS_transparent.hlsl b/WickedEngine/shaders/objectPS_transparent.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent.hlsl rename to WickedEngine/shaders/objectPS_transparent.hlsl diff --git a/WickedEngine/objectPS_transparent_anisotropic.hlsl b/WickedEngine/shaders/objectPS_transparent_anisotropic.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_anisotropic.hlsl rename to WickedEngine/shaders/objectPS_transparent_anisotropic.hlsl diff --git a/WickedEngine/objectPS_transparent_cartoon.hlsl b/WickedEngine/shaders/objectPS_transparent_cartoon.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_cartoon.hlsl rename to WickedEngine/shaders/objectPS_transparent_cartoon.hlsl diff --git a/WickedEngine/objectPS_transparent_clearcoat.hlsl b/WickedEngine/shaders/objectPS_transparent_clearcoat.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_clearcoat.hlsl rename to WickedEngine/shaders/objectPS_transparent_clearcoat.hlsl diff --git a/WickedEngine/objectPS_transparent_cloth.hlsl b/WickedEngine/shaders/objectPS_transparent_cloth.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_cloth.hlsl rename to WickedEngine/shaders/objectPS_transparent_cloth.hlsl diff --git a/WickedEngine/objectPS_transparent_cloth_clearcoat.hlsl b/WickedEngine/shaders/objectPS_transparent_cloth_clearcoat.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_cloth_clearcoat.hlsl rename to WickedEngine/shaders/objectPS_transparent_cloth_clearcoat.hlsl diff --git a/WickedEngine/objectPS_transparent_planarreflection.hlsl b/WickedEngine/shaders/objectPS_transparent_planarreflection.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_planarreflection.hlsl rename to WickedEngine/shaders/objectPS_transparent_planarreflection.hlsl diff --git a/WickedEngine/objectPS_transparent_pom.hlsl b/WickedEngine/shaders/objectPS_transparent_pom.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_pom.hlsl rename to WickedEngine/shaders/objectPS_transparent_pom.hlsl diff --git a/WickedEngine/objectPS_transparent_unlit.hlsl b/WickedEngine/shaders/objectPS_transparent_unlit.hlsl similarity index 100% rename from WickedEngine/objectPS_transparent_unlit.hlsl rename to WickedEngine/shaders/objectPS_transparent_unlit.hlsl diff --git a/WickedEngine/objectPS_unlit.hlsl b/WickedEngine/shaders/objectPS_unlit.hlsl similarity index 100% rename from WickedEngine/objectPS_unlit.hlsl rename to WickedEngine/shaders/objectPS_unlit.hlsl diff --git a/WickedEngine/objectPS_voxelizer.hlsl b/WickedEngine/shaders/objectPS_voxelizer.hlsl similarity index 100% rename from WickedEngine/objectPS_voxelizer.hlsl rename to WickedEngine/shaders/objectPS_voxelizer.hlsl diff --git a/WickedEngine/objectPS_voxelizer_terrain.hlsl b/WickedEngine/shaders/objectPS_voxelizer_terrain.hlsl similarity index 100% rename from WickedEngine/objectPS_voxelizer_terrain.hlsl rename to WickedEngine/shaders/objectPS_voxelizer_terrain.hlsl diff --git a/WickedEngine/objectPS_water.hlsl b/WickedEngine/shaders/objectPS_water.hlsl similarity index 100% rename from WickedEngine/objectPS_water.hlsl rename to WickedEngine/shaders/objectPS_water.hlsl diff --git a/WickedEngine/objectVS_common.hlsl b/WickedEngine/shaders/objectVS_common.hlsl similarity index 100% rename from WickedEngine/objectVS_common.hlsl rename to WickedEngine/shaders/objectVS_common.hlsl diff --git a/WickedEngine/objectVS_common_tessellation.hlsl b/WickedEngine/shaders/objectVS_common_tessellation.hlsl similarity index 100% rename from WickedEngine/objectVS_common_tessellation.hlsl rename to WickedEngine/shaders/objectVS_common_tessellation.hlsl diff --git a/WickedEngine/objectVS_debug.hlsl b/WickedEngine/shaders/objectVS_debug.hlsl similarity index 100% rename from WickedEngine/objectVS_debug.hlsl rename to WickedEngine/shaders/objectVS_debug.hlsl diff --git a/WickedEngine/objectVS_prepass.hlsl b/WickedEngine/shaders/objectVS_prepass.hlsl similarity index 100% rename from WickedEngine/objectVS_prepass.hlsl rename to WickedEngine/shaders/objectVS_prepass.hlsl diff --git a/WickedEngine/objectVS_prepass_alphatest.hlsl b/WickedEngine/shaders/objectVS_prepass_alphatest.hlsl similarity index 100% rename from WickedEngine/objectVS_prepass_alphatest.hlsl rename to WickedEngine/shaders/objectVS_prepass_alphatest.hlsl diff --git a/WickedEngine/objectVS_prepass_alphatest_tessellation.hlsl b/WickedEngine/shaders/objectVS_prepass_alphatest_tessellation.hlsl similarity index 100% rename from WickedEngine/objectVS_prepass_alphatest_tessellation.hlsl rename to WickedEngine/shaders/objectVS_prepass_alphatest_tessellation.hlsl diff --git a/WickedEngine/objectVS_prepass_tessellation.hlsl b/WickedEngine/shaders/objectVS_prepass_tessellation.hlsl similarity index 100% rename from WickedEngine/objectVS_prepass_tessellation.hlsl rename to WickedEngine/shaders/objectVS_prepass_tessellation.hlsl diff --git a/WickedEngine/objectVS_simple.hlsl b/WickedEngine/shaders/objectVS_simple.hlsl similarity index 100% rename from WickedEngine/objectVS_simple.hlsl rename to WickedEngine/shaders/objectVS_simple.hlsl diff --git a/WickedEngine/objectVS_voxelizer.hlsl b/WickedEngine/shaders/objectVS_voxelizer.hlsl similarity index 100% rename from WickedEngine/objectVS_voxelizer.hlsl rename to WickedEngine/shaders/objectVS_voxelizer.hlsl diff --git a/WickedEngine/oceanSimulatorCS.hlsl b/WickedEngine/shaders/oceanSimulatorCS.hlsl similarity index 100% rename from WickedEngine/oceanSimulatorCS.hlsl rename to WickedEngine/shaders/oceanSimulatorCS.hlsl diff --git a/WickedEngine/oceanSurfaceHF.hlsli b/WickedEngine/shaders/oceanSurfaceHF.hlsli similarity index 100% rename from WickedEngine/oceanSurfaceHF.hlsli rename to WickedEngine/shaders/oceanSurfaceHF.hlsli diff --git a/WickedEngine/oceanSurfacePS.hlsl b/WickedEngine/shaders/oceanSurfacePS.hlsl similarity index 100% rename from WickedEngine/oceanSurfacePS.hlsl rename to WickedEngine/shaders/oceanSurfacePS.hlsl diff --git a/WickedEngine/oceanSurfaceSimplePS.hlsl b/WickedEngine/shaders/oceanSurfaceSimplePS.hlsl similarity index 100% rename from WickedEngine/oceanSurfaceSimplePS.hlsl rename to WickedEngine/shaders/oceanSurfaceSimplePS.hlsl diff --git a/WickedEngine/oceanSurfaceVS.hlsl b/WickedEngine/shaders/oceanSurfaceVS.hlsl similarity index 100% rename from WickedEngine/oceanSurfaceVS.hlsl rename to WickedEngine/shaders/oceanSurfaceVS.hlsl diff --git a/WickedEngine/oceanUpdateDisplacementMapCS.hlsl b/WickedEngine/shaders/oceanUpdateDisplacementMapCS.hlsl similarity index 100% rename from WickedEngine/oceanUpdateDisplacementMapCS.hlsl rename to WickedEngine/shaders/oceanUpdateDisplacementMapCS.hlsl diff --git a/WickedEngine/oceanUpdateGradientFoldingCS.hlsl b/WickedEngine/shaders/oceanUpdateGradientFoldingCS.hlsl similarity index 100% rename from WickedEngine/oceanUpdateGradientFoldingCS.hlsl rename to WickedEngine/shaders/oceanUpdateGradientFoldingCS.hlsl diff --git a/WickedEngine/outlinePS.hlsl b/WickedEngine/shaders/outlinePS.hlsl similarity index 100% rename from WickedEngine/outlinePS.hlsl rename to WickedEngine/shaders/outlinePS.hlsl diff --git a/WickedEngine/paint_textureCS.hlsl b/WickedEngine/shaders/paint_textureCS.hlsl similarity index 100% rename from WickedEngine/paint_textureCS.hlsl rename to WickedEngine/shaders/paint_textureCS.hlsl diff --git a/WickedEngine/quad.hlsli b/WickedEngine/shaders/quad.hlsli similarity index 100% rename from WickedEngine/quad.hlsli rename to WickedEngine/shaders/quad.hlsli diff --git a/WickedEngine/raytrace_closesthitCS.hlsl b/WickedEngine/shaders/raytrace_closesthitCS.hlsl similarity index 100% rename from WickedEngine/raytrace_closesthitCS.hlsl rename to WickedEngine/shaders/raytrace_closesthitCS.hlsl diff --git a/WickedEngine/raytrace_debugbvhPS.hlsl b/WickedEngine/shaders/raytrace_debugbvhPS.hlsl similarity index 100% rename from WickedEngine/raytrace_debugbvhPS.hlsl rename to WickedEngine/shaders/raytrace_debugbvhPS.hlsl diff --git a/WickedEngine/raytrace_kickjobsCS.hlsl b/WickedEngine/shaders/raytrace_kickjobsCS.hlsl similarity index 100% rename from WickedEngine/raytrace_kickjobsCS.hlsl rename to WickedEngine/shaders/raytrace_kickjobsCS.hlsl diff --git a/WickedEngine/raytrace_launchCS.hlsl b/WickedEngine/shaders/raytrace_launchCS.hlsl similarity index 100% rename from WickedEngine/raytrace_launchCS.hlsl rename to WickedEngine/shaders/raytrace_launchCS.hlsl diff --git a/WickedEngine/raytrace_screenVS.hlsl b/WickedEngine/shaders/raytrace_screenVS.hlsl similarity index 100% rename from WickedEngine/raytrace_screenVS.hlsl rename to WickedEngine/shaders/raytrace_screenVS.hlsl diff --git a/WickedEngine/raytrace_shadeCS.hlsl b/WickedEngine/shaders/raytrace_shadeCS.hlsl similarity index 100% rename from WickedEngine/raytrace_shadeCS.hlsl rename to WickedEngine/shaders/raytrace_shadeCS.hlsl diff --git a/WickedEngine/raytrace_tilesortCS.hlsl b/WickedEngine/shaders/raytrace_tilesortCS.hlsl similarity index 100% rename from WickedEngine/raytrace_tilesortCS.hlsl rename to WickedEngine/shaders/raytrace_tilesortCS.hlsl diff --git a/WickedEngine/raytracingHF.hlsli b/WickedEngine/shaders/raytracingHF.hlsli similarity index 100% rename from WickedEngine/raytracingHF.hlsli rename to WickedEngine/shaders/raytracingHF.hlsli diff --git a/WickedEngine/renderlightmapPS.hlsl b/WickedEngine/shaders/renderlightmapPS.hlsl similarity index 100% rename from WickedEngine/renderlightmapPS.hlsl rename to WickedEngine/shaders/renderlightmapPS.hlsl diff --git a/WickedEngine/renderlightmapVS.hlsl b/WickedEngine/shaders/renderlightmapVS.hlsl similarity index 100% rename from WickedEngine/renderlightmapVS.hlsl rename to WickedEngine/shaders/renderlightmapVS.hlsl diff --git a/WickedEngine/resolveMSAADepthStencilCS.hlsl b/WickedEngine/shaders/resolveMSAADepthStencilCS.hlsl similarity index 100% rename from WickedEngine/resolveMSAADepthStencilCS.hlsl rename to WickedEngine/shaders/resolveMSAADepthStencilCS.hlsl diff --git a/WickedEngine/rtaoLIB.hlsl b/WickedEngine/shaders/rtaoLIB.hlsl similarity index 100% rename from WickedEngine/rtaoLIB.hlsl rename to WickedEngine/shaders/rtaoLIB.hlsl diff --git a/WickedEngine/rtao_denoise_blurCS.hlsl b/WickedEngine/shaders/rtao_denoise_blurCS.hlsl similarity index 100% rename from WickedEngine/rtao_denoise_blurCS.hlsl rename to WickedEngine/shaders/rtao_denoise_blurCS.hlsl diff --git a/WickedEngine/rtao_denoise_temporalCS.hlsl b/WickedEngine/shaders/rtao_denoise_temporalCS.hlsl similarity index 100% rename from WickedEngine/rtao_denoise_temporalCS.hlsl rename to WickedEngine/shaders/rtao_denoise_temporalCS.hlsl diff --git a/WickedEngine/rtreflectionLIB.hlsl b/WickedEngine/shaders/rtreflectionLIB.hlsl similarity index 100% rename from WickedEngine/rtreflectionLIB.hlsl rename to WickedEngine/shaders/rtreflectionLIB.hlsl diff --git a/WickedEngine/rtshadowLIB.hlsl b/WickedEngine/shaders/rtshadowLIB.hlsl similarity index 99% rename from WickedEngine/rtshadowLIB.hlsl rename to WickedEngine/shaders/rtshadowLIB.hlsl index 05b1e32c8..3e4ba7d20 100644 --- a/WickedEngine/rtshadowLIB.hlsl +++ b/WickedEngine/shaders/rtshadowLIB.hlsl @@ -70,7 +70,7 @@ void RTShadow_Raygen() // Retrieve global entity index from local bucket, then remove bit from local bucket: const uint bucket_bit_index = firstbitlow(bucket_bits); const uint entity_index = bucket * 32 + bucket_bit_index; - bucket_bits ^= 1 << bucket_bit_index; + bucket_bits ^= 1u << bucket_bit_index; // Check if it is a light and process: [branch] diff --git a/WickedEngine/rtshadow_denoise_temporalCS.hlsl b/WickedEngine/shaders/rtshadow_denoise_temporalCS.hlsl similarity index 100% rename from WickedEngine/rtshadow_denoise_temporalCS.hlsl rename to WickedEngine/shaders/rtshadow_denoise_temporalCS.hlsl diff --git a/WickedEngine/screenPS.hlsl b/WickedEngine/shaders/screenPS.hlsl similarity index 100% rename from WickedEngine/screenPS.hlsl rename to WickedEngine/shaders/screenPS.hlsl diff --git a/WickedEngine/screenVS.hlsl b/WickedEngine/shaders/screenVS.hlsl similarity index 100% rename from WickedEngine/screenVS.hlsl rename to WickedEngine/shaders/screenVS.hlsl diff --git a/WickedEngine/screenspaceshadowCS.hlsl b/WickedEngine/shaders/screenspaceshadowCS.hlsl similarity index 100% rename from WickedEngine/screenspaceshadowCS.hlsl rename to WickedEngine/shaders/screenspaceshadowCS.hlsl diff --git a/WickedEngine/shadingRateClassificationCS.hlsl b/WickedEngine/shaders/shadingRateClassificationCS.hlsl similarity index 100% rename from WickedEngine/shadingRateClassificationCS.hlsl rename to WickedEngine/shaders/shadingRateClassificationCS.hlsl diff --git a/WickedEngine/shadingRateClassificationCS_DEBUG.hlsl b/WickedEngine/shaders/shadingRateClassificationCS_DEBUG.hlsl similarity index 100% rename from WickedEngine/shadingRateClassificationCS_DEBUG.hlsl rename to WickedEngine/shaders/shadingRateClassificationCS_DEBUG.hlsl diff --git a/WickedEngine/shadowPS_alphatest.hlsl b/WickedEngine/shaders/shadowPS_alphatest.hlsl similarity index 100% rename from WickedEngine/shadowPS_alphatest.hlsl rename to WickedEngine/shaders/shadowPS_alphatest.hlsl diff --git a/WickedEngine/shadowPS_transparent.hlsl b/WickedEngine/shaders/shadowPS_transparent.hlsl similarity index 100% rename from WickedEngine/shadowPS_transparent.hlsl rename to WickedEngine/shaders/shadowPS_transparent.hlsl diff --git a/WickedEngine/shadowPS_water.hlsl b/WickedEngine/shaders/shadowPS_water.hlsl similarity index 100% rename from WickedEngine/shadowPS_water.hlsl rename to WickedEngine/shaders/shadowPS_water.hlsl diff --git a/WickedEngine/shadowVS.hlsl b/WickedEngine/shaders/shadowVS.hlsl similarity index 100% rename from WickedEngine/shadowVS.hlsl rename to WickedEngine/shaders/shadowVS.hlsl diff --git a/WickedEngine/shadowVS_alphatest.hlsl b/WickedEngine/shaders/shadowVS_alphatest.hlsl similarity index 100% rename from WickedEngine/shadowVS_alphatest.hlsl rename to WickedEngine/shaders/shadowVS_alphatest.hlsl diff --git a/WickedEngine/shadowVS_transparent.hlsl b/WickedEngine/shaders/shadowVS_transparent.hlsl similarity index 100% rename from WickedEngine/shadowVS_transparent.hlsl rename to WickedEngine/shaders/shadowVS_transparent.hlsl diff --git a/WickedEngine/sharpenCS.hlsl b/WickedEngine/shaders/sharpenCS.hlsl similarity index 100% rename from WickedEngine/sharpenCS.hlsl rename to WickedEngine/shaders/sharpenCS.hlsl diff --git a/WickedEngine/skinningCS.hlsl b/WickedEngine/shaders/skinningCS.hlsl similarity index 100% rename from WickedEngine/skinningCS.hlsl rename to WickedEngine/shaders/skinningCS.hlsl diff --git a/WickedEngine/skinningCS_LDS.hlsl b/WickedEngine/shaders/skinningCS_LDS.hlsl similarity index 100% rename from WickedEngine/skinningCS_LDS.hlsl rename to WickedEngine/shaders/skinningCS_LDS.hlsl diff --git a/WickedEngine/skyAtmosphere.hlsli b/WickedEngine/shaders/skyAtmosphere.hlsli similarity index 100% rename from WickedEngine/skyAtmosphere.hlsli rename to WickedEngine/shaders/skyAtmosphere.hlsli diff --git a/WickedEngine/skyAtmosphere_multiScatteredLuminanceLutCS.hlsl b/WickedEngine/shaders/skyAtmosphere_multiScatteredLuminanceLutCS.hlsl similarity index 100% rename from WickedEngine/skyAtmosphere_multiScatteredLuminanceLutCS.hlsl rename to WickedEngine/shaders/skyAtmosphere_multiScatteredLuminanceLutCS.hlsl diff --git a/WickedEngine/skyAtmosphere_skyLuminanceLutCS.hlsl b/WickedEngine/shaders/skyAtmosphere_skyLuminanceLutCS.hlsl similarity index 100% rename from WickedEngine/skyAtmosphere_skyLuminanceLutCS.hlsl rename to WickedEngine/shaders/skyAtmosphere_skyLuminanceLutCS.hlsl diff --git a/WickedEngine/skyAtmosphere_skyViewLutCS.hlsl b/WickedEngine/shaders/skyAtmosphere_skyViewLutCS.hlsl similarity index 100% rename from WickedEngine/skyAtmosphere_skyViewLutCS.hlsl rename to WickedEngine/shaders/skyAtmosphere_skyViewLutCS.hlsl diff --git a/WickedEngine/skyAtmosphere_transmittanceLutCS.hlsl b/WickedEngine/shaders/skyAtmosphere_transmittanceLutCS.hlsl similarity index 100% rename from WickedEngine/skyAtmosphere_transmittanceLutCS.hlsl rename to WickedEngine/shaders/skyAtmosphere_transmittanceLutCS.hlsl diff --git a/WickedEngine/skyHF.hlsli b/WickedEngine/shaders/skyHF.hlsli similarity index 100% rename from WickedEngine/skyHF.hlsli rename to WickedEngine/shaders/skyHF.hlsli diff --git a/WickedEngine/skyPS_dynamic.hlsl b/WickedEngine/shaders/skyPS_dynamic.hlsl similarity index 100% rename from WickedEngine/skyPS_dynamic.hlsl rename to WickedEngine/shaders/skyPS_dynamic.hlsl diff --git a/WickedEngine/skyPS_static.hlsl b/WickedEngine/shaders/skyPS_static.hlsl similarity index 100% rename from WickedEngine/skyPS_static.hlsl rename to WickedEngine/shaders/skyPS_static.hlsl diff --git a/WickedEngine/skyPS_velocity.hlsl b/WickedEngine/shaders/skyPS_velocity.hlsl similarity index 100% rename from WickedEngine/skyPS_velocity.hlsl rename to WickedEngine/shaders/skyPS_velocity.hlsl diff --git a/WickedEngine/skyVS.hlsl b/WickedEngine/shaders/skyVS.hlsl similarity index 100% rename from WickedEngine/skyVS.hlsl rename to WickedEngine/shaders/skyVS.hlsl diff --git a/WickedEngine/sphereVS.hlsl b/WickedEngine/shaders/sphereVS.hlsl similarity index 100% rename from WickedEngine/sphereVS.hlsl rename to WickedEngine/shaders/sphereVS.hlsl diff --git a/WickedEngine/ssaoCS.hlsl b/WickedEngine/shaders/ssaoCS.hlsl similarity index 100% rename from WickedEngine/ssaoCS.hlsl rename to WickedEngine/shaders/ssaoCS.hlsl diff --git a/WickedEngine/ssr_medianCS.hlsl b/WickedEngine/shaders/ssr_medianCS.hlsl similarity index 100% rename from WickedEngine/ssr_medianCS.hlsl rename to WickedEngine/shaders/ssr_medianCS.hlsl diff --git a/WickedEngine/ssr_raytraceCS.hlsl b/WickedEngine/shaders/ssr_raytraceCS.hlsl similarity index 100% rename from WickedEngine/ssr_raytraceCS.hlsl rename to WickedEngine/shaders/ssr_raytraceCS.hlsl diff --git a/WickedEngine/ssr_resolveCS.hlsl b/WickedEngine/shaders/ssr_resolveCS.hlsl similarity index 100% rename from WickedEngine/ssr_resolveCS.hlsl rename to WickedEngine/shaders/ssr_resolveCS.hlsl diff --git a/WickedEngine/ssr_temporalCS.hlsl b/WickedEngine/shaders/ssr_temporalCS.hlsl similarity index 100% rename from WickedEngine/ssr_temporalCS.hlsl rename to WickedEngine/shaders/ssr_temporalCS.hlsl diff --git a/WickedEngine/stochasticSSRHF.hlsli b/WickedEngine/shaders/stochasticSSRHF.hlsli similarity index 100% rename from WickedEngine/stochasticSSRHF.hlsli rename to WickedEngine/shaders/stochasticSSRHF.hlsli diff --git a/WickedEngine/sunPS.hlsl b/WickedEngine/shaders/sunPS.hlsl similarity index 100% rename from WickedEngine/sunPS.hlsl rename to WickedEngine/shaders/sunPS.hlsl diff --git a/WickedEngine/temporalaaCS.hlsl b/WickedEngine/shaders/temporalaaCS.hlsl similarity index 100% rename from WickedEngine/temporalaaCS.hlsl rename to WickedEngine/shaders/temporalaaCS.hlsl diff --git a/WickedEngine/tileFrustumsCS.hlsl b/WickedEngine/shaders/tileFrustumsCS.hlsl similarity index 100% rename from WickedEngine/tileFrustumsCS.hlsl rename to WickedEngine/shaders/tileFrustumsCS.hlsl diff --git a/WickedEngine/tonemapCS.hlsl b/WickedEngine/shaders/tonemapCS.hlsl similarity index 100% rename from WickedEngine/tonemapCS.hlsl rename to WickedEngine/shaders/tonemapCS.hlsl diff --git a/WickedEngine/upsample_bilateralPS.hlsl b/WickedEngine/shaders/upsample_bilateralPS.hlsl similarity index 100% rename from WickedEngine/upsample_bilateralPS.hlsl rename to WickedEngine/shaders/upsample_bilateralPS.hlsl diff --git a/WickedEngine/upsample_bilateral_float1CS.hlsl b/WickedEngine/shaders/upsample_bilateral_float1CS.hlsl similarity index 100% rename from WickedEngine/upsample_bilateral_float1CS.hlsl rename to WickedEngine/shaders/upsample_bilateral_float1CS.hlsl diff --git a/WickedEngine/upsample_bilateral_float4CS.hlsl b/WickedEngine/shaders/upsample_bilateral_float4CS.hlsl similarity index 100% rename from WickedEngine/upsample_bilateral_float4CS.hlsl rename to WickedEngine/shaders/upsample_bilateral_float4CS.hlsl diff --git a/WickedEngine/upsample_bilateral_uint4CS.hlsl b/WickedEngine/shaders/upsample_bilateral_uint4CS.hlsl similarity index 100% rename from WickedEngine/upsample_bilateral_uint4CS.hlsl rename to WickedEngine/shaders/upsample_bilateral_uint4CS.hlsl diff --git a/WickedEngine/upsample_bilateral_unorm1CS.hlsl b/WickedEngine/shaders/upsample_bilateral_unorm1CS.hlsl similarity index 100% rename from WickedEngine/upsample_bilateral_unorm1CS.hlsl rename to WickedEngine/shaders/upsample_bilateral_unorm1CS.hlsl diff --git a/WickedEngine/upsample_bilateral_unorm4CS.hlsl b/WickedEngine/shaders/upsample_bilateral_unorm4CS.hlsl similarity index 100% rename from WickedEngine/upsample_bilateral_unorm4CS.hlsl rename to WickedEngine/shaders/upsample_bilateral_unorm4CS.hlsl diff --git a/WickedEngine/uvsphere.hlsli b/WickedEngine/shaders/uvsphere.hlsli similarity index 100% rename from WickedEngine/uvsphere.hlsli rename to WickedEngine/shaders/uvsphere.hlsli diff --git a/WickedEngine/vPointLightVS.hlsl b/WickedEngine/shaders/vPointLightVS.hlsl similarity index 100% rename from WickedEngine/vPointLightVS.hlsl rename to WickedEngine/shaders/vPointLightVS.hlsl diff --git a/WickedEngine/vSpotLightVS.hlsl b/WickedEngine/shaders/vSpotLightVS.hlsl similarity index 100% rename from WickedEngine/vSpotLightVS.hlsl rename to WickedEngine/shaders/vSpotLightVS.hlsl diff --git a/WickedEngine/vertexcolorPS.hlsl b/WickedEngine/shaders/vertexcolorPS.hlsl similarity index 100% rename from WickedEngine/vertexcolorPS.hlsl rename to WickedEngine/shaders/vertexcolorPS.hlsl diff --git a/WickedEngine/vertexcolorVS.hlsl b/WickedEngine/shaders/vertexcolorVS.hlsl similarity index 100% rename from WickedEngine/vertexcolorVS.hlsl rename to WickedEngine/shaders/vertexcolorVS.hlsl diff --git a/WickedEngine/volumeLightHF.hlsli b/WickedEngine/shaders/volumeLightHF.hlsli similarity index 100% rename from WickedEngine/volumeLightHF.hlsli rename to WickedEngine/shaders/volumeLightHF.hlsli diff --git a/WickedEngine/volumetricCloud_curlnoiseCS.hlsl b/WickedEngine/shaders/volumetricCloud_curlnoiseCS.hlsl similarity index 100% rename from WickedEngine/volumetricCloud_curlnoiseCS.hlsl rename to WickedEngine/shaders/volumetricCloud_curlnoiseCS.hlsl diff --git a/WickedEngine/volumetricCloud_detailnoiseCS.hlsl b/WickedEngine/shaders/volumetricCloud_detailnoiseCS.hlsl similarity index 100% rename from WickedEngine/volumetricCloud_detailnoiseCS.hlsl rename to WickedEngine/shaders/volumetricCloud_detailnoiseCS.hlsl diff --git a/WickedEngine/volumetricCloud_renderCS.hlsl b/WickedEngine/shaders/volumetricCloud_renderCS.hlsl similarity index 100% rename from WickedEngine/volumetricCloud_renderCS.hlsl rename to WickedEngine/shaders/volumetricCloud_renderCS.hlsl diff --git a/WickedEngine/volumetricCloud_reprojectCS.hlsl b/WickedEngine/shaders/volumetricCloud_reprojectCS.hlsl similarity index 100% rename from WickedEngine/volumetricCloud_reprojectCS.hlsl rename to WickedEngine/shaders/volumetricCloud_reprojectCS.hlsl diff --git a/WickedEngine/volumetricCloud_shapenoiseCS.hlsl b/WickedEngine/shaders/volumetricCloud_shapenoiseCS.hlsl similarity index 100% rename from WickedEngine/volumetricCloud_shapenoiseCS.hlsl rename to WickedEngine/shaders/volumetricCloud_shapenoiseCS.hlsl diff --git a/WickedEngine/volumetricCloud_weathermapCS.hlsl b/WickedEngine/shaders/volumetricCloud_weathermapCS.hlsl similarity index 100% rename from WickedEngine/volumetricCloud_weathermapCS.hlsl rename to WickedEngine/shaders/volumetricCloud_weathermapCS.hlsl diff --git a/WickedEngine/volumetricCloudsHF.hlsli b/WickedEngine/shaders/volumetricCloudsHF.hlsli similarity index 100% rename from WickedEngine/volumetricCloudsHF.hlsli rename to WickedEngine/shaders/volumetricCloudsHF.hlsli diff --git a/WickedEngine/volumetricLightHF.hlsli b/WickedEngine/shaders/volumetricLightHF.hlsli similarity index 100% rename from WickedEngine/volumetricLightHF.hlsli rename to WickedEngine/shaders/volumetricLightHF.hlsli diff --git a/WickedEngine/volumetricLight_DirectionalPS.hlsl b/WickedEngine/shaders/volumetricLight_DirectionalPS.hlsl similarity index 100% rename from WickedEngine/volumetricLight_DirectionalPS.hlsl rename to WickedEngine/shaders/volumetricLight_DirectionalPS.hlsl diff --git a/WickedEngine/volumetricLight_PointPS.hlsl b/WickedEngine/shaders/volumetricLight_PointPS.hlsl similarity index 100% rename from WickedEngine/volumetricLight_PointPS.hlsl rename to WickedEngine/shaders/volumetricLight_PointPS.hlsl diff --git a/WickedEngine/volumetricLight_SpotPS.hlsl b/WickedEngine/shaders/volumetricLight_SpotPS.hlsl similarity index 100% rename from WickedEngine/volumetricLight_SpotPS.hlsl rename to WickedEngine/shaders/volumetricLight_SpotPS.hlsl diff --git a/WickedEngine/volumetriclight_directionalVS.hlsl b/WickedEngine/shaders/volumetriclight_directionalVS.hlsl similarity index 100% rename from WickedEngine/volumetriclight_directionalVS.hlsl rename to WickedEngine/shaders/volumetriclight_directionalVS.hlsl diff --git a/WickedEngine/volumetriclight_pointVS.hlsl b/WickedEngine/shaders/volumetriclight_pointVS.hlsl similarity index 100% rename from WickedEngine/volumetriclight_pointVS.hlsl rename to WickedEngine/shaders/volumetriclight_pointVS.hlsl diff --git a/WickedEngine/volumetriclight_spotVS.hlsl b/WickedEngine/shaders/volumetriclight_spotVS.hlsl similarity index 100% rename from WickedEngine/volumetriclight_spotVS.hlsl rename to WickedEngine/shaders/volumetriclight_spotVS.hlsl diff --git a/WickedEngine/voxelClearOnlyNormalCS.hlsl b/WickedEngine/shaders/voxelClearOnlyNormalCS.hlsl similarity index 100% rename from WickedEngine/voxelClearOnlyNormalCS.hlsl rename to WickedEngine/shaders/voxelClearOnlyNormalCS.hlsl diff --git a/WickedEngine/voxelConeTracingHF.hlsli b/WickedEngine/shaders/voxelConeTracingHF.hlsli similarity index 100% rename from WickedEngine/voxelConeTracingHF.hlsli rename to WickedEngine/shaders/voxelConeTracingHF.hlsli diff --git a/WickedEngine/voxelGS.hlsl b/WickedEngine/shaders/voxelGS.hlsl similarity index 100% rename from WickedEngine/voxelGS.hlsl rename to WickedEngine/shaders/voxelGS.hlsl diff --git a/WickedEngine/voxelHF.hlsli b/WickedEngine/shaders/voxelHF.hlsli similarity index 100% rename from WickedEngine/voxelHF.hlsli rename to WickedEngine/shaders/voxelHF.hlsli diff --git a/WickedEngine/voxelPS.hlsl b/WickedEngine/shaders/voxelPS.hlsl similarity index 100% rename from WickedEngine/voxelPS.hlsl rename to WickedEngine/shaders/voxelPS.hlsl diff --git a/WickedEngine/voxelRadianceSecondaryBounceCS.hlsl b/WickedEngine/shaders/voxelRadianceSecondaryBounceCS.hlsl similarity index 100% rename from WickedEngine/voxelRadianceSecondaryBounceCS.hlsl rename to WickedEngine/shaders/voxelRadianceSecondaryBounceCS.hlsl diff --git a/WickedEngine/voxelSceneCopyClearCS.hlsl b/WickedEngine/shaders/voxelSceneCopyClearCS.hlsl similarity index 100% rename from WickedEngine/voxelSceneCopyClearCS.hlsl rename to WickedEngine/shaders/voxelSceneCopyClearCS.hlsl diff --git a/WickedEngine/voxelSceneCopyClearCS_TemporalSmoothing.hlsl b/WickedEngine/shaders/voxelSceneCopyClearCS_TemporalSmoothing.hlsl similarity index 100% rename from WickedEngine/voxelSceneCopyClearCS_TemporalSmoothing.hlsl rename to WickedEngine/shaders/voxelSceneCopyClearCS_TemporalSmoothing.hlsl diff --git a/WickedEngine/voxelVS.hlsl b/WickedEngine/shaders/voxelVS.hlsl similarity index 100% rename from WickedEngine/voxelVS.hlsl rename to WickedEngine/shaders/voxelVS.hlsl diff --git a/WickedEngine/wiBackLog.cpp b/WickedEngine/wiBackLog.cpp index 3bb16befb..af860860b 100644 --- a/WickedEngine/wiBackLog.cpp +++ b/WickedEngine/wiBackLog.cpp @@ -12,7 +12,6 @@ #include "wiPlatform.h" #include -#include #include using namespace std; @@ -21,40 +20,23 @@ using namespace wiGraphics; namespace wiBackLog { - - enum State { - DISABLED, - IDLE, - ACTIVATING, - DEACTIVATING, - }; - + bool enabled = false; deque stream; deque history; - State state = DISABLED; const float speed = 50.0f; unsigned int deletefromline = 100; float pos = -FLT_MAX; float scroll = 0; - stringstream inputArea; + string inputArea; int historyPos = 0; wiSpriteFont font; wiSpinLock logLock; - - std::unique_ptr backgroundTex; + Texture backgroundTex; + bool refitscroll = false; void Toggle() { - switch (state) - { - case IDLE: - state = DEACTIVATING; - break; - case DISABLED: - state = ACTIVATING; - break; - default:break; - }; + enabled = !enabled; } void Scroll(int dir) { @@ -91,46 +73,58 @@ namespace wiBackLog } } - if (state == DEACTIVATING) - pos -= speed; - else if (state == ACTIVATING) + if (enabled) + { pos += speed; - if (pos <= -wiRenderer::GetDevice()->GetScreenHeight()) - { - state = DISABLED; - pos = -(float)wiRenderer::GetDevice()->GetScreenHeight(); } - else if (pos > 0) + else { - state = IDLE; - pos = 0; - } - - if (scroll + font.textHeight() > int(wiRenderer::GetDevice()->GetScreenHeight() * 0.8f)) - { - scroll -= 2; + pos -= speed; } + pos = wiMath::Clamp(pos, -wiRenderer::GetDevice()->GetScreenHeight(), 0); } void Draw(CommandList cmd) { - if (state != DISABLED) + if (pos > -wiRenderer::GetDevice()->GetScreenHeight()) { - if (backgroundTex == nullptr) + if (!backgroundTex.IsValid()) { const uint8_t colorData[] = { 0, 0, 43, 200, 43, 31, 141, 223 }; - backgroundTex.reset(new Texture); - wiTextureHelper::CreateTexture(*backgroundTex.get(), colorData, 1, 2); + wiTextureHelper::CreateTexture(backgroundTex, colorData, 1, 2); } wiImageParams fx = wiImageParams((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight()); fx.pos = XMFLOAT3(0, pos, 0); fx.opacity = wiMath::Lerp(1, 0, -pos / wiRenderer::GetDevice()->GetScreenHeight()); - wiImage::Draw(backgroundTex.get(), fx, cmd); + wiImage::Draw(&backgroundTex, fx, cmd); + wiFont::Draw(inputArea, wiFontParams(10, wiRenderer::GetDevice()->GetScreenHeight() - 10, WIFONTSIZE_DEFAULT, WIFALIGN_LEFT, WIFALIGN_BOTTOM), cmd); + + font.SetText(getText()); + if (refitscroll) + { + refitscroll = false; + float textheight = font.textHeight(); + float limit = wiRenderer::GetDevice()->GetScreenHeight() * 0.9f; + if (scroll + textheight > limit) + { + scroll = limit - textheight; + } + } font.params.posX = 50; font.params.posY = pos + scroll; + Rect rect; + rect.left = 0; + rect.right = (int32_t)wiRenderer::GetDevice()->GetResolutionWidth(); + rect.top = 0; + rect.bottom = int32_t(wiRenderer::GetDevice()->GetResolutionHeight() * 0.9f); + wiRenderer::GetDevice()->BindScissorRects(1, &rect, cmd); font.Draw(cmd); - wiFont::Draw(inputArea.str(), wiFontParams(10, wiRenderer::GetDevice()->GetScreenHeight() - 10, WIFONTSIZE_DEFAULT, WIFALIGN_LEFT, WIFALIGN_BOTTOM), cmd); + rect.left = -INT_MAX; + rect.right = INT_MAX; + rect.top = -INT_MAX; + rect.bottom = INT_MAX; + wiRenderer::GetDevice()->BindScissorRects(1, &rect, cmd); } } @@ -138,72 +132,67 @@ namespace wiBackLog string getText() { logLock.lock(); - stringstream ss(""); - for (unsigned int i = 0; i < stream.size(); ++i) - ss << stream[i]; + string retval; + for (auto& x : stream) + { + retval += x; + } logLock.unlock(); - return ss.str(); + return retval; } void clear() { logLock.lock(); stream.clear(); + scroll = 0; logLock.unlock(); } void post(const char* input) { - stringstream ss(""); - ss << input << endl; - logLock.lock(); - stream.push_back(ss.str().c_str()); - if (stream.size() > deletefromline) { + string str; + str = input; + str += '\n'; + stream.push_back(str); + if (stream.size() > deletefromline) + { stream.pop_front(); } + refitscroll = true; logLock.unlock(); #ifdef _WIN32 - OutputDebugStringA(ss.str().c_str()); -#else - std::cout << ss.str(); + OutputDebugStringA(str.c_str()); #endif // _WIN32 + + std::cout << str; } - void input(const char& input) + void input(const char input) { - inputArea << input; + inputArea += input; } void acceptInput() { historyPos = 0; - stringstream commandStream(""); - commandStream << inputArea.str(); - post(inputArea.str().c_str()); - history.push_back(inputArea.str()); + post(inputArea.c_str()); + history.push_back(inputArea); if (history.size() > deletefromline) { history.pop_front(); } - wiLua::RunText(inputArea.str()); - inputArea.str(""); + wiLua::RunText(inputArea); + inputArea.clear(); } void deletefromInput() { - stringstream ss(inputArea.str().substr(0, inputArea.str().length() - 1)); - inputArea.str(""); - inputArea << ss.str(); - } - void save(ofstream& file) - { - for (deque::iterator iter = stream.begin(); iter != stream.end(); ++iter) - file << iter->c_str(); - file.close(); + if(!inputArea.empty()) + inputArea.pop_back(); } void historyPrev() { if (!history.empty()) { - inputArea.str(""); - inputArea << history[history.size() - 1 - historyPos]; + inputArea = history[history.size() - 1 - historyPos]; if ((size_t)historyPos < history.size() - 1) historyPos++; } @@ -214,14 +203,13 @@ namespace wiBackLog { if (historyPos > 0) historyPos--; - inputArea.str(""); - inputArea << history[history.size() - 1 - historyPos]; + inputArea = history[history.size() - 1 - historyPos]; } } void setBackground(Texture* texture) { - backgroundTex.reset(texture); + backgroundTex = *texture; } void setFontSize(int value) { @@ -232,6 +220,6 @@ namespace wiBackLog font.params.spacingY = value; } - bool isActive() { return state == IDLE; } + bool isActive() { return enabled; } } diff --git a/WickedEngine/wiBackLog.h b/WickedEngine/wiBackLog.h index 068e1959e..185b8ac1e 100644 --- a/WickedEngine/wiBackLog.h +++ b/WickedEngine/wiBackLog.h @@ -15,10 +15,9 @@ namespace wiBackLog std::string getText(); void clear(); void post(const char* input); - void input(const char& input); + void input(const char input); void acceptInput(); void deletefromInput(); - void save(std::ofstream& file); void historyPrev(); void historyNext(); diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp index 97a043fd9..e0487e219 100644 --- a/WickedEngine/wiEmittedParticle.cpp +++ b/WickedEngine/wiEmittedParticle.cpp @@ -5,7 +5,7 @@ #include "wiResourceManager.h" #include "wiIntersect.h" #include "wiRandom.h" -#include "ResourceMapping.h" +#include "shaders/ResourceMapping.h" #include "wiArchive.h" #include "wiTextureHelper.h" #include "wiGPUSortLib.h" diff --git a/WickedEngine/wiEmittedParticle.h b/WickedEngine/wiEmittedParticle.h index e35a3ab59..ee3762e37 100644 --- a/WickedEngine/wiEmittedParticle.h +++ b/WickedEngine/wiEmittedParticle.h @@ -2,7 +2,7 @@ #include "CommonInclude.h" #include "wiGraphicsDevice.h" #include "wiIntersect.h" -#include "ShaderInterop_EmittedParticle.h" +#include "shaders/ShaderInterop_EmittedParticle.h" #include "wiEnums.h" #include "wiScene_Decl.h" #include "wiECS.h" diff --git a/WickedEngine/wiEvent.cpp b/WickedEngine/wiEvent.cpp index 9abe8d3e5..0841182ef 100644 --- a/WickedEngine/wiEvent.cpp +++ b/WickedEngine/wiEvent.cpp @@ -59,11 +59,14 @@ namespace wiEvent void FireEvent(int id, uint64_t userdata) { - manager->locker.lock(); // Callbacks that only live for once: { + manager->locker.lock(); auto it = manager->subscribers_once.find(id); - if (it != manager->subscribers_once.end()) + bool found = it != manager->subscribers_once.end(); + manager->locker.unlock(); + + if (found) { auto& callbacks = it->second; for (auto& callback : callbacks) @@ -75,8 +78,12 @@ namespace wiEvent } // Callbacks that live until deleted: { + manager->locker.lock(); auto it = manager->subscribers.find(id); - if (it != manager->subscribers.end()) + bool found = it != manager->subscribers.end(); + manager->locker.unlock(); + + if (found) { auto& callbacks = it->second; for (auto& callback : callbacks) @@ -85,6 +92,5 @@ namespace wiEvent } } } - manager->locker.unlock(); } } diff --git a/WickedEngine/wiFFTGenerator.cpp b/WickedEngine/wiFFTGenerator.cpp index e9882ca84..2494a9e73 100644 --- a/WickedEngine/wiFFTGenerator.cpp +++ b/WickedEngine/wiFFTGenerator.cpp @@ -1,7 +1,7 @@ #include "wiFFTGenerator.h" #include "wiResourceManager.h" #include "wiRenderer.h" -#include "ShaderInterop_FFTGenerator.h" +#include "shaders/ShaderInterop_FFTGenerator.h" #include #include diff --git a/WickedEngine/wiFont.cpp b/WickedEngine/wiFont.cpp index 8e2fed2b4..0b66cd522 100644 --- a/WickedEngine/wiFont.cpp +++ b/WickedEngine/wiFont.cpp @@ -2,8 +2,8 @@ #include "wiRenderer.h" #include "wiResourceManager.h" #include "wiHelper.h" -#include "ResourceMapping.h" -#include "ShaderInterop_Font.h" +#include "shaders/ResourceMapping.h" +#include "shaders/ShaderInterop_Font.h" #include "wiBackLog.h" #include "wiTextureHelper.h" #include "wiRectPacker.h" diff --git a/WickedEngine/wiGPUBVH.cpp b/WickedEngine/wiGPUBVH.cpp index ecb421816..b65b008f5 100644 --- a/WickedEngine/wiGPUBVH.cpp +++ b/WickedEngine/wiGPUBVH.cpp @@ -1,7 +1,7 @@ #include "wiGPUBVH.h" #include "wiScene.h" #include "wiRenderer.h" -#include "ShaderInterop_BVH.h" +#include "shaders/ShaderInterop_BVH.h" #include "wiProfiler.h" #include "wiResourceManager.h" #include "wiGPUSortLib.h" diff --git a/WickedEngine/wiGPUBVH.h b/WickedEngine/wiGPUBVH.h index 926a4715c..fba5770f5 100644 --- a/WickedEngine/wiGPUBVH.h +++ b/WickedEngine/wiGPUBVH.h @@ -3,7 +3,7 @@ #include "wiGraphicsDevice.h" #include "wiScene_Decl.h" #include "wiRectPacker.h" -#include "ShaderInterop_Renderer.h" +#include "shaders/ShaderInterop_Renderer.h" #include "wiResourceManager.h" #include diff --git a/WickedEngine/wiGPUSortLib.cpp b/WickedEngine/wiGPUSortLib.cpp index 154d179eb..f5571b781 100644 --- a/WickedEngine/wiGPUSortLib.cpp +++ b/WickedEngine/wiGPUSortLib.cpp @@ -1,7 +1,7 @@ #include "wiGPUSortLib.h" #include "wiRenderer.h" #include "wiResourceManager.h" -#include "ShaderInterop_GPUSortLib.h" +#include "shaders/ShaderInterop_GPUSortLib.h" #include "wiEvent.h" using namespace wiGraphics; diff --git a/WickedEngine/wiGraphics.h b/WickedEngine/wiGraphics.h index 7268f1539..9506c8362 100644 --- a/WickedEngine/wiGraphics.h +++ b/WickedEngine/wiGraphics.h @@ -25,6 +25,13 @@ namespace wiGraphics LIB, SHADERSTAGE_COUNT, }; + enum SHADERFORMAT + { + SHADERFORMAT_NONE, + SHADERFORMAT_HLSL5, + SHADERFORMAT_HLSL6, + SHADERFORMAT_SPIRV, + }; enum PRIMITIVETOPOLOGY { UNDEFINED, diff --git a/WickedEngine/wiGraphicsDevice.h b/WickedEngine/wiGraphicsDevice.h index 0fb1e9517..364ad3d9b 100644 --- a/WickedEngine/wiGraphicsDevice.h +++ b/WickedEngine/wiGraphicsDevice.h @@ -120,6 +120,8 @@ namespace wiGraphics inline uint32_t GetVariableRateShadingTileSize() const { return VARIABLE_RATE_SHADING_TILE_SIZE; } inline uint64_t GetTimestampFrequency() const { return TIMESTAMP_FREQUENCY; } + virtual SHADERFORMAT GetShaderFormat() const { return SHADERFORMAT_NONE; } + ///////////////Thread-sensitive//////////////////////// virtual void RenderPassBegin(const RenderPass* renderpass, CommandList cmd) = 0; diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index c867d4840..7179f72d1 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -3,7 +3,6 @@ #ifdef WICKEDENGINE_BUILD_DX11 #include "wiHelper.h" -#include "ResourceMapping.h" #include "wiBackLog.h" #pragma comment(lib,"dxguid.lib") diff --git a/WickedEngine/wiGraphicsDevice_DX11.h b/WickedEngine/wiGraphicsDevice_DX11.h index eb9f24d6c..1258e3417 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.h +++ b/WickedEngine/wiGraphicsDevice_DX11.h @@ -116,6 +116,8 @@ namespace wiGraphics Texture GetBackBuffer() override; + SHADERFORMAT GetShaderFormat() const override { return SHADERFORMAT_HLSL5; } + ///////////////Thread-sensitive//////////////////////// void RenderPassBegin(const RenderPass* renderpass, CommandList cmd) override; diff --git a/WickedEngine/wiGraphicsDevice_DX12.cpp b/WickedEngine/wiGraphicsDevice_DX12.cpp index 48fe5ab40..ed105baca 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.cpp +++ b/WickedEngine/wiGraphicsDevice_DX12.cpp @@ -5,7 +5,6 @@ #include "wiGraphicsDevice_SharedInternals.h" #include "wiHelper.h" #include "wiMath.h" -#include "ResourceMapping.h" #include "wiBackLog.h" #include "wiStartupArguments.h" @@ -2192,13 +2191,12 @@ using namespace DX12_Internal; RESOLUTIONHEIGHT = int(window.Bounds().Height * dpiscale); #endif + HMODULE dxcompiler = wiLoadLibrary("dxcompiler.dll"); #ifdef PLATFORM_UWP - HMODULE dxcompiler = LoadPackagedLibrary(L"dxcompiler.dll", 0); #else HMODULE dxgi = LoadLibraryEx(L"dxgi.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); HMODULE dx12 = LoadLibraryEx(L"d3d12.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); - HMODULE dxcompiler = LoadLibrary(L"dxcompiler.dll"); CreateDXGIFactory2 = (PFN_CREATE_DXGI_FACTORY_2)GetProcAddress(dxgi, "CreateDXGIFactory2"); assert(CreateDXGIFactory2 != nullptr); diff --git a/WickedEngine/wiGraphicsDevice_DX12.h b/WickedEngine/wiGraphicsDevice_DX12.h index 754740cc6..b47e70e27 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.h +++ b/WickedEngine/wiGraphicsDevice_DX12.h @@ -340,6 +340,8 @@ namespace wiGraphics Texture GetBackBuffer() override; + SHADERFORMAT GetShaderFormat() const override { return SHADERFORMAT_HLSL6; } + ///////////////Thread-sensitive//////////////////////// void RenderPassBegin(const RenderPass* renderpass, CommandList cmd) override; diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.h b/WickedEngine/wiGraphicsDevice_Vulkan.h index 9a230549b..4f5ae0ab0 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.h +++ b/WickedEngine/wiGraphicsDevice_Vulkan.h @@ -264,6 +264,8 @@ namespace wiGraphics void SetVSyncEnabled(bool value) override { VSYNC = value; CreateBackBufferResources(); }; + SHADERFORMAT GetShaderFormat() const override { return SHADERFORMAT_SPIRV; } + ///////////////Thread-sensitive//////////////////////// void RenderPassBegin(const RenderPass* renderpass, CommandList cmd) override; diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp index a697bb7c6..3bdfe5345 100644 --- a/WickedEngine/wiHairParticle.cpp +++ b/WickedEngine/wiHairParticle.cpp @@ -4,12 +4,12 @@ #include "wiMath.h" #include "wiIntersect.h" #include "wiRandom.h" -#include "ResourceMapping.h" +#include "shaders/ResourceMapping.h" #include "wiArchive.h" -#include "ShaderInterop.h" +#include "shaders/ShaderInterop.h" #include "wiTextureHelper.h" #include "wiScene.h" -#include "ShaderInterop_HairParticle.h" +#include "shaders/ShaderInterop_HairParticle.h" #include "wiBackLog.h" #include "wiEvent.h" diff --git a/WickedEngine/wiHelper.cpp b/WickedEngine/wiHelper.cpp index e25f0c2c8..a4ee4e823 100644 --- a/WickedEngine/wiHelper.cpp +++ b/WickedEngine/wiHelper.cpp @@ -345,6 +345,18 @@ namespace wiHelper return ""; } + std::string ReplaceExtension(const std::string& filename, const std::string& extension) + { + size_t idx = filename.rfind('.'); + + if (idx != std::string::npos) + { + return filename.substr(0, idx + 1) + extension; + } + + return filename; + } + void MakePathRelative(const std::string& rootdir, std::string& path) { if (rootdir.empty() || path.empty()) @@ -367,6 +379,21 @@ namespace wiHelper //} } + void MakePathAbsolute(std::string& path) + { + std::filesystem::path filepath = path; + std::filesystem::path absolute = std::filesystem::absolute(path); + if (!absolute.empty()) + { + path = absolute.string(); + } + } + + void DirectoryCreate(const std::string& path) + { + std::filesystem::create_directories(path); + } + bool FileRead(const std::string& fileName, std::vector& data) { #ifndef PLATFORM_UWP @@ -519,56 +546,8 @@ namespace wiHelper bool FileExists(const std::string& fileName) { -#ifndef PLATFORM_UWP - ifstream file(fileName); - bool exists = file.is_open(); - file.close(); + bool exists = std::filesystem::exists(fileName); return exists; -#else - using namespace winrt::Windows::Storage; - using namespace winrt::Windows::Foundation; - string directory = GetDirectoryFromPath(fileName); - string name = GetFileNameFromPath(fileName); - wstring wdir, wname; - StringConvert(directory, wdir); - StringConvert(name, wname); - bool success = false; - - auto async_helper = [&]() -> IAsyncAction { - try - { - auto folder = co_await StorageFolder::GetFolderFromPathAsync(wdir); - auto item = co_await folder.TryGetItemAsync(wname); - if (item) - { - success = true; - } - } - catch (winrt::hresult_error const& ex) - { - switch (ex.code()) - { - case E_ACCESSDENIED: - wiBackLog::post(("Opening file failed: " + fileName + " | Reason: Permission Denied!").c_str()); - break; - default: - break; - } - } - - }; - - if (winrt::impl::is_sta_thread()) - { - std::thread([&] { async_helper().get(); }).join(); // can't block coroutine from ui thread - } - else - { - async_helper().get(); - } - - return success; -#endif } void FileDialog(const FileDialogParams& params, std::function onSuccess) @@ -771,7 +750,7 @@ namespace wiHelper ss << "const uint8_t " << dataName << "[] = {"; for (size_t i = 0; i < size; ++i) { - ss << (uint32_t)data[i] << ", "; + ss << (uint32_t)data[i] << ","; } ss << "};" << endl; return FileWrite(dst_filename, (uint8_t*)ss.str().c_str(), ss.str().length()); @@ -814,10 +793,10 @@ namespace wiHelper MultiByteToWideChar(CP_UTF8, 0, from, -1, &to[0], num); } #else - int num = 0; // TODO - const char * message = "int StringConvert(const char* from, wchar_t* to) not implemented"; - std::cerr << message << std::endl; - throw std::runtime_error(message); + std::string sfrom = from; + std::wstring wto = std::wstring(sfrom.begin(), sfrom.end()); + std::wmemcpy(to, wto.c_str(), wto.length()); + int num = wto.length(); #endif // _WIN32 return num; } @@ -831,10 +810,10 @@ namespace wiHelper WideCharToMultiByte(CP_UTF8, 0, from, -1, &to[0], num, NULL, NULL); } #else - int num = 0; // TODO - const char * message = "int StringConvert(const wchar_t* from, char* to) not implemented"; - std::cerr << message << std::endl; - throw std::runtime_error(message); + std::wstring wfrom = from; + std::string sto = std::string(wfrom.begin(), wfrom.end()); + std::strcpy(to, sto.c_str()); + int num = sto.length(); #endif // _WIN32 return num; } diff --git a/WickedEngine/wiHelper.h b/WickedEngine/wiHelper.h index 7baa54299..5935a4ae2 100644 --- a/WickedEngine/wiHelper.h +++ b/WickedEngine/wiHelper.h @@ -62,8 +62,14 @@ namespace wiHelper std::string GetExtensionFromFileName(const std::string& filename); + std::string ReplaceExtension(const std::string& filename, const std::string& extension); + void MakePathRelative(const std::string& rootdir, std::string& path); + void MakePathAbsolute(std::string& path); + + void DirectoryCreate(const std::string& path); + bool FileRead(const std::string& fileName, std::vector& data); bool FileWrite(const std::string& fileName, const uint8_t* data, size_t size); diff --git a/WickedEngine/wiImage.cpp b/WickedEngine/wiImage.cpp index 29451961c..298129a27 100644 --- a/WickedEngine/wiImage.cpp +++ b/WickedEngine/wiImage.cpp @@ -2,9 +2,9 @@ #include "wiResourceManager.h" #include "wiRenderer.h" #include "wiHelper.h" -#include "SamplerMapping.h" -#include "ResourceMapping.h" -#include "ShaderInterop_Image.h" +#include "shaders/SamplerMapping.h" +#include "shaders/ResourceMapping.h" +#include "shaders/ShaderInterop_Image.h" #include "wiBackLog.h" #include "wiEvent.h" diff --git a/WickedEngine/wiInitializer.cpp b/WickedEngine/wiInitializer.cpp index 98bd1b276..cf4e6a410 100644 --- a/WickedEngine/wiInitializer.cpp +++ b/WickedEngine/wiInitializer.cpp @@ -1,6 +1,7 @@ #include "wiInitializer.h" #include "WickedEngine.h" +#include #include namespace wiInitializer @@ -23,7 +24,15 @@ namespace wiInitializer wiBackLog::post(ss.str().c_str()); wiJobSystem::Initialize(); + wiShaderCompiler::Initialize(); + size_t shaderdump_count = wiRenderer::GetShaderDumpCount(); + if (shaderdump_count > 0) + { + wiBackLog::post(("Embedded shaders found: " + std::to_string(shaderdump_count)).c_str()); + } + + wiBackLog::post(""); wiJobSystem::Execute(ctx, [](wiJobArgs args) { wiFont::Initialize(); }); wiJobSystem::Execute(ctx, [](wiJobArgs args) { wiImage::Initialize(); }); wiJobSystem::Execute(ctx, [](wiJobArgs args) { wiInput::Initialize(); }); @@ -47,4 +56,4 @@ namespace wiInitializer { return initializationStarted && !wiJobSystem::IsBusy(ctx); } -} \ No newline at end of file +} diff --git a/WickedEngine/wiJobSystem.cpp b/WickedEngine/wiJobSystem.cpp index 31ed0b0b0..28e2588d5 100644 --- a/WickedEngine/wiJobSystem.cpp +++ b/WickedEngine/wiJobSystem.cpp @@ -6,7 +6,7 @@ #include #include -#include +#include #include namespace wiJobSystem @@ -96,18 +96,15 @@ namespace wiJobSystem assert(priority_result != 0); // Name the thread: - std::wstringstream wss; - wss << "wiJobSystem_" << threadID; - HRESULT hr = SetThreadDescription(handle, wss.str().c_str()); + std::wstring wthreadname = L"wiJobSystem_" + std::to_wstring(threadID); + HRESULT hr = SetThreadDescription(handle, wthreadname.c_str()); assert(SUCCEEDED(hr)); #endif // _WIN32 worker.detach(); } - std::stringstream ss(""); - ss << "wiJobSystem Initialized with [" << numCores << " cores] [" << numThreads << " threads]"; - wiBackLog::post(ss.str().c_str()); + wiBackLog::post(("wiJobSystem Initialized with [" + std::to_string(numCores) + " cores] [" + std::to_string(numThreads) + " threads]").c_str()); } uint32_t GetThreadCount() diff --git a/WickedEngine/wiLua.cpp b/WickedEngine/wiLua.cpp index b857ad71d..e108661e6 100644 --- a/WickedEngine/wiLua.cpp +++ b/WickedEngine/wiLua.cpp @@ -39,7 +39,10 @@ namespace wiLua ~LuaInternal() { - lua_close(m_luaState); + if (m_luaState != NULL) + { + lua_close(m_luaState); + } } }; LuaInternal luainternal; diff --git a/WickedEngine/wiOcean.cpp b/WickedEngine/wiOcean.cpp index a0d9541c9..2ccc91d64 100644 --- a/WickedEngine/wiOcean.cpp +++ b/WickedEngine/wiOcean.cpp @@ -1,7 +1,7 @@ #include "wiOcean.h" #include "wiRenderer.h" #include "wiResourceManager.h" -#include "ShaderInterop_Ocean.h" +#include "shaders/ShaderInterop_Ocean.h" #include "wiScene.h" #include "wiBackLog.h" #include "wiEvent.h" diff --git a/WickedEngine/wiPlatform.h b/WickedEngine/wiPlatform.h index 304ad602b..96c43461b 100644 --- a/WickedEngine/wiPlatform.h +++ b/WickedEngine/wiPlatform.h @@ -11,17 +11,27 @@ #define WIN32_LEAN_AND_MEAN #include #include +#include #if WINAPI_FAMILY == WINAPI_FAMILY_APP #define PLATFORM_UWP +#define wiLoadLibrary(name) LoadPackagedLibrary(_T(name),0) +#define wiGetProcAddress(handle,name) GetProcAddress(handle, name) #include #include #include +#else +#define PLATFORM_WINDOWS_DESKTOP +#define wiLoadLibrary(name) LoadLibrary(_T(name)) +#define wiGetProcAddress(handle,name) GetProcAddress(handle, name) #endif // UWP #else #define PLATFORM_LINUX +#define wiLoadLibrary(name) dlopen(name, RTLD_LAZY) +#define wiGetProcAddress(handle,name) dlsym(handle, name) +#define HMODULE (void*) #endif // _WIN32 diff --git a/WickedEngine/wiProfiler.cpp b/WickedEngine/wiProfiler.cpp index b190b65fb..0a7c81cf0 100644 --- a/WickedEngine/wiProfiler.cpp +++ b/WickedEngine/wiProfiler.cpp @@ -150,9 +150,6 @@ namespace wiProfiler range.name = name; range.time = 0; - range.cpuBegin.Start(); - range.cpuEnd.Start(); - ranges[id] = range; } diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index f29cd8f82..c3b498360 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -12,12 +12,6 @@ #include "wiBackLog.h" #include "wiProfiler.h" #include "wiOcean.h" -#include "ShaderInterop_Postprocess.h" -#include "ShaderInterop_Skinning.h" -#include "ShaderInterop_Raytracing.h" -#include "ShaderInterop_BVH.h" -#include "ShaderInterop_Utility.h" -#include "ShaderInterop_Paint.h" #include "wiGPUSortLib.h" #include "wiAllocators.h" #include "wiGPUBVH.h" @@ -27,6 +21,14 @@ #include "wiPlatform.h" #include "wiBlueNoise.h" #include "wiSheenLUT.h" +#include "wiShaderCompiler.h" + +#include "shaders/ShaderInterop_Postprocess.h" +#include "shaders/ShaderInterop_Skinning.h" +#include "shaders/ShaderInterop_Raytracing.h" +#include "shaders/ShaderInterop_BVH.h" +#include "shaders/ShaderInterop_Utility.h" +#include "shaders/ShaderInterop_Paint.h" #include #include @@ -54,7 +56,8 @@ GPUBuffer constantBuffers[CBTYPE_COUNT]; GPUBuffer resourceBuffers[RBTYPE_COUNT]; Sampler samplers[SSLOT_COUNT]; -string SHADERPATH = "../WickedEngine/shaders/"; +std::string SHADERPATH = "shaders/"; +std::string SHADERSOURCEPATH = "../WickedEngine/shaders/"; LinearAllocator renderFrameAllocators[COMMANDLIST_COUNT]; // can be used by graphics threads inline LinearAllocator& GetRenderFrameAllocator(CommandList cmd) @@ -891,13 +894,77 @@ enum DEBUGRENDERING PipelineState PSO_debug[DEBUGRENDERING_COUNT]; +#if __has_include("wiShaderDump.h") +// In this case, wiShaderDump.h contains precompiled shader binary data +#include "wiShaderdump.h" +#define SHADERDUMP_ENABLED +size_t GetShaderDumpCount() +{ + return wiShaderDump::shaderdump.size(); +} +#else +// In this case, shaders can only be loaded from file +size_t GetShaderDumpCount() +{ + return 0; +} +#endif // SHADERDUMP + bool LoadShader(SHADERSTAGE stage, Shader& shader, const std::string& filename) { + std::string shaderbinaryfilename = SHADERPATH + filename; + +#ifdef SHADERDUMP_ENABLED + + // Loading shader from precompiled dump: + auto it = wiShaderDump::shaderdump.find(shaderbinaryfilename); + if (it != wiShaderDump::shaderdump.end()) + { + return device->CreateShader(stage, it->second.data, it->second.size, &shader); + } + else + { + wiBackLog::post(("shader dump doesn't contain shader: " + shaderbinaryfilename).c_str()); + } +#endif // SHADERDUMP_ENABLED + + wiShaderCompiler::RegisterShader(shaderbinaryfilename); + + if (wiShaderCompiler::IsShaderOutdated(shaderbinaryfilename)) + { + wiShaderCompiler::CompilerInput input; + input.format = device->GetShaderFormat(); + input.stage = stage; + + std::string sourcedir = SHADERSOURCEPATH; + wiHelper::MakePathAbsolute(sourcedir); + input.include_directories.push_back(sourcedir); + + input.shadersourcefilename = wiHelper::ReplaceExtension(sourcedir + filename, "hlsl"); + + wiShaderCompiler::CompilerOutput output; + wiShaderCompiler::Compile(input, output); + + if (output.IsValid()) + { + wiShaderCompiler::SaveShaderAndMetadata(shaderbinaryfilename, output); + + wiBackLog::post(("shader compiled: " + shaderbinaryfilename).c_str()); + return device->CreateShader(stage, output.shaderdata, output.shadersize, &shader); + } + else + { + wiBackLog::post(("shader compile FAILED: " + shaderbinaryfilename + "\n" + output.error_message).c_str()); + } + return false; + } + vector buffer; - if (wiHelper::FileRead(SHADERPATH + filename, buffer)) + if (wiHelper::FileRead(shaderbinaryfilename, buffer)) { return device->CreateShader(stage, buffer.data(), buffer.size(), &shader); } + return false; } @@ -2523,6 +2590,14 @@ void SetShaderPath(const std::string& path) { SHADERPATH = path; } +const std::string& GetShaderSourcePath() +{ + return SHADERSOURCEPATH; +} +void SetShaderSourcePath(const std::string& path) +{ + SHADERSOURCEPATH = path; +} void ReloadShaders() { device->ClearPipelineStateCache(); diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index 6458bfe6c..9782bfc08 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -5,7 +5,7 @@ #include "wiScene.h" #include "wiECS.h" #include "wiIntersect.h" -#include "ShaderInterop_Renderer.h" +#include "shaders/ShaderInterop_Renderer.h" #include @@ -50,12 +50,19 @@ namespace wiRenderer // Retrieve the main graphics device: wiGraphics::GraphicsDevice* GetDevice(); - // Returns the shader loading directory + // Returns the shader binary directory const std::string& GetShaderPath(); - // Sets the shader loading directory + // Sets the shader binary directory void SetShaderPath(const std::string& path); + // Returns the shader source directory + const std::string& GetShaderSourcePath(); + // Sets the shader source directory + void SetShaderSourcePath(const std::string& path); // Reload shaders void ReloadShaders(); + // Returns how many shaders are embedded (if wiShaderDump.h is used) + // wiShaderDump.h can be generated by OfflineShaderCompiler.exe using shaderdump argument + size_t GetShaderDumpCount(); bool LoadShader(wiGraphics::SHADERSTAGE stage, wiGraphics::Shader& shader, const std::string& filename); diff --git a/WickedEngine/wiScene.h b/WickedEngine/wiScene.h index 5a066c49c..5349a4860 100644 --- a/WickedEngine/wiScene.h +++ b/WickedEngine/wiScene.h @@ -4,7 +4,7 @@ #include "wiIntersect.h" #include "wiEmittedParticle.h" #include "wiHairParticle.h" -#include "ShaderInterop_Renderer.h" +#include "shaders/ShaderInterop_Renderer.h" #include "wiJobSystem.h" #include "wiAudio.h" #include "wiResourceManager.h" diff --git a/WickedEngine/wiShaderCompiler.cpp b/WickedEngine/wiShaderCompiler.cpp new file mode 100644 index 000000000..020cee5df --- /dev/null +++ b/WickedEngine/wiShaderCompiler.cpp @@ -0,0 +1,534 @@ +#include "wiShaderCompiler.h" +#include "wiBackLog.h" +#include "wiPlatform.h" +#include "wiHelper.h" +#include "wiArchive.h" + +#include +#include +#include + + +#ifdef PLATFORM_WINDOWS_DESKTOP +#define SHADERCOMPILER_ENABLED +#define SHADERCOMPILER_ENABLED_DXCOMPILER +#define SHADERCOMPILER_ENABLED_D3DCOMPILER +#include // ComPtr +#endif // _WIN32 + +#ifdef PLATFORM_LINUX +// TODO: dxcompiler for linux +//#define SHADERCOMPILER_ENABLED_DXCOMPILER +#endif // PLATFORM_LINUX + +#ifdef SHADERCOMPILER_ENABLED_DXCOMPILER +#include "Utility/dxcapi.h" +#endif // SHADERCOMPILER_ENABLED_DXCOMPILER + +#ifdef SHADERCOMPILER_ENABLED_D3DCOMPILER +#include +#endif // SHADERCOMPILER_ENABLED_D3DCOMPILER + +namespace wiShaderCompiler +{ +#ifdef SHADERCOMPILER_ENABLED_DXCOMPILER + CComPtr dxcUtils; + CComPtr dxcCompiler; + CComPtr dxcIncludeHandler; + DxcCreateInstanceProc DxcCreateInstance = nullptr; + void Compile_DXCompiler(const CompilerInput& input, CompilerOutput& output) + { + if (dxcCompiler == nullptr) + { + return; + } + + std::vector shadersourcedata; + if (!wiHelper::FileRead(input.shadersourcefilename, shadersourcedata)) + { + return; + } + + // https://github.com/microsoft/DirectXShaderCompiler/wiki/Using-dxc.exe-and-dxcompiler.dll#dxcompiler-dll-interface + + std::vector args = { + L"-res-may-alias", + L"-flegacy-macro-expansion", + L"-no-legacy-cbuf-layout", + //L"-pack-optimized", + //L"-all-resources-bound", + }; + + if (input.flags & FLAG_DISABLE_OPTIMIZATION) + { + args.push_back(L"-Od"); + } + + switch (input.format) + { + case wiGraphics::SHADERFORMAT_HLSL6: + args.push_back(L"-D"); args.push_back(L"HLSL6"); + args.push_back(L"-D"); args.push_back(L"DISABLE_WAVE_INTRINSICS"); // random (as in only happening sometimes) validation fails with wave intrinsics :( + break; + case wiGraphics::SHADERFORMAT_SPIRV: + args.push_back(L"-D"); args.push_back(L"SPIRV"); + args.push_back(L"-spirv"); + args.push_back(L"-fspv-target-env=vulkan1.2"); + args.push_back(L"-fvk-use-dx-layout"); + //args.push_back(L"-fvk-b-shift"); args.push_back(L"0"); args.push_back(L"0"); + args.push_back(L"-fvk-t-shift"); args.push_back(L"1000"); args.push_back(L"0"); + args.push_back(L"-fvk-u-shift"); args.push_back(L"2000"); args.push_back(L"0"); + args.push_back(L"-fvk-s-shift"); args.push_back(L"3000"); args.push_back(L"0"); + break; + default: + assert(0); + return; + } + + args.push_back(L"-T"); + switch (input.stage) + { + case wiGraphics::MS: + args.push_back(L"ms_6_5"); + break; + case wiGraphics::AS: + args.push_back(L"as_6_5"); + break; + case wiGraphics::VS: + args.push_back(L"vs_6_5"); + break; + case wiGraphics::HS: + args.push_back(L"hs_6_5"); + break; + case wiGraphics::DS: + args.push_back(L"ds_6_5"); + break; + case wiGraphics::GS: + args.push_back(L"gs_6_5"); + break; + case wiGraphics::PS: + args.push_back(L"ps_6_5"); + break; + case wiGraphics::CS: + args.push_back(L"cs_6_5"); + break; + case wiGraphics::LIB: + args.push_back(L"lib_6_5"); + break; + default: + assert(0); + return; + } + + std::vector wstrings; + wstrings.reserve(input.defines.size() + input.include_directories.size()); + + for (auto& x : input.defines) + { + std::wstring& wstr = wstrings.emplace_back(); + wiHelper::StringConvert(x, wstr); + args.push_back(L"-D"); + args.push_back(wstr.c_str()); + } + + for (auto& x : input.include_directories) + { + std::wstring& wstr = wstrings.emplace_back(); + wiHelper::StringConvert(x, wstr); + args.push_back(L"-I"); + args.push_back(wstr.c_str()); + } + + // Entry point parameter: + std::wstring wentry; + wiHelper::StringConvert(input.entrypoint, wentry); + args.push_back(L"-E"); + args.push_back(wentry.c_str()); + + // Add source file name as last parameter. This will be displayed in error messages + std::wstring wsource; + wiHelper::StringConvert(wiHelper::GetFileNameFromPath(input.shadersourcefilename), wsource); + args.push_back(wsource.c_str()); + + DxcBuffer Source; + Source.Ptr = shadersourcedata.data(); + Source.Size = shadersourcedata.size(); + Source.Encoding = DXC_CP_ACP; + + struct IncludeHandler : public IDxcIncludeHandler + { + const CompilerInput* input = nullptr; + CompilerOutput* output = nullptr; + + HRESULT STDMETHODCALLTYPE LoadSource( + _In_z_ LPCWSTR pFilename, // Candidate filename. + _COM_Outptr_result_maybenull_ IDxcBlob** ppIncludeSource // Resultant source object for included file, nullptr if not found. + ) override + { + HRESULT hr = dxcIncludeHandler->LoadSource(pFilename, ppIncludeSource); + if (SUCCEEDED(hr)) + { + std::string& filename = output->dependencies.emplace_back(); + wiHelper::StringConvert(pFilename, filename); + } + return hr; + } + HRESULT STDMETHODCALLTYPE QueryInterface( + /* [in] */ REFIID riid, + /* [iid_is][out] */ _COM_Outptr_ void __RPC_FAR* __RPC_FAR* ppvObject) override + { + return dxcIncludeHandler->QueryInterface(riid, ppvObject); + } + + ULONG STDMETHODCALLTYPE AddRef(void) override + { + return 0; + } + ULONG STDMETHODCALLTYPE Release(void) override + { + return 0; + } + } includehandler; + includehandler.input = &input; + includehandler.output = &output; + + CComPtr pResults; + HRESULT hr = dxcCompiler->Compile( + &Source, // Source buffer. + args.data(), // Array of pointers to arguments. + (uint32_t)args.size(), // Number of arguments. + &includehandler, // User-provided interface to handle #include directives (optional). + IID_PPV_ARGS(&pResults) // Compiler output status, buffer, and errors. + ); + assert(SUCCEEDED(hr)); + + CComPtr pErrors = nullptr; + hr = pResults->GetOutput(DXC_OUT_ERRORS, IID_PPV_ARGS(&pErrors), nullptr); + assert(SUCCEEDED(hr)); + if (pErrors != nullptr && pErrors->GetStringLength() != 0) + { + output.error_message = pErrors->GetStringPointer(); + } + + HRESULT hrStatus; + hr = pResults->GetStatus(&hrStatus); + assert(SUCCEEDED(hr)); + if (FAILED(hrStatus)) + { + return; + } + + CComPtr pShader = nullptr; + hr = pResults->GetOutput(DXC_OUT_OBJECT, IID_PPV_ARGS(&pShader), nullptr); + assert(SUCCEEDED(hr)); + if (pShader != nullptr) + { + output.dependencies.push_back(input.shadersourcefilename); + output.shaderdata = (const uint8_t*)pShader->GetBufferPointer(); + output.shadersize = pShader->GetBufferSize(); + + // keep the blob alive == keep shader pointer valid! + auto internal_state = std::make_shared>(); + *internal_state = pShader; + output.internal_state = internal_state; + } + + if (input.format == wiGraphics::SHADERFORMAT_HLSL6) + { + CComPtr pHash = nullptr; + hr = pResults->GetOutput(DXC_OUT_SHADER_HASH, IID_PPV_ARGS(&pHash), nullptr); + assert(SUCCEEDED(hr)); + if (pHash != nullptr) + { + DxcShaderHash* pHashBuf = (DxcShaderHash*)pHash->GetBufferPointer(); + for (int i = 0; i < _countof(pHashBuf->HashDigest); i++) + { + output.shaderhash.push_back(pHashBuf->HashDigest[i]); + } + } + } + } +#endif // SHADERCOMPILER_ENABLED_DXCOMPILER + +#ifdef SHADERCOMPILER_ENABLED_D3DCOMPILER + using PFN_D3DCOMPILE = decltype(&D3DCompile); + PFN_D3DCOMPILE D3DCompile = nullptr; + void Compile_D3DCompiler(const CompilerInput& input, CompilerOutput& output) + { + if (D3DCompile == nullptr) + { + return; + } + + std::vector shadersourcedata; + if (!wiHelper::FileRead(input.shadersourcefilename, shadersourcedata)) + { + return; + } + + D3D_SHADER_MACRO defines[] = { + "HLSL5", "1", + "DISABLE_WAVE_INTRINSICS", "1", + NULL, NULL, + }; + + const char* target = nullptr; + switch (input.stage) + { + default: + case wiGraphics::MS: + case wiGraphics::AS: + case wiGraphics::LIB: + // not applicable + return; + case wiGraphics::VS: + target = "vs_5_0"; + break; + case wiGraphics::HS: + target = "hs_5_0"; + break; + case wiGraphics::DS: + target = "ds_5_0"; + break; + case wiGraphics::GS: + target = "gs_5_0"; + break; + case wiGraphics::PS: + target = "ps_5_0"; + break; + case wiGraphics::CS: + target = "cs_5_0"; + break; + } + + struct IncludeHandler : public ID3DInclude + { + const CompilerInput* input = nullptr; + CompilerOutput* output = nullptr; + std::vector> filedatas; + + HRESULT Open(D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID* ppData, UINT* pBytes) override + { + for (auto& x : input->include_directories) + { + std::string filename = x + pFileName; + if (!wiHelper::FileExists(filename)) + continue; + std::vector& filedata = filedatas.emplace_back(); + if (wiHelper::FileRead(filename, filedata)) + { + output->dependencies.push_back(filename); + *ppData = filedata.data(); + *pBytes = (UINT)filedata.size(); + return S_OK; + } + } + return E_FAIL; + } + + HRESULT Close(LPCVOID pData) override + { + return S_OK; + } + } includehandler; + includehandler.input = &input; + includehandler.output = &output; + + // https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/d3dcompile-constants + UINT Flags1 = 0; + if (input.flags & FLAG_DISABLE_OPTIMIZATION) + { + Flags1 |= D3DCOMPILE_SKIP_OPTIMIZATION; + } + + + CComPtr code; + CComPtr errors; + HRESULT hr = D3DCompile( + shadersourcedata.data(), + shadersourcedata.size(), + input.shadersourcefilename.c_str(), + defines, + &includehandler, //D3D_COMPILE_STANDARD_FILE_INCLUDE, + input.entrypoint.c_str(), + target, + Flags1, + 0, + &code, + &errors + ); + + if (errors) + { + output.error_message = (const char*)errors->GetBufferPointer(); + } + + if (SUCCEEDED(hr)) + { + output.dependencies.push_back(input.shadersourcefilename); + output.shaderdata = (const uint8_t*)code->GetBufferPointer(); + output.shadersize = code->GetBufferSize(); + + // keep the blob alive == keep shader pointer valid! + auto internal_state = std::make_shared>(); + *internal_state = code; + output.internal_state = internal_state; + } + } +#endif // SHADERCOMPILER_ENABLED_D3DCOMPILER + + void Initialize() + { +#ifdef SHADERCOMPILER_ENABLED_DXCOMPILER + HMODULE dxcompiler = wiLoadLibrary("dxcompiler.dll"); + if(dxcompiler != nullptr) + { + DxcCreateInstance = (DxcCreateInstanceProc)wiGetProcAddress(dxcompiler, "DxcCreateInstance"); + if (DxcCreateInstance != nullptr) + { + HRESULT hr = DxcCreateInstance(CLSID_DxcUtils, IID_PPV_ARGS(&dxcUtils)); + assert(SUCCEEDED(hr)); + hr = DxcCreateInstance(CLSID_DxcCompiler, IID_PPV_ARGS(&dxcCompiler)); + assert(SUCCEEDED(hr)); + hr = dxcUtils->CreateDefaultIncludeHandler(&dxcIncludeHandler); + assert(SUCCEEDED(hr)); + wiBackLog::post("wiShaderCompiler: loaded dxcompiler.dll"); + } + } +#endif // SHADERCOMPILER_ENABLED_DXCOMPILER + +#ifdef SHADERCOMPILER_ENABLED_D3DCOMPILER + HMODULE d3dcompiler = wiLoadLibrary("d3dcompiler_47.dll"); + if(d3dcompiler != nullptr) + { + D3DCompile = (PFN_D3DCOMPILE)wiGetProcAddress(d3dcompiler, "D3DCompile"); + if (D3DCompile != nullptr) + { + wiBackLog::post("wiShaderCompiler: loaded d3dcompiler_47.dll"); + } + } +#endif // SHADERCOMPILER_ENABLED_D3DCOMPILER + + } + + void Compile(const CompilerInput& input, CompilerOutput& output) + { + output = CompilerOutput(); + +#ifdef SHADERCOMPILER_ENABLED + switch (input.format) + { + default: + break; + +#ifdef SHADERCOMPILER_ENABLED_DXCOMPILER + case wiGraphics::SHADERFORMAT_HLSL6: + case wiGraphics::SHADERFORMAT_SPIRV: + Compile_DXCompiler(input, output); + break; +#endif // SHADERCOMPILER_ENABLED_DXCOMPILER + +#ifdef SHADERCOMPILER_ENABLED_D3DCOMPILER + case wiGraphics::SHADERFORMAT_HLSL5: + Compile_D3DCompiler(input, output); + break; +#endif // SHADERCOMPILER_ENABLED_D3DCOMPILER + + } +#endif // SHADERCOMPILER_ENABLED + } + + static const char* shadermetaextension = "wishadermeta"; + bool SaveShaderAndMetadata(const std::string& shaderfilename, const CompilerOutput& output) + { +#ifdef SHADERCOMPILER_ENABLED + wiHelper::DirectoryCreate(wiHelper::GetDirectoryFromPath(shaderfilename)); + + wiArchive dependencyLibrary(wiHelper::ReplaceExtension(shaderfilename, shadermetaextension), false); + if (dependencyLibrary.IsOpen()) + { + std::string rootdir = dependencyLibrary.GetSourceDirectory(); + std::vector dependencies = output.dependencies; + for (auto& x : dependencies) + { + wiHelper::MakePathRelative(rootdir, x); + } + dependencyLibrary << dependencies; + } + + if (wiHelper::FileWrite(shaderfilename, output.shaderdata, output.shadersize)) + { + return true; + } +#endif // SHADERCOMPILER_ENABLED + + return false; + } + bool IsShaderOutdated(const std::string& shaderfilename) + { +#ifdef SHADERCOMPILER_ENABLED + std::string filepath = shaderfilename; + wiHelper::MakePathAbsolute(filepath); + if (!wiHelper::FileExists(filepath)) + { + return true; // no shader file = outdated shader, apps can attempt to rebuild it + } + std::string dependencylibrarypath = wiHelper::ReplaceExtension(shaderfilename, shadermetaextension); + if (!wiHelper::FileExists(dependencylibrarypath)) + { + return false; // no metadata file = no dependency, up to date (for example packaged builds) + } + + const auto tim = std::filesystem::last_write_time(filepath); + + wiArchive dependencyLibrary(dependencylibrarypath); + if (dependencyLibrary.IsOpen()) + { + std::string rootdir = dependencyLibrary.GetSourceDirectory(); + std::vector dependencies; + dependencyLibrary >> dependencies; + + for (auto& x : dependencies) + { + std::string dependencypath = rootdir + x; + wiHelper::MakePathAbsolute(dependencypath); + if (wiHelper::FileExists(dependencypath)) + { + const auto dep_tim = std::filesystem::last_write_time(dependencypath); + + if (tim < dep_tim) + { + return true; + } + } + } + } +#endif // SHADERCOMPILER_ENABLED + + return false; + } + + std::mutex locker; + std::unordered_set registered_shaders; + void RegisterShader(const std::string& shaderfilename) + { +#ifdef SHADERCOMPILER_ENABLED + locker.lock(); + registered_shaders.insert(shaderfilename); + locker.unlock(); +#endif // SHADERCOMPILER_ENABLED + } + bool CheckRegisteredShadersOutdated() + { +#ifdef SHADERCOMPILER_ENABLED + for (auto& x : registered_shaders) + { + if (IsShaderOutdated(x)) + { + return true; + } + } +#endif // SHADERCOMPILER_ENABLED + return false; + } +} diff --git a/WickedEngine/wiShaderCompiler.h b/WickedEngine/wiShaderCompiler.h new file mode 100644 index 000000000..7aab08138 --- /dev/null +++ b/WickedEngine/wiShaderCompiler.h @@ -0,0 +1,44 @@ +#pragma once +#include "wiGraphics.h" + +#include +#include + +namespace wiShaderCompiler +{ + void Initialize(); + + enum FLAGS + { + FLAG_NONE = 0, + FLAG_DISABLE_OPTIMIZATION = 1 << 0, + }; + struct CompilerInput + { + uint64_t flags = FLAG_NONE; + wiGraphics::SHADERFORMAT format = wiGraphics::SHADERFORMAT::SHADERFORMAT_NONE; + wiGraphics::SHADERSTAGE stage = wiGraphics::SHADERSTAGE_COUNT; + std::string shadersourcefilename; + std::string entrypoint = "main"; + std::vector include_directories; + std::vector defines; + }; + struct CompilerOutput + { + std::shared_ptr internal_state; + inline bool IsValid() const { return internal_state.get() != nullptr; } + + const uint8_t* shaderdata = nullptr; + size_t shadersize = 0; + std::vector shaderhash; + std::string error_message; + std::vector dependencies; + }; + void Compile(const CompilerInput& input, CompilerOutput& output); + + bool SaveShaderAndMetadata(const std::string& shaderfilename, const CompilerOutput& output); + bool IsShaderOutdated(const std::string& shaderfilename); + + void RegisterShader(const std::string& shaderfilename); + bool CheckRegisteredShadersOutdated(); +} diff --git a/WickedEngine/wiTimer.cpp b/WickedEngine/wiTimer.cpp deleted file mode 100644 index 5d3dc1bf1..000000000 --- a/WickedEngine/wiTimer.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include "wiTimer.h" -#include "wiHelper.h" -#include "wiPlatform.h" - -#ifdef _WIN32 -static double PCFreq = 0; -static int64_t CounterStart = 0; -#else -#include -std::chrono::time_point CounterStart; -std::atomic_flag initialized = ATOMIC_FLAG_INIT; -#endif - -wiTimer::wiTimer() -{ -#ifdef _WIN32 - if(CounterStart==0) -#else - // does this CounterStart initialization need to be thread safe? - if (!initialized.test_and_set(std::memory_order_acquire)) -#endif - { - Start(); - } - record(); -} - - -wiTimer::~wiTimer() -{ -} - -void wiTimer::Start() -{ -#ifdef _WIN32 - LARGE_INTEGER li; - if(!QueryPerformanceFrequency(&li)) - wiHelper::messageBox("QueryPerformanceFrequency failed!\n"); - - PCFreq = double(li.QuadPart)/1000.0; - - QueryPerformanceCounter(&li); - CounterStart = li.QuadPart; -#else - CounterStart = std::chrono::high_resolution_clock::now(); -#endif // _WIN32 -} -double wiTimer::TotalTime() -{ -#ifdef _WIN32 - LARGE_INTEGER li; - QueryPerformanceCounter(&li); - return double(li.QuadPart-CounterStart)/PCFreq; -#else - auto now = std::chrono::high_resolution_clock::now(); - std::chrono::duration elapsed_seconds = now - CounterStart; - return elapsed_seconds.count(); -#endif // _WIN32 -} - -void wiTimer::record() -{ - lastTime = TotalTime(); -} -double wiTimer::elapsed() -{ - return TotalTime() - lastTime; -} \ No newline at end of file diff --git a/WickedEngine/wiTimer.h b/WickedEngine/wiTimer.h index b9aaa5727..5cd74a6e2 100644 --- a/WickedEngine/wiTimer.h +++ b/WickedEngine/wiTimer.h @@ -1,22 +1,40 @@ #pragma once #include "CommonInclude.h" -class wiTimer +#include + +struct wiTimer { -private: - double lastTime; -public: - wiTimer(); - ~wiTimer(); + std::chrono::high_resolution_clock::time_point timestamp; - /// Resets the start time of the engine clock to `now` - static void Start(); - /// Total time since the start of the engine clock in milliseconds - static double TotalTime(); + wiTimer() + { + record(); + } - /// Start recording - void record(); - /// Elapsed time since record() in milliseconds - double elapsed(); + // Record a reference timestamp + inline void record() + { + timestamp = std::chrono::high_resolution_clock::now(); + } + + // Elapsed time in seconds since the wiTimer creation or last call to record() + inline double elapsed_seconds() + { + auto timestamp2 = std::chrono::high_resolution_clock::now(); + std::chrono::duration time_span = std::chrono::duration_cast>(timestamp2 - timestamp); + return time_span.count(); + } + + // Elapsed time in milliseconds since the wiTimer creation or last call to record() + inline double elapsed_milliseconds() + { + return elapsed_seconds() * 1000.0; + } + + // Elapsed time in milliseconds since the wiTimer creation or last call to record() + inline double elapsed() + { + return elapsed_milliseconds(); + } }; - diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index b833a9df8..ac5eb6244 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -7,9 +7,9 @@ namespace wiVersion // main engine core const int major = 0; // minor features, major updates, breaking compatibility changes - const int minor = 54; + const int minor = 55; // minor bug fixes, alterations, refactors, updates - const int revision = 9; + const int revision = 0; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision); diff --git a/WickedEngine/wiWidget.cpp b/WickedEngine/wiWidget.cpp index 97695d363..1bef3e0b0 100644 --- a/WickedEngine/wiWidget.cpp +++ b/WickedEngine/wiWidget.cpp @@ -6,7 +6,7 @@ #include "wiHelper.h" #include "wiInput.h" #include "wiRenderer.h" -#include "ShaderInterop_Renderer.h" +#include "shaders/ShaderInterop_Renderer.h" #include "wiEvent.h" #include "wiBackLog.h" diff --git a/appveyor.yml b/appveyor.yml index 743e88ff1..d2fed0f8d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,13 +10,8 @@ before_build: - nuget restore build_script: - - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:Editor_Windows /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:Editor_UWP /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:Tests /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:Template_Windows /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:Template_UWP /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:Shaders_HLSL6 /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:Shaders_SPIRV /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:OfflineShaderCompiler /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + - msbuild "C:\projects\wickedengine\WickedEngine.sln" /t:rebuild /m /verbosity:minimal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" platform: - x64 @@ -24,12 +19,12 @@ platform: after_build: #Editor: - cmd: move %APPVEYOR_BUILD_FOLDER%\BUILD\%PLATFORM%\Release\Editor_Windows\Editor_Windows.exe %APPVEYOR_BUILD_FOLDER%\Editor - - cmd: xcopy C:\projects\wickedengine\WickedEngine\dxcompiler.dll %APPVEYOR_BUILD_FOLDER%\Editor - - cmd: 7z a WickedEngineEditor.zip WickedEngine\shaders\ images\ models\ scripts\ Documentation\ features.txt other_licenses.txt *.md Editor\*.exe Editor\images\ Editor\sound\ Editor\*.ini Editor\*.ico Editor\*.lua Editor\*.dll + - cmd: xcopy C:\projects\wickedengine\WickedEngine\*.dll %APPVEYOR_BUILD_FOLDER%\Editor + - cmd: 7z a WickedEngineEditor.zip Content\ features.txt other_licenses.txt *.md Editor\*.exe Editor\images\ Editor\sound\ Editor\*.ini Editor\*.ico Editor\*.lua Editor\*.dll #Tests: - cmd: move %APPVEYOR_BUILD_FOLDER%\BUILD\%PLATFORM%\Release\Tests\Tests.exe %APPVEYOR_BUILD_FOLDER%\Tests - - cmd: xcopy C:\projects\wickedengine\WickedEngine\dxcompiler.dll %APPVEYOR_BUILD_FOLDER%\Tests - - cmd: 7z a WickedEngineTests.zip WickedEngine\shaders\ images\ models\ scripts\ Documentation\ features.txt other_licenses.txt *.md Tests\*.exe Tests\images\ Tests\sound\ Tests\*.ini Tests\*.ico Tests\*.lua Tests\*.dll Tests\*.ttf + - cmd: xcopy C:\projects\wickedengine\WickedEngine\*.dll %APPVEYOR_BUILD_FOLDER%\Tests + - cmd: 7z a WickedEngineTests.zip Content\ features.txt other_licenses.txt *.md Tests\*.exe Tests\images\ Tests\sound\ Tests\*.ini Tests\*.ico Tests\*.lua Tests\*.dll Tests\*.ttf artifacts: - path: WickedEngineEditor.zip diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/Boden_baseColor.png b/models/drone/Assets/Models/PBR/BusterDrone/Materials/Boden_baseColor.png deleted file mode 100644 index 3088c65be..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/Boden_baseColor.png and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_AO.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_AO.jpg deleted file mode 100644 index dd6de8a9a..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_AO.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_albedo2048.png b/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_albedo2048.png deleted file mode 100644 index 7a8b6b230..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_albedo2048.png and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_emissive.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_emissive.jpg deleted file mode 100644 index f92addf1d..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_emissive.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_metalgloss2048_converted_metalRoughness.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_metalgloss2048_converted_metalRoughness.jpg deleted file mode 100644 index 33cc6246d..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_metalgloss2048_converted_metalRoughness.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_normal.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_normal.jpg deleted file mode 100644 index 5c45dd0aa..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/body_normal.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/concrete_044_metalGloss_converted_metalRoughness.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/concrete_044_metalGloss_converted_metalRoughness.jpg deleted file mode 100644 index 817302eca..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/concrete_044_metalGloss_converted_metalRoughness.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/concrete_044_normal1024.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/concrete_044_normal1024.jpg deleted file mode 100644 index 2fbef051e..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/concrete_044_normal1024.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_AO.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_AO.jpg deleted file mode 100644 index becf5b757..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_AO.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_albedo.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_albedo.jpg deleted file mode 100644 index 04f343e6e..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_albedo.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_metalgloss_converted_metalRoughness.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_metalgloss_converted_metalRoughness.jpg deleted file mode 100644 index 92737c39f..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_metalgloss_converted_metalRoughness.jpg and /dev/null differ diff --git a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_normal1024.jpg b/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_normal1024.jpg deleted file mode 100644 index 95f2f0c2f..000000000 Binary files a/models/drone/Assets/Models/PBR/BusterDrone/Materials/leg_normal1024.jpg and /dev/null differ diff --git a/models/drone/LICENSE.txt b/models/drone/LICENSE.txt deleted file mode 100644 index fbd36effd..000000000 --- a/models/drone/LICENSE.txt +++ /dev/null @@ -1,3 +0,0 @@ -Buster Drone by LaVADraGoN, published under a Creative Commons Attribution-NonCommercial license -https://sketchfab.com/models/294e79652f494130ad2ab00a13fdbafd -https://sketchfab.com/lavadragon diff --git a/models/drone/busterDrone.bin b/models/drone/busterDrone.bin deleted file mode 100644 index df0fab7cc..000000000 Binary files a/models/drone/busterDrone.bin and /dev/null differ diff --git a/models/drone/busterDrone.gltf b/models/drone/busterDrone.gltf deleted file mode 100644 index 0f6bc96de..000000000 --- a/models/drone/busterDrone.gltf +++ /dev/null @@ -1,5412 +0,0 @@ -{ - "asset": { - "generator": "Unity 2017.1.0f3", - "extras": { - "exporterVersion" : "2.2.0" - }, - "version": "2.0" - }, - "accessors": [ - { - "bufferView": 1, - "byteOffset": 0, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 0, - "componentType": 5126, - "count": 750, - "max": [ 0, -0.0001822602, 0.08908538 ], - "min": [ 0, -0.0001822602, 0.08908538 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 0, - "componentType": 5126, - "count": 750, - "max": [ 0.002427045, 1.000366, 0.03021261, 0.08733501 ], - "min": [ -0.002207713, 0.993937, -0.04774767, -0.1111431 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 9000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 3000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 18000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0, 0.4244588 ], - "min": [ 0, 0, -0.2127879 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 12000, - "componentType": 5126, - "count": 750, - "max": [ 8.310298E-17, 0.9998712, 8.310298E-17, 1.000782 ], - "min": [ -8.615463E-17, -0.8909349, -8.615463E-17, -1.000256 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 27000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 6000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 36000, - "componentType": 5126, - "count": 750, - "max": [ 0, -1, 0.9245392 ], - "min": [ -0.007664371, -1, -0.3441049 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 24000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0.4262442, 0, -0.9046318 ], - "min": [ 0, -0.4262021, 0, -1.000011 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 45000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 9000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 54000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0.882094, 0.1291005 ], - "min": [ -0.003101419, 0.001185679, -0.03354508 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 36000, - "componentType": 5126, - "count": 750, - "max": [ 0.8143287, 0.1497297, 0.07916846, -0.5725569 ], - "min": [ 0.613338, -0.1049753, -0.1337846, -0.7898206 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 63000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 12000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 72000, - "componentType": 5126, - "count": 750, - "max": [ -6.630018E-05, -0.05510501, 0.0009275053 ], - "min": [ -6.630018E-05, -0.05510501, 0.0009275053 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 48000, - "componentType": 5126, - "count": 750, - "max": [ 2.456129E-07, -0.6068264, 2.335603E-07, -0.6547233 ], - "min": [ -1.15384E-14, -0.755865, 6.620925E-15, -0.794871 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 81000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 15000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 90000, - "componentType": 5126, - "count": 750, - "max": [ 0, -4.080754E-07, 0 ], - "min": [ 0, -4.080754E-07, 0 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 60000, - "componentType": 5126, - "count": 750, - "max": [ 0.4789867, -0.520364, -0.1224985, -0.520364 ], - "min": [ 0.1224985, -0.6965602, -0.4789867, -0.6965602 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 99000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 18000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 108000, - "componentType": 5126, - "count": 750, - "max": [ -7.688589E-07, -0.2291589, -0.0002676699 ], - "min": [ -7.688589E-07, -0.2291589, -0.0002676699 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 72000, - "componentType": 5126, - "count": 750, - "max": [ -1.665335E-16, 0.1329681, -8.700765E-17, -0.9911497 ], - "min": [ -1.766288E-16, 4.110884E-07, -1.083812E-16, -1.000131 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 117000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 21000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 126000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0, 0 ], - "min": [ 0, 0, 0 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 84000, - "componentType": 5126, - "count": 750, - "max": [ 6.822332E-17, 0.9602609, 0.8192961, 3.292305E-17 ], - "min": [ 5.97496E-17, 0.5733753, 0.2799561, -1.173767E-17 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 135000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 24000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 144000, - "componentType": 5126, - "count": 750, - "max": [ -4.336809E-21, 3.388613E-07, -1.40361E-07 ], - "min": [ -4.336809E-21, 3.388613E-07, -1.40361E-07 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 96000, - "componentType": 5126, - "count": 750, - "max": [ 0.5891699, -1.51423E-23, 1.113817E-22, -0.8080092 ], - "min": [ -0.1025851, -8.571801E-23, 7.262958E-23, -0.9996066 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 153000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 27000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 162000, - "componentType": 5126, - "count": 750, - "max": [ -0.02415479, -0.04842291, 6.652139E-05 ], - "min": [ -0.02415479, -0.04842291, 6.652139E-05 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 108000, - "componentType": 5126, - "count": 750, - "max": [ -1.226862E-16, -0.6052145, 1.885047E-16, -0.6069627 ], - "min": [ -1.879873E-16, -0.794816, 1.232701E-16, -0.7962646 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 171000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 30000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 180000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0, 0 ], - "min": [ 0, 0, 0 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 120000, - "componentType": 5126, - "count": 750, - "max": [ 0.6196162, 3.738305E-17, 1.060157E-17, -0.7851169 ], - "min": [ -1.311745E-05, 3.469445E-17, -1.387831E-17, -1.000093 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 189000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 33000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 198000, - "componentType": 5126, - "count": 750, - "max": [ -2.689761E-05, -0.2291638, -0.0002693275 ], - "min": [ -2.689761E-05, -0.2291638, -0.0002693275 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 132000, - "componentType": 5126, - "count": 750, - "max": [ 3.897004E-16, 0.1305262, 2.000314E-16, -0.9914449 ], - "min": [ 3.722193E-16, -0.004921714, 1.508221E-16, -1.000113 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 207000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 36000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 216000, - "componentType": 5126, - "count": 750, - "max": [ -4.904936E-05, 2.971153E-05, 1.432228E-05 ], - "min": [ -4.904936E-05, 2.971153E-05, 1.432228E-05 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 144000, - "componentType": 5126, - "count": 750, - "max": [ -1.472347E-17, 0.9721925, 0.7984678, -4.138723E-17 ], - "min": [ -5.300077E-17, 0.6023844, 0.2352264, -6.561193E-17 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 225000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 39000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 234000, - "componentType": 5126, - "count": 750, - "max": [ 1.119105E-15, -2.19201E-08, 9.079605E-09 ], - "min": [ 1.119105E-15, -2.19201E-08, 9.079605E-09 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 156000, - "componentType": 5126, - "count": 750, - "max": [ 0.6483271, -3.472375E-09, -2.994581E-08, -0.7613619 ], - "min": [ -0.02493549, -3.147782E-08, -4.330516E-08, -1.00005 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 243000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 42000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 252000, - "componentType": 5126, - "count": 750, - "max": [ 0.0241548, -0.0484229, 6.640427E-05 ], - "min": [ 0.0241548, -0.0484229, 6.640427E-05 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 168000, - "componentType": 5126, - "count": 750, - "max": [ 3.796545E-16, 0.794871, 4.062624E-16, -0.6068264 ], - "min": [ 2.162163E-16, 0.6378229, 2.457059E-16, -0.7703635 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 261000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 45000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 270000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0, 0 ], - "min": [ 0, 0, 0 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 180000, - "componentType": 5126, - "count": 750, - "max": [ 0.5987881, -7.467847E-17, 1.669821E-18, -0.8009155 ], - "min": [ -0.01790858, -9.326168E-17, -5.583184E-17, -1.000218 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 279000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 48000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 288000, - "componentType": 5126, - "count": 750, - "max": [ -2.64456E-06, -0.2291594, -0.0002675325 ], - "min": [ -2.64456E-06, -0.2291594, -0.0002675325 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 192000, - "componentType": 5126, - "count": 750, - "max": [ -1.922774E-16, 0.1329676, -5.737797E-17, -0.9911498 ], - "min": [ -2.109172E-16, -0.1086994, -1.059632E-16, -1.000144 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 297000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 51000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 306000, - "componentType": 5126, - "count": 750, - "max": [ 4.460121E-05, 7.818745E-08, -5.186479E-07 ], - "min": [ 4.460121E-05, 7.818745E-08, -5.186479E-07 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 204000, - "componentType": 5126, - "count": 750, - "max": [ 4.963931E-17, 0.9718118, 0.7439401, 7.337548E-17 ], - "min": [ 9.946947E-18, 0.668269, 0.2369975, 5.497171E-17 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 315000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 54000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 324000, - "componentType": 5126, - "count": 750, - "max": [ -0.0001226816, 2.439422E-06, -2.562311E-06 ], - "min": [ -0.0001226816, 2.439422E-06, -2.562311E-06 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 216000, - "componentType": 5126, - "count": 750, - "max": [ 0.7083744, 7.463679E-18, 1.552036E-17, -0.7061624 ], - "min": [ -0.03814875, -4.930506E-18, 1.360381E-17, -1.000126 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 333000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 57000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 342000, - "componentType": 5126, - "count": 750, - "max": [ -0.199734, 0.2455685, 0.06007047 ], - "min": [ -0.199734, 0.2455685, 0.06007047 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 228000, - "componentType": 5126, - "count": 750, - "max": [ 0.6975557, 0.656417, -0.2655442, 0.6108752 ], - "min": [ 0.3563538, 0.2582944, -0.6584864, 0.1187559 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 351000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 60000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 360000, - "componentType": 5126, - "count": 750, - "max": [ 2.18893E-07, -0.3615515, 0.1096676 ], - "min": [ 2.18893E-07, -0.3615515, 0.1096676 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 240000, - "componentType": 5126, - "count": 750, - "max": [ 0.85576, 0.5956535, 0.8495459, 0.5956105 ], - "min": [ -0.8030718, -0.6300784, -0.8031282, -0.6346864 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 369000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 63000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 378000, - "componentType": 5126, - "count": 750, - "max": [ 0.199734, 0.2455685, 0.0600705 ], - "min": [ 0.199734, 0.2455685, 0.0600705 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 252000, - "componentType": 5126, - "count": 750, - "max": [ 0.6979917, -0.2968906, 0.6417745, 0.6108751 ], - "min": [ 0.3563536, -0.5844092, 0.3981122, 0.1131377 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 387000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 66000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 396000, - "componentType": 5126, - "count": 750, - "max": [ -5.165149E-07, -0.3615515, 0.1096674 ], - "min": [ -5.165149E-07, -0.3615515, 0.1096674 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 264000, - "componentType": 5126, - "count": 750, - "max": [ 0.8030718, 0.5956536, 0.8495458, 0.6346864 ], - "min": [ -0.8557601, -0.6300784, -0.8031282, -0.5956105 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 405000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 69000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 414000, - "componentType": 5126, - "count": 750, - "max": [ 0.0001574668, -0.07468031, -0.0008171735 ], - "min": [ 0.0001574668, -0.1132219, -0.0008171735 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 276000, - "componentType": 5126, - "count": 750, - "max": [ -4.203895E-45, 5.293956E-23, -8.271806E-23, -1 ], - "min": [ -4.203895E-45, 5.293956E-23, -8.271806E-23, -1 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 423000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 72000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 432000, - "componentType": 5126, - "count": 750, - "max": [ 0.2690617, -0.2652945, 0.007482 ], - "min": [ 0.1915843, -0.3118476, 0.007482 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 288000, - "componentType": 5126, - "count": 750, - "max": [ 0.1889661, 0.6813896, 0.1889661, -0.6813896 ], - "min": [ 0.1889661, 0.6813896, 0.1889661, -0.6813896 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 441000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 75000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 450000, - "componentType": 5126, - "count": 750, - "max": [ -0.006785003, -0.003750611, -0.01957866 ], - "min": [ -0.006785003, -0.003750611, -0.0498209 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 300000, - "componentType": 5126, - "count": 750, - "max": [ -1.214306E-17, -2.622506E-08, -1.249001E-16, -1 ], - "min": [ -1.214306E-17, -2.622506E-08, -1.249001E-16, -1 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 459000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 78000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 468000, - "componentType": 5126, - "count": 750, - "max": [ -0.0001078336, -0.07481337, -0.0008223113 ], - "min": [ -0.0001078336, -0.1131245, -0.0008223113 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 312000, - "componentType": 5126, - "count": 750, - "max": [ 3.186567E-06, 1.387772E-17, 2.081673E-17, -1 ], - "min": [ 3.186567E-06, 1.387772E-17, 2.081673E-17, -1 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 477000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 81000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 486000, - "componentType": 5126, - "count": 750, - "max": [ -0.1915843, -0.2652945, 0.007482 ], - "min": [ -0.2690617, -0.3118476, 0.007482 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 324000, - "componentType": 5126, - "count": 750, - "max": [ 0.1889661, -0.6813896, -0.1889661, -0.6813896 ], - "min": [ 0.1889661, -0.6813896, -0.1889661, -0.6813896 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 495000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 84000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 504000, - "componentType": 5126, - "count": 750, - "max": [ 0.006784976, -0.003758923, -0.01957707 ], - "min": [ 0.006784976, -0.003771764, -0.0498193 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 336000, - "componentType": 5126, - "count": 750, - "max": [ 0.0002122839, -2.747205E-08, -5.831958E-12, -1 ], - "min": [ 0.0002122839, -2.747205E-08, -5.831958E-12, -1 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 513000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 87000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 522000, - "componentType": 5126, - "count": 750, - "max": [ -0.0005688011, -0.07423943, -0.0008181962 ], - "min": [ -0.001401721, -0.1123666, -0.0008181962 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 348000, - "componentType": 5126, - "count": 750, - "max": [ 1.270258E-05, -3.925848E-06, -0.01092097, -0.9999404 ], - "min": [ 1.270258E-05, -3.925848E-06, -0.01092097, -0.9999404 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 531000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 90000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 540000, - "componentType": 5126, - "count": 750, - "max": [ 0.2848572, -0.08625174, -0.001446685 ], - "min": [ 0.2255686, -0.102431, -0.001446685 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 360000, - "componentType": 5126, - "count": 750, - "max": [ 0.09390989, 0.700843, 0.09390989, -0.7008431 ], - "min": [ 0.09390989, 0.700843, 0.09390989, -0.7008431 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 549000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 93000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 558000, - "componentType": 5126, - "count": 750, - "max": [ -0.2244218, -0.09648647, 0.0007695 ], - "min": [ -0.2837104, -0.1126658, 0.0007695 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 372000, - "componentType": 5126, - "count": 750, - "max": [ 0.09390989, -0.700843, -0.09390989, -0.7008431 ], - "min": [ 0.09390989, -0.700843, -0.09390989, -0.7008431 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 567000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 1, - "byteOffset": 96000, - "componentType": 5126, - "count": 750, - "max": [ 24.96667 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 5, - "byteOffset": 576000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0.3897655, 0.0307305 ], - "min": [ 0, 0.333458, 0.0307305 ], - "type": "VEC3" - }, - { - "bufferView": 6, - "byteOffset": 384000, - "componentType": 5126, - "count": 750, - "max": [ 0, 0, 0, -1 ], - "min": [ 0, 0, 0, -1 ], - "type": "VEC4" - }, - { - "bufferView": 5, - "byteOffset": 585000, - "componentType": 5126, - "count": 750, - "max": [ 1, 1, 1 ], - "min": [ 1, 1, 1 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 0, - "componentType": 5126, - "count": 7, - "max": [ 1.8, 1.558846, 0 ], - "min": [ -1.8, -1.558846, 0 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 84, - "componentType": 5126, - "count": 7, - "max": [ 0, 0, 1 ], - "min": [ 0, 0, 1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 0, - "componentType": 5126, - "count": 7, - "max": [ 1, 0.9330127 ], - "min": [ 0, 0.06698728 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 0, - "componentType": 5126, - "count": 7, - "max": [ -1, 0, 0, 1 ], - "min": [ -1, 0, 0, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 0, - "componentType": 5123, - "count": 18, - "max": [ 6 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 168, - "componentType": 5126, - "count": 1612, - "max": [ 0.24478, 0.406021, 0.322959 ], - "min": [ -0.24478, -0.39971, -0.437888 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 19512, - "componentType": 5126, - "count": 1612, - "max": [ 0.9999939, 1, 1 ], - "min": [ -0.9999939, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 56, - "componentType": 5126, - "count": 1612, - "max": [ 0.9494781, 0.99844 ], - "min": [ 0.05051517, 0.001159668 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 112, - "componentType": 5126, - "count": 1612, - "max": [ 1, 1, 1, 1 ], - "min": [ -1, -1, -1, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 36, - "componentType": 5123, - "count": 6642, - "max": [ 1611 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 38856, - "componentType": 5126, - "count": 210, - "max": [ 0.225052, 0.1611969, 0.1247347 ], - "min": [ -0.19017, -0.1674315, -0.000175753 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 41376, - "componentType": 5126, - "count": 210, - "max": [ 0.9999998, 0.980455, 0.971827 ], - "min": [ -0.9999999, -0.9752145, -0.9718173 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 12952, - "componentType": 5126, - "count": 210, - "max": [ 0.9865417, 0.998508 ], - "min": [ 0.6729279, 0.1425018 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 25904, - "componentType": 5126, - "count": 210, - "max": [ 0.9804638, 0.9914555, 0.9962763, 1 ], - "min": [ -0.7159477, -0.9986054, -0.9925234, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 13320, - "componentType": 5123, - "count": 858, - "max": [ 209 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 43896, - "componentType": 5126, - "count": 210, - "max": [ 0.19017, 0.1611827, 0.1246753 ], - "min": [ -0.225052, -0.1674488, -0.0001473001 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 46416, - "componentType": 5126, - "count": 210, - "max": [ 0.9999999, 0.9804183, 0.9717719 ], - "min": [ -0.9999998, -0.9752709, -0.9717621 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 14632, - "componentType": 5126, - "count": 210, - "max": [ 0.3270264, 0.998508 ], - "min": [ 0.013448, 0.1425018 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 29264, - "componentType": 5126, - "count": 210, - "max": [ 0.9804633, 0.9985842, 0.9924715, 1 ], - "min": [ -0.7158695, -0.9913966, -0.9962399, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 15036, - "componentType": 5123, - "count": 858, - "max": [ 209 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 48936, - "componentType": 5126, - "count": 61, - "max": [ 0.0342234, 0.03498384, 4.569215E-05 ], - "min": [ -0.0342234, -0.03498836, -0.0103678 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 49668, - "componentType": 5126, - "count": 61, - "max": [ 0.9253151, 0.9224125, -0.379199 ], - "min": [ -0.9253151, -0.9222466, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 16312, - "componentType": 5126, - "count": 61, - "max": [ 0.5171158, 0.4423835 ], - "min": [ 0.4826691, 0.4072731 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 32624, - "componentType": 5126, - "count": 61, - "max": [ 1, 0.2313477, 0.9253151, 1 ], - "min": [ 0.3791987, -0.2313477, -0.9253146, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 16752, - "componentType": 5123, - "count": 324, - "max": [ 60 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 50400, - "componentType": 5126, - "count": 60, - "max": [ 0.03158555, 0, 0.0273555 ], - "min": [ -0.03158555, -0.044893, -0.0273555 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 51120, - "componentType": 5126, - "count": 60, - "max": [ 0.9462689, 2.637716E-05, 0.9238765 ], - "min": [ -0.9462724, -0.9339421, -0.9238795 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 16800, - "componentType": 5126, - "count": 60, - "max": [ 0.979126, 0.6324005 ], - "min": [ 0.001107991, 0.2295837 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 33600, - "componentType": 5126, - "count": 60, - "max": [ 0.6874406, 0.8428617, 0.6680508, 1 ], - "min": [ -0.6873279, -1, -0.9905749, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 17400, - "componentType": 5123, - "count": 192, - "max": [ 59 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 51840, - "componentType": 5126, - "count": 1395, - "max": [ 0.3778172, 0.07368799, 0.2695874 ], - "min": [ -0.3778177, -0.7243865, -0.05318164 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 68580, - "componentType": 5126, - "count": 1395, - "max": [ 1, 0.9952673, 0.9994947 ], - "min": [ -1, -0.9998236, -0.9951036 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 17280, - "componentType": 5126, - "count": 1395, - "max": [ 0.9985809, 0.998433 ], - "min": [ 0.5876465, 0.001159668 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 34560, - "componentType": 5126, - "count": 1395, - "max": [ 0.9952114, 0.9953291, 0.995268, 1 ], - "min": [ -0.9951856, -0.9994931, -0.9998087, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 17784, - "componentType": 5123, - "count": 6768, - "max": [ 1394 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 85320, - "componentType": 5126, - "count": 1395, - "max": [ 0.3778175, 0.07368798, 0.2695872 ], - "min": [ -0.3778175, -0.7243865, -0.05318166 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 102060, - "componentType": 5126, - "count": 1395, - "max": [ 1, 0.9952673, 0.9994948 ], - "min": [ -1, -0.9998236, -0.9951036 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 28440, - "componentType": 5126, - "count": 1395, - "max": [ 0.4123383, 0.998535 ], - "min": [ 0.001408994, 0.001159668 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 56880, - "componentType": 5126, - "count": 1395, - "max": [ 0.9952117, 0.9994813, 0.9998236, 1 ], - "min": [ -0.9951865, -0.995329, -0.995268, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 31320, - "componentType": 5123, - "count": 6768, - "max": [ 1394 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 118800, - "componentType": 5126, - "count": 48, - "max": [ 0.2248145, 0.01017559, 0.05013367 ], - "min": [ -0.2248145, -0.01017559, -0.05013367 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 119376, - "componentType": 5126, - "count": 48, - "max": [ 0.9800401, 0.9815038, 0.009044793 ], - "min": [ -0.9800401, -0.9815108, -0.9692382 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 39600, - "componentType": 5126, - "count": 48, - "max": [ 0.7249146, 0.3701782 ], - "min": [ 0.6585999, 0.1679535 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 79200, - "componentType": 5126, - "count": 48, - "max": [ 0.7123751, 0.9862759, 1, 1 ], - "min": [ -0.7126795, -0.009900163, -0.9999636, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 44856, - "componentType": 5123, - "count": 198, - "max": [ 47 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 119952, - "componentType": 5126, - "count": 48, - "max": [ 0.2270307, 3.699253E-18, 0.0485455 ], - "min": [ -0.2225983, -0.02035117, -0.05172184 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 120528, - "componentType": 5126, - "count": 48, - "max": [ 0.9800401, 0.9815038, 0.009044793 ], - "min": [ -0.9800401, -0.9815108, -0.9692382 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 39984, - "componentType": 5126, - "count": 48, - "max": [ 0.3412857, 0.3702393 ], - "min": [ 0.2750702, 0.1679535 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 79968, - "componentType": 5126, - "count": 48, - "max": [ 0.7126813, 0.009261261, 0.9999576, 1 ], - "min": [ -0.7126824, -0.9864082, -1, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 45252, - "componentType": 5123, - "count": 198, - "max": [ 47 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 121104, - "componentType": 5126, - "count": 52, - "max": [ 0.0574268, 0.0767415, 0.1658355 ], - "min": [ -0.0574268, -0.0767415, -0.1658355 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 121728, - "componentType": 5126, - "count": 52, - "max": [ 0.980785, 0.9635562, 0.9807981 ], - "min": [ -0.980785, 0, -0.980782 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 40368, - "componentType": 5126, - "count": 52, - "max": [ 0.271965, 0.6553955 ], - "min": [ 0.1422615, 0.4577942 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 80736, - "componentType": 5126, - "count": 52, - "max": [ 0.9893762, 1, 0.7070311, 1 ], - "min": [ 0, -1, -0.7070323, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 45648, - "componentType": 5123, - "count": 198, - "max": [ 51 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 122352, - "componentType": 5126, - "count": 669, - "max": [ 0.02837897, 0.02837851, 0.03181236 ], - "min": [ -0.02837897, -0.02837851, -0.03181236 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 130380, - "componentType": 5126, - "count": 669, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 40784, - "componentType": 5126, - "count": 669, - "max": [ 0.9815063, 0.9824953 ], - "min": [ 0.01107788, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 81568, - "componentType": 5126, - "count": 669, - "max": [ 0.9702193, 0.970587, 1, 1 ], - "min": [ -0.970602, -0.9705845, -0.9334505, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 46044, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 138408, - "componentType": 5126, - "count": 1188, - "max": [ 0.323489, 0.050639, 0.323489 ], - "min": [ -0.323489, -0.050639, -0.323489 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 152664, - "componentType": 5126, - "count": 1188, - "max": [ 0.9985183, 1, 0.9985126 ], - "min": [ -0.9985119, -1, -0.9985096 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 46136, - "componentType": 5126, - "count": 1188, - "max": [ 0.4804153, 0.998583 ], - "min": [ 0.00147599, 0.001159668 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 92272, - "componentType": 5126, - "count": 1188, - "max": [ 1, 0.9975369, 0.9970924, 1 ], - "min": [ -1, -0.997546, -0.9971235, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 51516, - "componentType": 5123, - "count": 4896, - "max": [ 1187 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 166920, - "componentType": 5126, - "count": 182, - "max": [ 0.224968, 0.1608729, 0.07136616 ], - "min": [ -0.224887, -0.1678112, -0.0001542965 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 169104, - "componentType": 5126, - "count": 182, - "max": [ 0.9812499, 0.9804223, 0.9804222 ], - "min": [ -0.9812499, -0.9752632, -0.9717557 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 55640, - "componentType": 5126, - "count": 182, - "max": [ 0.9592133, 0.99847 ], - "min": [ 0.6585693, 0.1619263 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 111280, - "componentType": 5126, - "count": 182, - "max": [ 0.7045566, 0.9917732, 0.9958773, 1 ], - "min": [ -0.707352, -0.9957199, -0.9904792, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 61308, - "componentType": 5123, - "count": 684, - "max": [ 181 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 171288, - "componentType": 5126, - "count": 1188, - "max": [ 0.323489, 0.050639, 0.323489 ], - "min": [ -0.323489, -0.050639, -0.323489 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 185544, - "componentType": 5126, - "count": 1188, - "max": [ 0.9985097, 1, 0.9985119 ], - "min": [ -0.9985097, -1, -0.9985184 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 57096, - "componentType": 5126, - "count": 1188, - "max": [ 0.9985199, 0.998576 ], - "min": [ 0.519577, 0.001159668 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 114192, - "componentType": 5126, - "count": 1188, - "max": [ 0.9971603, 0.9975467, 1, 1 ], - "min": [ -0.9971235, -0.9975363, -1, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 62676, - "componentType": 5123, - "count": 4896, - "max": [ 1187 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 199800, - "componentType": 5126, - "count": 182, - "max": [ 0.224887, 0.1608729, 0.07136616 ], - "min": [ -0.224968, -0.1678112, -0.0001542957 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 201984, - "componentType": 5126, - "count": 182, - "max": [ 0.9812499, 0.9804223, 0.9804222 ], - "min": [ -0.9812499, -0.9752632, -0.9717557 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 66600, - "componentType": 5126, - "count": 182, - "max": [ 0.341423, 0.998464 ], - "min": [ 0.04077435, 0.1619263 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 133200, - "componentType": 5126, - "count": 182, - "max": [ 0.7036068, 0.9959815, 0.9902892, 1 ], - "min": [ -0.7036098, -0.9914064, -0.9961408, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 72468, - "componentType": 5123, - "count": 684, - "max": [ 181 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 204168, - "componentType": 5126, - "count": 13, - "max": [ 0.005205998, 0.005319043, 0.09527268 ], - "min": [ -0.005206102, -0.005325045, 0.09525611 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 204324, - "componentType": 5126, - "count": 13, - "max": [ 7.492515E-05, -0.001509482, 0.9999989 ], - "min": [ -7.492515E-05, -0.001575974, 0.9999988 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 68056, - "componentType": 5126, - "count": 13, - "max": [ 0.506985, 0.4584093 ], - "min": [ 0.4925998, 0.4437151 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 136112, - "componentType": 5126, - "count": 13, - "max": [ -0.9999986, 0.001682555, 0, 1 ], - "min": [ -1, -0.001682554, 0, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 73836, - "componentType": 5123, - "count": 36, - "max": [ 12 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 204480, - "componentType": 5126, - "count": 60, - "max": [ 0.05528402, 0.008937631, 0.0315855 ], - "min": [ -0.0007819413, -0.03956908, -0.0315855 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 205200, - "componentType": 5126, - "count": 60, - "max": [ 0.9203706, 0.0805215, 0.9462554 ], - "min": [ -0.9203649, -0.9591649, -0.9462554 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 68160, - "componentType": 5126, - "count": 60, - "max": [ 0.9979553, 0.997879 ], - "min": [ 0.1464958, 0.2284698 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 136320, - "componentType": 5126, - "count": 60, - "max": [ 0.6072828, 0.8828421, 0.6873251, 1 ], - "min": [ -0.9978405, -0.9962076, -0.6874207, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 73908, - "componentType": 5123, - "count": 192, - "max": [ 59 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 205920, - "componentType": 5126, - "count": 1513, - "max": [ 0.03942304, 0.01761774, 0.04033937 ], - "min": [ -0.03874104, -0.2201621, -0.0305044 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 224076, - "componentType": 5126, - "count": 1513, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 68640, - "componentType": 5126, - "count": 1513, - "max": [ 0.9980469, 0.998046 ], - "min": [ 0.001107991, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 137280, - "componentType": 5126, - "count": 1513, - "max": [ 1, 0.999999, 1, 1 ], - "min": [ -1, -1, -1, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 74292, - "componentType": 5123, - "count": 4872, - "max": [ 1512 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 242232, - "componentType": 5126, - "count": 60, - "max": [ 0.0007819413, 0.008937631, 0.0315855 ], - "min": [ -0.05528402, -0.03956908, -0.0315855 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 242952, - "componentType": 5126, - "count": 60, - "max": [ 0.9203649, 0.0805215, 0.9462554 ], - "min": [ -0.9203706, -0.9591649, -0.9462554 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 80744, - "componentType": 5126, - "count": 60, - "max": [ 0.5112, 0.997849 ], - "min": [ 0.001107991, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 161488, - "componentType": 5126, - "count": 60, - "max": [ 0.9978405, 0.8828694, 0.6873281, -1 ], - "min": [ -0.6072828, -0.9961947, -0.6873281, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 84036, - "componentType": 5123, - "count": 192, - "max": [ 59 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 243672, - "componentType": 5126, - "count": 669, - "max": [ 0.03181349, 0.0283791, 0.02837886 ], - "min": [ -0.0318131, -0.0283791, -0.02837886 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 251700, - "componentType": 5126, - "count": 669, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 81224, - "componentType": 5126, - "count": 669, - "max": [ 0.9978485, 0.997802 ], - "min": [ 0.005537987, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 162448, - "componentType": 5126, - "count": 669, - "max": [ 1, 0.9705442, 0.9702203, -1 ], - "min": [ -0.9335036, -0.9706133, -0.9705874, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 84420, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 259728, - "componentType": 5126, - "count": 669, - "max": [ 0.02805886, 0.02503127, 0.02503074 ], - "min": [ -0.02805873, -0.02503126, -0.02503074 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 267756, - "componentType": 5126, - "count": 669, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 86576, - "componentType": 5126, - "count": 669, - "max": [ 0.8618622, 0.997859 ], - "min": [ 0.03627777, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 173152, - "componentType": 5126, - "count": 669, - "max": [ 0.9334922, 0.9722588, 0.9702265, 1 ], - "min": [ -1, -0.9705852, -0.9702212, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 89892, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 275784, - "componentType": 5126, - "count": 669, - "max": [ 0.03181284, 0.0283791, 0.02837886 ], - "min": [ -0.03181284, -0.0283791, -0.02837886 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 283812, - "componentType": 5126, - "count": 669, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 91928, - "componentType": 5126, - "count": 669, - "max": [ 0.9878693, 0.998052 ], - "min": [ 0.03710842, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 183856, - "componentType": 5126, - "count": 669, - "max": [ 0.9334683, 0.9705771, 0.9702162, 1 ], - "min": [ -1, -0.9705809, -0.9705874, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 95364, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 291840, - "componentType": 5126, - "count": 1457, - "max": [ 0.03942156, 0.01761707, 0.04034045 ], - "min": [ -0.03874213, -0.2201625, -0.03050255 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 309324, - "componentType": 5126, - "count": 1457, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 97280, - "componentType": 5126, - "count": 1457, - "max": [ 0.9980469, 0.997937 ], - "min": [ 0.001107991, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 194560, - "componentType": 5126, - "count": 1457, - "max": [ 1, 0.9999987, 1, 1 ], - "min": [ -1, -1, -1, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 100836, - "componentType": 5123, - "count": 4872, - "max": [ 1456 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 326808, - "componentType": 5126, - "count": 1513, - "max": [ 0.0387385, 0.01761653, 0.04033954 ], - "min": [ -0.03944369, -0.2201689, -0.03050241 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 344964, - "componentType": 5126, - "count": 1513, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 108936, - "componentType": 5126, - "count": 1513, - "max": [ 0.9980469, 0.998052 ], - "min": [ 0.001107991, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 217872, - "componentType": 5126, - "count": 1513, - "max": [ 1, 0.9999995, 1, -1 ], - "min": [ -1, -1, -1, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 110580, - "componentType": 5123, - "count": 4872, - "max": [ 1512 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 363120, - "componentType": 5126, - "count": 1190, - "max": [ 0.06138557, 0.0797512, 0.02774057 ], - "min": [ -0.06140177, -0.1283705, -0.09091413 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 377400, - "componentType": 5126, - "count": 1190, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 121040, - "componentType": 5126, - "count": 1190, - "max": [ 0.982193, 0.997992 ], - "min": [ 0.001107991, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 242080, - "componentType": 5126, - "count": 1190, - "max": [ 1, 1, 0.9400139, 1 ], - "min": [ -0.9987873, -1, -0.9401721, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 120324, - "componentType": 5123, - "count": 4128, - "max": [ 1189 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 391680, - "componentType": 5126, - "count": 60, - "max": [ 0.02171982, -4.440892E-18, 0.02284182 ], - "min": [ -0.02171982, -0.08425638, -0.02284182 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 392400, - "componentType": 5126, - "count": 60, - "max": [ 0.9462745, 6.607881E-05, 0.9043506 ], - "min": [ -0.9462647, -0.9273981, -0.9043453 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 130560, - "componentType": 5126, - "count": 60, - "max": [ 0.5562744, 0.8839512 ], - "min": [ 0.2459145, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 261120, - "componentType": 5126, - "count": 60, - "max": [ 0.6873282, 0.8386658, 0.668024, 1 ], - "min": [ -0.6872953, -1, -0.9907766, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 128580, - "componentType": 5123, - "count": 192, - "max": [ 59 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 393120, - "componentType": 5126, - "count": 669, - "max": [ 0.02805903, 0.02499834, 0.02499776 ], - "min": [ -0.02805883, -0.02499834, -0.02499776 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 401148, - "componentType": 5126, - "count": 669, - "max": [ 1, 0.9987015, 0.9986975 ], - "min": [ -1, -0.9987034, -0.9986981 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 131040, - "componentType": 5126, - "count": 669, - "max": [ 0.9880219, 0.9815202 ], - "min": [ 0.03489208, 0.06452942 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 262080, - "componentType": 5126, - "count": 669, - "max": [ 0.9334853, 0.9695635, 0.9703966, 1 ], - "min": [ -1, -0.9705667, -0.9703559, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 128964, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 409176, - "componentType": 5126, - "count": 669, - "max": [ 0.02805923, 0.02503086, 0.02503032 ], - "min": [ -0.02805858, -0.02503084, -0.02503032 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 417204, - "componentType": 5126, - "count": 669, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 136392, - "componentType": 5126, - "count": 669, - "max": [ 0.975296, 0.997859 ], - "min": [ 0.04209328, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 272784, - "componentType": 5126, - "count": 669, - "max": [ 1, 0.9713106, 0.9702556, -1 ], - "min": [ -0.9334862, -0.9699295, -0.9702443, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 134436, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 425232, - "componentType": 5126, - "count": 669, - "max": [ 0.02805858, 0.02503017, 0.02503002 ], - "min": [ -0.02805861, -0.02503017, -0.02503002 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 433260, - "componentType": 5126, - "count": 669, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 141744, - "componentType": 5126, - "count": 669, - "max": [ 0.9977875, 0.997803 ], - "min": [ 0.01107788, 0.03849792 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 283488, - "componentType": 5126, - "count": 669, - "max": [ 1, 0.994266, 0.9702214, 1 ], - "min": [ -0.9334718, -0.990825, -0.9702499, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 139908, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 441288, - "componentType": 5126, - "count": 1190, - "max": [ 0.06134279, 0.07975265, 0.02774119 ], - "min": [ -0.06144484, -0.1283657, -0.09091433 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 455568, - "componentType": 5126, - "count": 1190, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 147096, - "componentType": 5126, - "count": 1190, - "max": [ 0.9694519, 0.997895 ], - "min": [ 0.001107991, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 294192, - "componentType": 5126, - "count": 1190, - "max": [ 1, 1, 0.9399397, 1 ], - "min": [ -0.9987858, -1, -0.9400918, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 145380, - "componentType": 5123, - "count": 4128, - "max": [ 1189 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 469848, - "componentType": 5126, - "count": 1190, - "max": [ 0.06143898, 0.07972114, 0.02773729 ], - "min": [ -0.06134866, -0.1283987, -0.09091575 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 484128, - "componentType": 5126, - "count": 1190, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 156616, - "componentType": 5126, - "count": 1190, - "max": [ 0.997818, 0.998035 ], - "min": [ 0.01107788, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 313232, - "componentType": 5126, - "count": 1190, - "max": [ 0.9987865, 1, 0.9400236, -1 ], - "min": [ -1, -1, -0.9401789, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 153636, - "componentType": 5123, - "count": 4128, - "max": [ 1189 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 498408, - "componentType": 5126, - "count": 60, - "max": [ 0.02171845, -3.348755E-16, 0.02284124 ], - "min": [ -0.02171845, -0.08425505, -0.02284124 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 499128, - "componentType": 5126, - "count": 60, - "max": [ 0.9462726, 1.421625E-05, 0.904348 ], - "min": [ -0.946271, -0.9274077, -0.9043461 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 166136, - "componentType": 5126, - "count": 60, - "max": [ 0.390419, 0.997994 ], - "min": [ 0.0299077, 0.2353973 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 332272, - "componentType": 5126, - "count": 60, - "max": [ 0.6873724, 0.8383176, 0.6680197, -1 ], - "min": [ -0.6873197, -1, -0.9907793, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 161892, - "componentType": 5123, - "count": 192, - "max": [ 59 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 499848, - "componentType": 5126, - "count": 1129, - "max": [ 0.06337585, 0.07272726, 0.02690483 ], - "min": [ -0.06352692, -0.2538535, -0.06740703 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 513396, - "componentType": 5126, - "count": 1129, - "max": [ 1, 1, 1 ], - "min": [ -1, -0.7994152, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 166616, - "componentType": 5126, - "count": 1129, - "max": [ 0.9979858, 0.998053 ], - "min": [ 0.001107991, 0.05429077 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 333232, - "componentType": 5126, - "count": 1129, - "max": [ 1, 1, 0.9911262, 1 ], - "min": [ -0.9422597, -1, -0.9911619, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 162276, - "componentType": 5123, - "count": 3792, - "max": [ 1128 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 526944, - "componentType": 5126, - "count": 60, - "max": [ 0.02237324, -5.258825E-17, 0.02284106 ], - "min": [ -0.02237324, -0.08501057, -0.02284106 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 527664, - "componentType": 5126, - "count": 60, - "max": [ 0.9460495, 0.02067333, 0.9043525 ], - "min": [ -0.9460511, -0.9307564, -0.9043438 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 175648, - "componentType": 5126, - "count": 60, - "max": [ 0.8822327, 0.997994 ], - "min": [ 0.1495399, 0.4477997 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 351296, - "componentType": 5126, - "count": 60, - "max": [ 0.6721427, 0.8432909, 0.6680242, 1 ], - "min": [ -0.7022257, -0.9997656, -0.9907799, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 169860, - "componentType": 5123, - "count": 192, - "max": [ 59 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 528384, - "componentType": 5126, - "count": 669, - "max": [ 0.02814357, 0.0250244, 0.02502994 ], - "min": [ -0.02814361, -0.0250244, -0.02502994 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 536412, - "componentType": 5126, - "count": 669, - "max": [ 0.9997606, 0.9997621, 1 ], - "min": [ -0.9997609, -0.9997619, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 176128, - "componentType": 5126, - "count": 669, - "max": [ 0.9501038, 0.9767532 ], - "min": [ 0.005815983, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 352256, - "componentType": 5126, - "count": 669, - "max": [ 0.999797, 0.9957144, 0.9705922, 1 ], - "min": [ -0.9410478, -0.9917389, -0.9702489, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 170244, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 544440, - "componentType": 5126, - "count": 669, - "max": [ 0.02805893, 0.02503038, 0.02502994 ], - "min": [ -0.02805885, -0.02503038, -0.02502994 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 552468, - "componentType": 5126, - "count": 669, - "max": [ 1, 1, 1 ], - "min": [ -1, -1, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 181480, - "componentType": 5126, - "count": 669, - "max": [ 0.9980011, 0.998042 ], - "min": [ 0.02326155, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 362960, - "componentType": 5126, - "count": 669, - "max": [ 1, 0.9943187, 0.9702228, -1 ], - "min": [ -0.9334785, -0.9914351, -0.9705958, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 175716, - "componentType": 5123, - "count": 2736, - "max": [ 668 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 560496, - "componentType": 5126, - "count": 1129, - "max": [ 0.0627695, 0.07331781, 0.02713858 ], - "min": [ -0.06410318, -0.2539361, -0.06804128 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 574044, - "componentType": 5126, - "count": 1129, - "max": [ 0.9997622, 0.9998813, 0.9998815 ], - "min": [ -0.9997615, -0.8040515, -0.9998798 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 186832, - "componentType": 5126, - "count": 1129, - "max": [ 0.9719543, 0.998053 ], - "min": [ 0.001107991, 0.0448761 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 373664, - "componentType": 5126, - "count": 1129, - "max": [ 0.9998878, 0.9998813, 0.9891241, 1 ], - "min": [ -0.9491938, -0.9998811, -0.9929336, 1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 181188, - "componentType": 5123, - "count": 3792, - "max": [ 1128 ], - "min": [ 0 ], - "type": "SCALAR" - }, - { - "bufferView": 3, - "byteOffset": 587592, - "componentType": 5126, - "count": 1129, - "max": [ 0.06334109, 0.07281197, 0.0269023 ], - "min": [ -0.06356159, -0.2538665, -0.06741055 ], - "type": "VEC3" - }, - { - "bufferView": 3, - "byteOffset": 601140, - "componentType": 5126, - "count": 1129, - "max": [ 0.9999979, 0.9999977, 1 ], - "min": [ -0.9999979, -0.8000316, -1 ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 195864, - "componentType": 5126, - "count": 1129, - "max": [ 0.9763794, 0.998053 ], - "min": [ 0.001107991, 0.001113892 ], - "type": "VEC2" - }, - { - "bufferView": 4, - "byteOffset": 391728, - "componentType": 5126, - "count": 1129, - "max": [ 0.942606, 0.9999979, 0.9911152, -1 ], - "min": [ -0.9999985, -0.9999979, -0.9911324, -1 ], - "type": "VEC4" - }, - { - "bufferView": 0, - "byteOffset": 188772, - "componentType": 5123, - "count": 3792, - "max": [ 1128 ], - "min": [ 0 ], - "type": "SCALAR" - } - ], - "animations": [ - { - "name": "busterDrone", - "channels": [ - { - "sampler": 0, - "target": { - "node": 28, - "path": "translation" - } - }, - { - "sampler": 1, - "target": { - "node": 28, - "path": "rotation" - } - }, - { - "sampler": 2, - "target": { - "node": 28, - "path": "scale" - } - }, - { - "sampler": 3, - "target": { - "node": 2, - "path": "translation" - } - }, - { - "sampler": 4, - "target": { - "node": 2, - "path": "rotation" - } - }, - { - "sampler": 5, - "target": { - "node": 2, - "path": "scale" - } - }, - { - "sampler": 6, - "target": { - "node": 6, - "path": "translation" - } - }, - { - "sampler": 7, - "target": { - "node": 6, - "path": "rotation" - } - }, - { - "sampler": 8, - "target": { - "node": 6, - "path": "scale" - } - }, - { - "sampler": 9, - "target": { - "node": 7, - "path": "translation" - } - }, - { - "sampler": 10, - "target": { - "node": 7, - "path": "rotation" - } - }, - { - "sampler": 11, - "target": { - "node": 7, - "path": "scale" - } - }, - { - "sampler": 12, - "target": { - "node": 23, - "path": "translation" - } - }, - { - "sampler": 13, - "target": { - "node": 23, - "path": "rotation" - } - }, - { - "sampler": 14, - "target": { - "node": 23, - "path": "scale" - } - }, - { - "sampler": 15, - "target": { - "node": 30, - "path": "translation" - } - }, - { - "sampler": 16, - "target": { - "node": 30, - "path": "rotation" - } - }, - { - "sampler": 17, - "target": { - "node": 30, - "path": "scale" - } - }, - { - "sampler": 18, - "target": { - "node": 33, - "path": "translation" - } - }, - { - "sampler": 19, - "target": { - "node": 33, - "path": "rotation" - } - }, - { - "sampler": 20, - "target": { - "node": 33, - "path": "scale" - } - }, - { - "sampler": 21, - "target": { - "node": 37, - "path": "translation" - } - }, - { - "sampler": 22, - "target": { - "node": 37, - "path": "rotation" - } - }, - { - "sampler": 23, - "target": { - "node": 37, - "path": "scale" - } - }, - { - "sampler": 24, - "target": { - "node": 45, - "path": "translation" - } - }, - { - "sampler": 25, - "target": { - "node": 45, - "path": "rotation" - } - }, - { - "sampler": 26, - "target": { - "node": 45, - "path": "scale" - } - }, - { - "sampler": 27, - "target": { - "node": 32, - "path": "translation" - } - }, - { - "sampler": 28, - "target": { - "node": 32, - "path": "rotation" - } - }, - { - "sampler": 29, - "target": { - "node": 32, - "path": "scale" - } - }, - { - "sampler": 30, - "target": { - "node": 36, - "path": "translation" - } - }, - { - "sampler": 31, - "target": { - "node": 36, - "path": "rotation" - } - }, - { - "sampler": 32, - "target": { - "node": 36, - "path": "scale" - } - }, - { - "sampler": 33, - "target": { - "node": 40, - "path": "translation" - } - }, - { - "sampler": 34, - "target": { - "node": 40, - "path": "rotation" - } - }, - { - "sampler": 35, - "target": { - "node": 40, - "path": "scale" - } - }, - { - "sampler": 36, - "target": { - "node": 43, - "path": "translation" - } - }, - { - "sampler": 37, - "target": { - "node": 43, - "path": "rotation" - } - }, - { - "sampler": 38, - "target": { - "node": 43, - "path": "scale" - } - }, - { - "sampler": 39, - "target": { - "node": 50, - "path": "translation" - } - }, - { - "sampler": 40, - "target": { - "node": 50, - "path": "rotation" - } - }, - { - "sampler": 41, - "target": { - "node": 50, - "path": "scale" - } - }, - { - "sampler": 42, - "target": { - "node": 34, - "path": "translation" - } - }, - { - "sampler": 43, - "target": { - "node": 34, - "path": "rotation" - } - }, - { - "sampler": 44, - "target": { - "node": 34, - "path": "scale" - } - }, - { - "sampler": 45, - "target": { - "node": 35, - "path": "translation" - } - }, - { - "sampler": 46, - "target": { - "node": 35, - "path": "rotation" - } - }, - { - "sampler": 47, - "target": { - "node": 35, - "path": "scale" - } - }, - { - "sampler": 48, - "target": { - "node": 39, - "path": "translation" - } - }, - { - "sampler": 49, - "target": { - "node": 39, - "path": "rotation" - } - }, - { - "sampler": 50, - "target": { - "node": 39, - "path": "scale" - } - }, - { - "sampler": 51, - "target": { - "node": 42, - "path": "translation" - } - }, - { - "sampler": 52, - "target": { - "node": 42, - "path": "rotation" - } - }, - { - "sampler": 53, - "target": { - "node": 42, - "path": "scale" - } - }, - { - "sampler": 54, - "target": { - "node": 49, - "path": "translation" - } - }, - { - "sampler": 55, - "target": { - "node": 49, - "path": "rotation" - } - }, - { - "sampler": 56, - "target": { - "node": 49, - "path": "scale" - } - }, - { - "sampler": 57, - "target": { - "node": 18, - "path": "translation" - } - }, - { - "sampler": 58, - "target": { - "node": 18, - "path": "rotation" - } - }, - { - "sampler": 59, - "target": { - "node": 18, - "path": "scale" - } - }, - { - "sampler": 60, - "target": { - "node": 26, - "path": "translation" - } - }, - { - "sampler": 61, - "target": { - "node": 26, - "path": "rotation" - } - }, - { - "sampler": 62, - "target": { - "node": 26, - "path": "scale" - } - }, - { - "sampler": 63, - "target": { - "node": 19, - "path": "translation" - } - }, - { - "sampler": 64, - "target": { - "node": 19, - "path": "rotation" - } - }, - { - "sampler": 65, - "target": { - "node": 19, - "path": "scale" - } - }, - { - "sampler": 66, - "target": { - "node": 24, - "path": "translation" - } - }, - { - "sampler": 67, - "target": { - "node": 24, - "path": "rotation" - } - }, - { - "sampler": 68, - "target": { - "node": 24, - "path": "scale" - } - }, - { - "sampler": 69, - "target": { - "node": 38, - "path": "translation" - } - }, - { - "sampler": 70, - "target": { - "node": 38, - "path": "rotation" - } - }, - { - "sampler": 71, - "target": { - "node": 38, - "path": "scale" - } - }, - { - "sampler": 72, - "target": { - "node": 15, - "path": "translation" - } - }, - { - "sampler": 73, - "target": { - "node": 15, - "path": "rotation" - } - }, - { - "sampler": 74, - "target": { - "node": 15, - "path": "scale" - } - }, - { - "sampler": 75, - "target": { - "node": 27, - "path": "translation" - } - }, - { - "sampler": 76, - "target": { - "node": 27, - "path": "rotation" - } - }, - { - "sampler": 77, - "target": { - "node": 27, - "path": "scale" - } - }, - { - "sampler": 78, - "target": { - "node": 44, - "path": "translation" - } - }, - { - "sampler": 79, - "target": { - "node": 44, - "path": "rotation" - } - }, - { - "sampler": 80, - "target": { - "node": 44, - "path": "scale" - } - }, - { - "sampler": 81, - "target": { - "node": 14, - "path": "translation" - } - }, - { - "sampler": 82, - "target": { - "node": 14, - "path": "rotation" - } - }, - { - "sampler": 83, - "target": { - "node": 14, - "path": "scale" - } - }, - { - "sampler": 84, - "target": { - "node": 25, - "path": "translation" - } - }, - { - "sampler": 85, - "target": { - "node": 25, - "path": "rotation" - } - }, - { - "sampler": 86, - "target": { - "node": 25, - "path": "scale" - } - }, - { - "sampler": 87, - "target": { - "node": 46, - "path": "translation" - } - }, - { - "sampler": 88, - "target": { - "node": 46, - "path": "rotation" - } - }, - { - "sampler": 89, - "target": { - "node": 46, - "path": "scale" - } - }, - { - "sampler": 90, - "target": { - "node": 21, - "path": "translation" - } - }, - { - "sampler": 91, - "target": { - "node": 21, - "path": "rotation" - } - }, - { - "sampler": 92, - "target": { - "node": 21, - "path": "scale" - } - }, - { - "sampler": 93, - "target": { - "node": 20, - "path": "translation" - } - }, - { - "sampler": 94, - "target": { - "node": 20, - "path": "rotation" - } - }, - { - "sampler": 95, - "target": { - "node": 20, - "path": "scale" - } - }, - { - "sampler": 96, - "target": { - "node": 22, - "path": "translation" - } - }, - { - "sampler": 97, - "target": { - "node": 22, - "path": "rotation" - } - }, - { - "sampler": 98, - "target": { - "node": 22, - "path": "scale" - } - } - ], - "samplers": [ - { - "input": 0, - "interpolation": "LINEAR", - "output": 1 - }, - { - "input": 0, - "interpolation": "LINEAR", - "output": 2 - }, - { - "input": 0, - "interpolation": "LINEAR", - "output": 3 - }, - { - "input": 4, - "interpolation": "LINEAR", - "output": 5 - }, - { - "input": 4, - "interpolation": "LINEAR", - "output": 6 - }, - { - "input": 4, - "interpolation": "LINEAR", - "output": 7 - }, - { - "input": 8, - "interpolation": "LINEAR", - "output": 9 - }, - { - "input": 8, - "interpolation": "LINEAR", - "output": 10 - }, - { - "input": 8, - "interpolation": "LINEAR", - "output": 11 - }, - { - "input": 12, - "interpolation": "LINEAR", - "output": 13 - }, - { - "input": 12, - "interpolation": "LINEAR", - "output": 14 - }, - { - "input": 12, - "interpolation": "LINEAR", - "output": 15 - }, - { - "input": 16, - "interpolation": "LINEAR", - "output": 17 - }, - { - "input": 16, - "interpolation": "LINEAR", - "output": 18 - }, - { - "input": 16, - "interpolation": "LINEAR", - "output": 19 - }, - { - "input": 20, - "interpolation": "LINEAR", - "output": 21 - }, - { - "input": 20, - "interpolation": "LINEAR", - "output": 22 - }, - { - "input": 20, - "interpolation": "LINEAR", - "output": 23 - }, - { - "input": 24, - "interpolation": "LINEAR", - "output": 25 - }, - { - "input": 24, - "interpolation": "LINEAR", - "output": 26 - }, - { - "input": 24, - "interpolation": "LINEAR", - "output": 27 - }, - { - "input": 28, - "interpolation": "LINEAR", - "output": 29 - }, - { - "input": 28, - "interpolation": "LINEAR", - "output": 30 - }, - { - "input": 28, - "interpolation": "LINEAR", - "output": 31 - }, - { - "input": 32, - "interpolation": "LINEAR", - "output": 33 - }, - { - "input": 32, - "interpolation": "LINEAR", - "output": 34 - }, - { - "input": 32, - "interpolation": "LINEAR", - "output": 35 - }, - { - "input": 36, - "interpolation": "LINEAR", - "output": 37 - }, - { - "input": 36, - "interpolation": "LINEAR", - "output": 38 - }, - { - "input": 36, - "interpolation": "LINEAR", - "output": 39 - }, - { - "input": 40, - "interpolation": "LINEAR", - "output": 41 - }, - { - "input": 40, - "interpolation": "LINEAR", - "output": 42 - }, - { - "input": 40, - "interpolation": "LINEAR", - "output": 43 - }, - { - "input": 44, - "interpolation": "LINEAR", - "output": 45 - }, - { - "input": 44, - "interpolation": "LINEAR", - "output": 46 - }, - { - "input": 44, - "interpolation": "LINEAR", - "output": 47 - }, - { - "input": 48, - "interpolation": "LINEAR", - "output": 49 - }, - { - "input": 48, - "interpolation": "LINEAR", - "output": 50 - }, - { - "input": 48, - "interpolation": "LINEAR", - "output": 51 - }, - { - "input": 52, - "interpolation": "LINEAR", - "output": 53 - }, - { - "input": 52, - "interpolation": "LINEAR", - "output": 54 - }, - { - "input": 52, - "interpolation": "LINEAR", - "output": 55 - }, - { - "input": 56, - "interpolation": "LINEAR", - "output": 57 - }, - { - "input": 56, - "interpolation": "LINEAR", - "output": 58 - }, - { - "input": 56, - "interpolation": "LINEAR", - "output": 59 - }, - { - "input": 60, - "interpolation": "LINEAR", - "output": 61 - }, - { - "input": 60, - "interpolation": "LINEAR", - "output": 62 - }, - { - "input": 60, - "interpolation": "LINEAR", - "output": 63 - }, - { - "input": 64, - "interpolation": "LINEAR", - "output": 65 - }, - { - "input": 64, - "interpolation": "LINEAR", - "output": 66 - }, - { - "input": 64, - "interpolation": "LINEAR", - "output": 67 - }, - { - "input": 68, - "interpolation": "LINEAR", - "output": 69 - }, - { - "input": 68, - "interpolation": "LINEAR", - "output": 70 - }, - { - "input": 68, - "interpolation": "LINEAR", - "output": 71 - }, - { - "input": 72, - "interpolation": "LINEAR", - "output": 73 - }, - { - "input": 72, - "interpolation": "LINEAR", - "output": 74 - }, - { - "input": 72, - "interpolation": "LINEAR", - "output": 75 - }, - { - "input": 76, - "interpolation": "LINEAR", - "output": 77 - }, - { - "input": 76, - "interpolation": "LINEAR", - "output": 78 - }, - { - "input": 76, - "interpolation": "LINEAR", - "output": 79 - }, - { - "input": 80, - "interpolation": "LINEAR", - "output": 81 - }, - { - "input": 80, - "interpolation": "LINEAR", - "output": 82 - }, - { - "input": 80, - "interpolation": "LINEAR", - "output": 83 - }, - { - "input": 84, - "interpolation": "LINEAR", - "output": 85 - }, - { - "input": 84, - "interpolation": "LINEAR", - "output": 86 - }, - { - "input": 84, - "interpolation": "LINEAR", - "output": 87 - }, - { - "input": 88, - "interpolation": "LINEAR", - "output": 89 - }, - { - "input": 88, - "interpolation": "LINEAR", - "output": 90 - }, - { - "input": 88, - "interpolation": "LINEAR", - "output": 91 - }, - { - "input": 92, - "interpolation": "LINEAR", - "output": 93 - }, - { - "input": 92, - "interpolation": "LINEAR", - "output": 94 - }, - { - "input": 92, - "interpolation": "LINEAR", - "output": 95 - }, - { - "input": 96, - "interpolation": "LINEAR", - "output": 97 - }, - { - "input": 96, - "interpolation": "LINEAR", - "output": 98 - }, - { - "input": 96, - "interpolation": "LINEAR", - "output": 99 - }, - { - "input": 100, - "interpolation": "LINEAR", - "output": 101 - }, - { - "input": 100, - "interpolation": "LINEAR", - "output": 102 - }, - { - "input": 100, - "interpolation": "LINEAR", - "output": 103 - }, - { - "input": 104, - "interpolation": "LINEAR", - "output": 105 - }, - { - "input": 104, - "interpolation": "LINEAR", - "output": 106 - }, - { - "input": 104, - "interpolation": "LINEAR", - "output": 107 - }, - { - "input": 108, - "interpolation": "LINEAR", - "output": 109 - }, - { - "input": 108, - "interpolation": "LINEAR", - "output": 110 - }, - { - "input": 108, - "interpolation": "LINEAR", - "output": 111 - }, - { - "input": 112, - "interpolation": "LINEAR", - "output": 113 - }, - { - "input": 112, - "interpolation": "LINEAR", - "output": 114 - }, - { - "input": 112, - "interpolation": "LINEAR", - "output": 115 - }, - { - "input": 116, - "interpolation": "LINEAR", - "output": 117 - }, - { - "input": 116, - "interpolation": "LINEAR", - "output": 118 - }, - { - "input": 116, - "interpolation": "LINEAR", - "output": 119 - }, - { - "input": 120, - "interpolation": "LINEAR", - "output": 121 - }, - { - "input": 120, - "interpolation": "LINEAR", - "output": 122 - }, - { - "input": 120, - "interpolation": "LINEAR", - "output": 123 - }, - { - "input": 124, - "interpolation": "LINEAR", - "output": 125 - }, - { - "input": 124, - "interpolation": "LINEAR", - "output": 126 - }, - { - "input": 124, - "interpolation": "LINEAR", - "output": 127 - }, - { - "input": 128, - "interpolation": "LINEAR", - "output": 129 - }, - { - "input": 128, - "interpolation": "LINEAR", - "output": 130 - }, - { - "input": 128, - "interpolation": "LINEAR", - "output": 131 - } - ] - } - ], - "buffers": [ - { - "byteLength": 2514732, - "uri": "busterDrone.bin" - } - ], - "bufferViews": [ - { - "buffer": 0, - "byteLength": 196356, - "target": 34963, - "byteOffset": 1328376 - }, - { - "buffer": 0, - "byteLength": 99000, - "byteOffset": 0 - }, - { - "buffer": 0, - "byteLength": 204896, - "target": 34962, - "byteStride": 8, - "byteOffset": 99000 - }, - { - "buffer": 0, - "byteLength": 614688, - "target": 34962, - "byteStride": 12, - "byteOffset": 303896 - }, - { - "buffer": 0, - "byteLength": 409792, - "target": 34962, - "byteStride": 16, - "byteOffset": 918584 - }, - { - "buffer": 0, - "byteLength": 594000, - "byteStride": 12, - "byteOffset": 1524732 - }, - { - "buffer": 0, - "byteLength": 396000, - "byteStride": 16, - "byteOffset": 2118732 - } - ], - "images": [ - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/Boden_baseColor.png" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/concrete_044_metalGloss_converted_metalRoughness.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/concrete_044_normal1024.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/body_albedo2048.png" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/body_metalgloss2048_converted_metalRoughness.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/body_normal.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/body_emissive.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/body_AO.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/leg_albedo.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/leg_metalgloss_converted_metalRoughness.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/leg_normal1024.jpg" - }, - { - "uri": "Assets/Models/PBR/BusterDrone/Materials/leg_AO.jpg" - } - ], - "materials": [ - { - "pbrMetallicRoughness": { - "baseColorTexture" : { - "index" : 0, - "texCoord" : 0 - }, - "baseColorFactor": [0.9117647, 0.9117647, 0.9117647, 1], - "metallicRoughnessTexture" : { - "index" : 1, - "texCoord" : 0 - }, - "metallicFactor": 1, - "roughnessFactor": 1 - }, - "alphaMode": "BLEND", - "alphaCutoff": 0.5, - "normalTexture" : { - "index" : 2, - "texCoord" : 0, - "scale" : 1 - }, - "emissiveFactor": [0, 0, 0], - "doubleSided": false, - "name": "concrete_044_basecolor" - }, - { - "pbrMetallicRoughness": { - "baseColorTexture" : { - "index" : 3, - "texCoord" : 0 - }, - "baseColorFactor": [0.8235294, 0.8235294, 0.8235294, 1], - "metallicRoughnessTexture" : { - "index" : 4, - "texCoord" : 0 - }, - "metallicFactor": 1, - "roughnessFactor": 1 - }, - "alphaMode": "MASK", - "alphaCutoff": 0.87, - "normalTexture" : { - "index" : 5, - "texCoord" : 0, - "scale" : 1 - }, - "emissiveTexture" : { - "index" : 6, - "texCoord" : 0 - }, - "emissiveFactor": [1, 1, 1], - "occlusionTexture" : { - "index" : 7, - "texCoord" : 0, - "strength" : 1 - }, - "doubleSided": false, - "name": "body_albedo" - }, - { - "pbrMetallicRoughness": { - "baseColorTexture" : { - "index" : 8, - "texCoord" : 0 - }, - "baseColorFactor": [0.8, 0.8, 0.8, 1], - "metallicRoughnessTexture" : { - "index" : 9, - "texCoord" : 0 - }, - "metallicFactor": 1, - "roughnessFactor": 1 - }, - "normalTexture" : { - "index" : 10, - "texCoord" : 0, - "scale" : 1 - }, - "emissiveFactor": [0, 0, 0], - "occlusionTexture" : { - "index" : 11, - "texCoord" : 0, - "strength" : 1 - }, - "doubleSided": false, - "name": "leg_albedo" - } - ], - "meshes": [ - { - "name": "mesh_Scheibe_11558Scheibe", - "primitives": [ - { - "attributes": { - "POSITION": 132, - "NORMAL": 133, - "TEXCOORD_0": 134, - "TANGENT": 135 - }, - "indices": 136, - "material": 0, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Body_11482Drone_Body", - "primitives": [ - { - "attributes": { - "POSITION": 137, - "NORMAL": 138, - "TEXCOORD_0": 139, - "TANGENT": 140 - }, - "indices": 141, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Gen_L_11484Drone_Gen_L", - "primitives": [ - { - "attributes": { - "POSITION": 142, - "NORMAL": 143, - "TEXCOORD_0": 144, - "TANGENT": 145 - }, - "indices": 146, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Gen_R_11486Drone_Gen_R", - "primitives": [ - { - "attributes": { - "POSITION": 147, - "NORMAL": 148, - "TEXCOORD_0": 149, - "TANGENT": 150 - }, - "indices": 151, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_ILens_11490Drone_ILens", - "primitives": [ - { - "attributes": { - "POSITION": 152, - "NORMAL": 153, - "TEXCOORD_0": 154, - "TANGENT": 155 - }, - "indices": 156, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_leg_F_11492Drone_leg_F", - "primitives": [ - { - "attributes": { - "POSITION": 157, - "NORMAL": 158, - "TEXCOORD_0": 159, - "TANGENT": 160 - }, - "indices": 161, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Turb_M_L_11506Drone_Turb_M_L", - "primitives": [ - { - "attributes": { - "POSITION": 162, - "NORMAL": 163, - "TEXCOORD_0": 164, - "TANGENT": 165 - }, - "indices": 166, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Turb_M_R_11508Drone_Turb_M_R", - "primitives": [ - { - "attributes": { - "POSITION": 167, - "NORMAL": 168, - "TEXCOORD_0": 169, - "TANGENT": 170 - }, - "indices": 171, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_UPanel_L_11510Drone_UPanel_L", - "primitives": [ - { - "attributes": { - "POSITION": 172, - "NORMAL": 173, - "TEXCOORD_0": 174, - "TANGENT": 175 - }, - "indices": 176, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_UPanel_R_11512Drone_UPanel_R", - "primitives": [ - { - "attributes": { - "POSITION": 177, - "NORMAL": 178, - "TEXCOORD_0": 179, - "TANGENT": 180 - }, - "indices": 181, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_UPart_11514Drone_UPart", - "primitives": [ - { - "attributes": { - "POSITION": 182, - "NORMAL": 183, - "TEXCOORD_0": 184, - "TANGENT": 185 - }, - "indices": 186, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_F_P1_G_11516F_P1_G", - "primitives": [ - { - "attributes": { - "POSITION": 187, - "NORMAL": 188, - "TEXCOORD_0": 189, - "TANGENT": 190 - }, - "indices": 191, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Turb_Blade_R_11504Drone_Turb_Blade_R", - "primitives": [ - { - "attributes": { - "POSITION": 192, - "NORMAL": 193, - "TEXCOORD_0": 194, - "TANGENT": 195 - }, - "indices": 196, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Panel_L_11498Drone_Panel_L", - "primitives": [ - { - "attributes": { - "POSITION": 197, - "NORMAL": 198, - "TEXCOORD_0": 199, - "TANGENT": 200 - }, - "indices": 201, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Turb_Blade_L_11502Drone_Turb_Blade_L", - "primitives": [ - { - "attributes": { - "POSITION": 202, - "NORMAL": 203, - "TEXCOORD_0": 204, - "TANGENT": 205 - }, - "indices": 206, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_Panel_R_11500Drone_Panel_R", - "primitives": [ - { - "attributes": { - "POSITION": 207, - "NORMAL": 208, - "TEXCOORD_0": 209, - "TANGENT": 210 - }, - "indices": 211, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_IEye_11488Drone_IEye", - "primitives": [ - { - "attributes": { - "POSITION": 212, - "NORMAL": 213, - "TEXCOORD_0": 214, - "TANGENT": 215 - }, - "indices": 216, - "material": 1, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_leg_L_11494Drone_leg_L", - "primitives": [ - { - "attributes": { - "POSITION": 217, - "NORMAL": 218, - "TEXCOORD_0": 219, - "TANGENT": 220 - }, - "indices": 221, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_F_P2_11518F_P2", - "primitives": [ - { - "attributes": { - "POSITION": 222, - "NORMAL": 223, - "TEXCOORD_0": 224, - "TANGENT": 225 - }, - "indices": 226, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_Drone_leg_R_11496Drone_leg_R", - "primitives": [ - { - "attributes": { - "POSITION": 227, - "NORMAL": 228, - "TEXCOORD_0": 229, - "TANGENT": 230 - }, - "indices": 231, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_R_P1_G_11544R_P1_G", - "primitives": [ - { - "attributes": { - "POSITION": 232, - "NORMAL": 233, - "TEXCOORD_0": 234, - "TANGENT": 235 - }, - "indices": 236, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_F_P3_G_11520F_P3_G", - "primitives": [ - { - "attributes": { - "POSITION": 237, - "NORMAL": 238, - "TEXCOORD_0": 239, - "TANGENT": 240 - }, - "indices": 241, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_L_P1_G_11530L_P1_G", - "primitives": [ - { - "attributes": { - "POSITION": 242, - "NORMAL": 243, - "TEXCOORD_0": 244, - "TANGENT": 245 - }, - "indices": 246, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_L_P2_11532L_P2", - "primitives": [ - { - "attributes": { - "POSITION": 247, - "NORMAL": 248, - "TEXCOORD_0": 249, - "TANGENT": 250 - }, - "indices": 251, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_R_P2_11546R_P2", - "primitives": [ - { - "attributes": { - "POSITION": 252, - "NORMAL": 253, - "TEXCOORD_0": 254, - "TANGENT": 255 - }, - "indices": 256, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_F_P4_11522F_P4", - "primitives": [ - { - "attributes": { - "POSITION": 257, - "NORMAL": 258, - "TEXCOORD_0": 259, - "TANGENT": 260 - }, - "indices": 261, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_F_P5_M_11524F_P5_M", - "primitives": [ - { - "attributes": { - "POSITION": 262, - "NORMAL": 263, - "TEXCOORD_0": 264, - "TANGENT": 265 - }, - "indices": 266, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_L_P3_G_11534L_P3_G", - "primitives": [ - { - "attributes": { - "POSITION": 267, - "NORMAL": 268, - "TEXCOORD_0": 269, - "TANGENT": 270 - }, - "indices": 271, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_R_P3_G_11548R_P3_G", - "primitives": [ - { - "attributes": { - "POSITION": 272, - "NORMAL": 273, - "TEXCOORD_0": 274, - "TANGENT": 275 - }, - "indices": 276, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_F_P6_G_11526F_P6_G", - "primitives": [ - { - "attributes": { - "POSITION": 277, - "NORMAL": 278, - "TEXCOORD_0": 279, - "TANGENT": 280 - }, - "indices": 281, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_L_P4_11536L_P4", - "primitives": [ - { - "attributes": { - "POSITION": 282, - "NORMAL": 283, - "TEXCOORD_0": 284, - "TANGENT": 285 - }, - "indices": 286, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_R_P4_11550R_P4", - "primitives": [ - { - "attributes": { - "POSITION": 287, - "NORMAL": 288, - "TEXCOORD_0": 289, - "TANGENT": 290 - }, - "indices": 291, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_R_P5_M_11552R_P5_M", - "primitives": [ - { - "attributes": { - "POSITION": 292, - "NORMAL": 293, - "TEXCOORD_0": 294, - "TANGENT": 295 - }, - "indices": 296, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_F_P7_11528F_P7", - "primitives": [ - { - "attributes": { - "POSITION": 297, - "NORMAL": 298, - "TEXCOORD_0": 299, - "TANGENT": 300 - }, - "indices": 301, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_L_P5_M_11538L_P5_M", - "primitives": [ - { - "attributes": { - "POSITION": 302, - "NORMAL": 303, - "TEXCOORD_0": 304, - "TANGENT": 305 - }, - "indices": 306, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_L_P6_G_11540L_P6_G", - "primitives": [ - { - "attributes": { - "POSITION": 307, - "NORMAL": 308, - "TEXCOORD_0": 309, - "TANGENT": 310 - }, - "indices": 311, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_R_P6_G_11554R_P6_G", - "primitives": [ - { - "attributes": { - "POSITION": 312, - "NORMAL": 313, - "TEXCOORD_0": 314, - "TANGENT": 315 - }, - "indices": 316, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_L_P7_11542L_P7", - "primitives": [ - { - "attributes": { - "POSITION": 317, - "NORMAL": 318, - "TEXCOORD_0": 319, - "TANGENT": 320 - }, - "indices": 321, - "material": 2, - "mode": 4 - } - ] - }, - { - "name": "mesh_R_P7_11556R_P7", - "primitives": [ - { - "attributes": { - "POSITION": 322, - "NORMAL": 323, - "TEXCOORD_0": 324, - "TANGENT": 325 - }, - "indices": 326, - "material": 2, - "mode": 4 - } - ] - } - ], - "nodes": [ - { - "name": "UnityGlTF_root", - "children": [ - 1 - ] - }, - { - "name": "node_busterDrone_-6112", - "children": [ - 2, - 3 - ], - "matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] - }, - { - "name": "node_Drone_Controller_-6118", - "children": [ - 6, - 7 - ] - }, - { - "name": "node_Env_-6120", - "children": [ - 4, - 5 - ] - }, - { - "name": "node_Himmel_-6122" - }, - { - "name": "node_Scheibe_-6124", - "mesh": 0, - "translation": [ 0, -0.9899999, -6.123234E-17], - "rotation": [0.5, -0.5, -0.5, -0.5] - }, - { - "name": "node_Turbine_Controller_-6126", - "children": [ - 8, - 9 - ], - "translation": [ 0, -1, 0.05] - }, - { - "name": "node_U_MassPoint_-6128", - "children": [ - 10, - 11 - ], - "translation": [ 0, 0.001185679, 0.1291005], - "rotation": [0.613338, 0, 0, -0.7898206] - }, - { - "name": "node_Turbine_L_-6132", - "translation": [ 0.122448, 0, 0.0100702], - "rotation": [0.7071068, 0, 0, -0.7071068] - }, - { - "name": "node_Turbine_R_-6134", - "translation": [ -0.122448, 0, 0.0100702], - "rotation": [0.7071068, 0, 0, -0.7071068] - }, - { - "name": "node_D_MassPoint_-6140", - "children": [ - 13 - ], - "translation": [ 0, -1.776357E-17, -0.775] - }, - { - "name": "node_Eye_Controller_-6142", - "children": [ - 12 - ], - "translation": [ 0, 1.430729, -0.5863673], - "rotation": [0.01733113, 0, 0, -0.9998499] - }, - { - "name": "node_Eye_Pupil_-6148", - "rotation": [-0.7071068, 0, 0, -0.7071068] - }, - { - "name": "node_Drone_Body_-6152", - "mesh": 1, - "children": [ - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22 - ], - "translation": [ 0, 0, 0.375], - "rotation": [-0.7071068, 0, 0, -0.7071068] - }, - { - "name": "node_Drone_Gen_L_-6166", - "mesh": 2, - "children": [ - 25 - ], - "translation": [ -0.1923713, -0.2657673, 0.007482], - "rotation": [0.1889661, -0.6813896, -0.1889661, -0.6813896] - }, - { - "name": "node_Drone_Gen_R_-6168", - "mesh": 3, - "children": [ - 27 - ], - "translation": [ 0.1923713, -0.2657673, 0.007482], - "rotation": [0.1889661, 0.6813896, 0.1889661, -0.6813896] - }, - { - "name": "node_Drone_ILens_-6170", - "mesh": 4, - "children": [ - 28 - ], - "translation": [ 0, -0.1496581, -0.4150517] - }, - { - "name": "node_Drone_leg_F_-6172", - "mesh": 5, - "children": [ - 23 - ], - "translation": [ 0, -0.386808, -0.2001195] - }, - { - "name": "node_Drone_Turb_M_L_-6174", - "mesh": 6, - "children": [ - 26 - ], - "translation": [ -0.199734, 0.2455685, 0.06007047], - "rotation": [-0.3577203, -0.552178, 0.4416999, -0.6099483] - }, - { - "name": "node_Drone_Turb_M_R_-6176", - "mesh": 7, - "children": [ - 24 - ], - "translation": [ 0.199734, 0.2455685, 0.0600705], - "rotation": [-0.3577201, 0.5521781, -0.4417, -0.6099481] - }, - { - "name": "node_Drone_UPanel_L_-6178", - "mesh": 8, - "translation": [ -0.2244218, -0.09648647, 0.0007695], - "rotation": [0.09390989, -0.700843, -0.09390989, -0.7008431] - }, - { - "name": "node_Drone_UPanel_R_-6180", - "mesh": 9, - "translation": [ 0.2255686, -0.08625174, -0.001446685], - "rotation": [0.09390989, 0.700843, 0.09390989, -0.7008431] - }, - { - "name": "node_Drone_UPart_-6182", - "mesh": 10, - "translation": [ 0, 0.3347655, 0.0307305] - }, - { - "name": "node_F_P1_G_-6186", - "mesh": 11, - "children": [ - 30 - ], - "translation": [ -6.630018E-05, -0.05510501, 0.0009275053], - "rotation": [-9.46243E-15, -0.7071066, 9.462424E-15, -0.7071071] - }, - { - "name": "node_Drone_Turb_Blade_R_-6192", - "mesh": 12, - "translation": [ -5.165149E-07, -0.3615515, 0.1096674], - "rotation": [0.8032024, 7.971404E-08, 8.618087E-08, -0.5957063] - }, - { - "name": "node_Drone_Panel_L_-6196", - "mesh": 13, - "children": [ - 29 - ], - "translation": [ 0.006784976, -0.003758924, -0.01957707] - }, - { - "name": "node_Drone_Turb_Blade_L_-6200", - "mesh": 14, - "translation": [ 2.18893E-07, -0.3615515, 0.1096676], - "rotation": [0.8032024, 9.71064E-09, 3.426186E-08, -0.5957063] - }, - { - "name": "node_Drone_Panel_R_-6204", - "mesh": 15, - "children": [ - 31 - ], - "translation": [ -0.006785003, -0.003750611, -0.01957866] - }, - { - "name": "node_Drone_IEye_-6216", - "mesh": 16, - "translation": [ 0, -0.0001822602, 0.08908538], - "rotation": [-6.147455E-17, 0.9998635, -0.01652483, -1.414905E-17] - }, - { - "name": "node_Drone_leg_L_-6220", - "mesh": 17, - "children": [ - 34 - ], - "translation": [ -0.1288695, -0.09610797, 0.007292901], - "rotation": [-0.410619, 0.5756666, 0.410619, -0.5756666] - }, - { - "name": "node_F_P2_-6228", - "mesh": 18, - "children": [ - 33 - ], - "rotation": [0.4777144, -0.5213338, -0.4777144, -0.5213338] - }, - { - "name": "node_Drone_leg_R_-6268", - "mesh": 19, - "children": [ - 32 - ], - "translation": [ 0.1288695, -0.096108, 0.007292902], - "rotation": [-0.410619, -0.5756666, -0.410619, -0.5756666] - }, - { - "name": "node_R_P1_G_-6276", - "mesh": 20, - "children": [ - 36 - ], - "translation": [ -0.02415479, -0.04842291, 6.652139E-05], - "rotation": [-1.874628E-16, -0.7933533, 1.238692E-16, -0.6087614] - }, - { - "name": "node_F_P3_G_-6284", - "mesh": 21, - "children": [ - 37 - ], - "translation": [ -7.688589E-07, -0.2291589, -0.0002676699] - }, - { - "name": "node_L_P1_G_-6290", - "mesh": 22, - "children": [ - 35 - ], - "translation": [ 0.0241548, -0.0484229, 6.640427E-05], - "rotation": [2.559129E-16, 0.7613461, 3.70116E-16, -0.6483456] - }, - { - "name": "node_L_P2_-6306", - "mesh": 23, - "children": [ - 39 - ], - "rotation": [0.5984765, -7.469944E-17, -5.580278E-17, -0.8011404] - }, - { - "name": "node_R_P2_-6318", - "mesh": 24, - "children": [ - 40 - ], - "rotation": [0.6187881, 3.584192E-17, 1.056672E-17, -0.7855579] - }, - { - "name": "node_F_P4_-6322", - "mesh": 25, - "children": [ - 38 - ], - "rotation": [-5.975759E-17, -0.5735765, -0.8191521, -3.290818E-17] - }, - { - "name": "node_F_P5_M_-6330", - "mesh": 26, - "children": [ - 41 - ], - "translation": [ 0.0001574668, -0.1128276, -0.0008171735] - }, - { - "name": "node_L_P3_G_-6342", - "mesh": 27, - "children": [ - 42 - ], - "translation": [ -2.64456E-06, -0.2291594, -0.0002675325] - }, - { - "name": "node_R_P3_G_-6350", - "mesh": 28, - "children": [ - 43 - ], - "translation": [ -2.689761E-05, -0.2291638, -0.0002693275] - }, - { - "name": "node_F_P6_G_-6354", - "mesh": 29, - "children": [ - 45 - ], - "translation": [ -5.422236E-05, -0.09326162, 0.0008217943] - }, - { - "name": "node_L_P4_-6362", - "mesh": 30, - "children": [ - 46 - ], - "translation": [ 4.460121E-05, 7.818745E-08, -5.186479E-07], - "rotation": [-9.99001E-18, -0.6686969, -0.7435351, -7.33685E-17] - }, - { - "name": "node_R_P4_-6366", - "mesh": 31, - "children": [ - 44 - ], - "translation": [ -4.904936E-05, 2.971153E-05, 1.432228E-05], - "rotation": [1.478805E-17, -0.6030816, -0.7976795, 6.558266E-17] - }, - { - "name": "node_R_P5_M_-6378", - "mesh": 32, - "children": [ - 48 - ], - "translation": [ -0.0001078336, -0.112859, -0.0008223113] - }, - { - "name": "node_F_P7_-6386", - "mesh": 33, - "rotation": [0.5891699, -8.571801E-23, 7.262958E-23, -0.8080092] - }, - { - "name": "node_L_P5_M_-6394", - "mesh": 34, - "children": [ - 47 - ], - "translation": [ -0.0005688011, -0.1123666, -0.0008181962], - "rotation": [1.270258E-05, -3.925848E-06, -0.01092097, -0.9999404] - }, - { - "name": "node_L_P6_G_-6402", - "mesh": 35, - "children": [ - 49 - ], - "translation": [ -0.001434437, -0.09371054, 0.00081997] - }, - { - "name": "node_R_P6_G_-6410", - "mesh": 36, - "children": [ - 50 - ], - "translation": [ 5.793714E-05, -0.09326017, 0.0008199706] - }, - { - "name": "node_L_P7_-6428", - "mesh": 37, - "translation": [ -0.0001226816, 2.439422E-06, -2.562311E-06], - "rotation": [0.7071068, -4.906539E-18, 1.471962E-17, -0.7071068] - }, - { - "name": "node_R_P7_-6436", - "mesh": 38, - "rotation": [0.6483271, -3.472375E-09, -4.330499E-08, -0.7613619] - } - ], - "samplers": [ - { - "magFilter": 9729, - "minFilter": 9985, - "wrapS": 10497, - "wrapT": 10497 - } - ], - "scenes": [ - { - "name":"defaultScene", - "nodes": [ - 0 - ] - } - ], - "scene": 0, - "textures": [ - { - "sampler": 0, - "source": 0 - }, - { - "sampler": 0, - "source": 1 - }, - { - "sampler": 0, - "source": 2 - }, - { - "sampler": 0, - "source": 3 - }, - { - "sampler": 0, - "source": 4 - }, - { - "sampler": 0, - "source": 5 - }, - { - "sampler": 0, - "source": 6 - }, - { - "sampler": 0, - "source": 7 - }, - { - "sampler": 0, - "source": 8 - }, - { - "sampler": 0, - "source": 9 - }, - { - "sampler": 0, - "source": 10 - }, - { - "sampler": 0, - "source": 11 - } - ] -} \ No newline at end of file