From fa267b0e7d0c25156e810a811a47d1e7e020f76e Mon Sep 17 00:00:00 2001 From: Turanszki Janos Date: Thu, 12 Dec 2019 22:15:16 +0000 Subject: [PATCH] large refactor --- Documentation/ScriptingAPI-Documentation.md | 11 - Documentation/WickedEngine-Documentation.md | 2 +- Editor/AnimationWindow.cpp | 14 +- Editor/CameraWindow.cpp | 16 +- Editor/CameraWindow.h | 4 +- Editor/DecalWindow.cpp | 6 +- Editor/Editor.cpp | 128 ++- Editor/Editor.h | 10 +- Editor/EmitterWindow.cpp | 12 +- Editor/EmitterWindow.h | 2 +- Editor/EnvProbeWindow.cpp | 12 +- Editor/ForceFieldWindow.cpp | 14 +- Editor/HairParticleWindow.cpp | 10 +- Editor/HairParticleWindow.h | 2 +- Editor/LightWindow.cpp | 38 +- Editor/LightWindow.h | 2 +- Editor/MaterialWindow.cpp | 98 +-- Editor/MeshWindow.cpp | 34 +- Editor/ModelImporter.h | 6 +- Editor/ModelImporter_GLTF.cpp | 18 +- Editor/ModelImporter_OBJ.cpp | 12 +- Editor/ObjectWindow.cpp | 28 +- Editor/OceanWindow.cpp | 50 +- Editor/PostprocessWindow.cpp | 3 +- Editor/SoundWindow.cpp | 8 +- Editor/Translator.cpp | 6 +- Editor/Translator.h | 2 +- Editor/WeatherWindow.cpp | 22 +- Editor/WeatherWindow.h | 2 +- Editor/main.cpp | 2 +- README.md | 14 +- Template_Windows/main.cpp | 11 +- Tests/Tests.cpp | 34 +- Tests/main.cpp | 2 +- WickedEngine.sln | 14 +- WickedEngine/ArchiveVersionHistory.txt | 1 + WickedEngine/CommonInclude.h | 1 + WickedEngine/MainComponent.cpp | 20 +- WickedEngine/MainComponent.h | 14 +- WickedEngine/MainComponent_BindLua.cpp | 12 - WickedEngine/MainComponent_BindLua.h | 1 - WickedEngine/Platform.h | 13 - WickedEngine/RenderPath.h | 2 - WickedEngine/RenderPath2D.cpp | 1 - WickedEngine/RenderPath2D_BindLua.cpp | 2 - WickedEngine/RenderPath3D.cpp | 6 +- WickedEngine/RenderPath3D.h | 9 +- WickedEngine/RenderPath3D_BindLua.cpp | 21 - WickedEngine/RenderPath3D_BindLua.h | 1 - .../RenderPath3D_Deferred_BindLua.cpp | 2 - WickedEngine/RenderPath3D_Forward_BindLua.cpp | 2 - WickedEngine/RenderPath3D_PathTracing.cpp | 6 +- .../RenderPath3D_TiledDeferred_BindLua.cpp | 2 - .../RenderPath3D_TiledForward_BindLua.cpp | 2 - WickedEngine/RenderPath_BindLua.cpp | 13 - WickedEngine/RenderPath_BindLua.h | 2 - WickedEngine/WickedEngine.h | 2 +- ....vcxitems => WickedEngine_SOURCE.vcxitems} | 19 +- ...s => WickedEngine_SOURCE.vcxitems.filters} | 52 +- WickedEngine/WickedEngine_UWP.vcxproj | 2 +- WickedEngine/WickedEngine_Windows.vcxproj | 2 +- WickedEngine/lightingHF.hlsli | 12 +- WickedEngine/wiArchive.cpp | 2 +- WickedEngine/wiEmittedParticle.cpp | 104 +-- WickedEngine/wiEmittedParticle.h | 4 +- WickedEngine/wiFFTGenerator.cpp | 13 +- WickedEngine/wiFont.cpp | 23 +- WickedEngine/wiFont.h | 6 +- WickedEngine/wiGPUBVH.cpp | 19 +- WickedEngine/wiGPUBVH.h | 6 +- WickedEngine/wiGPUSortLib.cpp | 24 +- WickedEngine/wiGUI.h | 4 +- WickedEngine/wiGraphicsDevice_DX11.cpp | 2 +- WickedEngine/wiGraphicsDevice_DX11.h | 4 +- WickedEngine/wiGraphicsDevice_DX12.cpp | 2 +- WickedEngine/wiGraphicsDevice_DX12.h | 4 +- WickedEngine/wiGraphicsDevice_Vulkan.cpp | 12 +- WickedEngine/wiGraphicsDevice_Vulkan.h | 4 +- WickedEngine/wiHairParticle.cpp | 61 +- WickedEngine/wiHairParticle.h | 4 +- WickedEngine/wiHelper.cpp | 7 +- WickedEngine/wiImage.cpp | 34 +- WickedEngine/wiInitializer.cpp | 4 +- WickedEngine/wiInput.cpp | 9 +- WickedEngine/wiJobSystem.cpp | 2 +- WickedEngine/wiLua.cpp | 6 +- WickedEngine/wiOcean.cpp | 51 +- WickedEngine/wiOcean.h | 10 +- WickedEngine/wiPhysicsEngine.h | 16 +- WickedEngine/wiPhysicsEngine_Bullet.cpp | 8 +- WickedEngine/wiPlatform.h | 44 + WickedEngine/wiRawInput.cpp | 2 +- WickedEngine/wiRenderer.cpp | 832 +++++++++--------- WickedEngine/wiRenderer.h | 53 +- WickedEngine/wiRenderer_BindLua.cpp | 35 +- WickedEngine/wiResourceManager.cpp | 299 ++----- WickedEngine/wiResourceManager.h | 56 +- WickedEngine/wiResourceManager_BindLua.cpp | 145 --- WickedEngine/wiResourceManager_BindLua.h | 28 - .../{wiSceneSystem.cpp => wiScene.cpp} | 33 +- WickedEngine/{wiSceneSystem.h => wiScene.h} | 25 +- ...System_BindLua.cpp => wiScene_BindLua.cpp} | 18 +- ...ceneSystem_BindLua.h => wiScene_BindLua.h} | 44 +- .../{wiSceneSystem_Decl.h => wiScene_Decl.h} | 2 +- ...erializers.cpp => wiScene_Serializers.cpp} | 46 +- WickedEngine/wiSprite.cpp | 23 +- WickedEngine/wiSprite.h | 19 +- WickedEngine/wiSprite_BindLua.cpp | 1 - WickedEngine/wiTimer.cpp | 2 +- WickedEngine/wiVersion.cpp | 4 +- WickedEngine/wiWidget.cpp | 2 +- WickedEngine/wiWidget.h | 8 +- WickedEngine/wiWindowRegistration.cpp | 28 - WickedEngine/wiWindowRegistration.h | 20 - WickedEngine/wiXInput.cpp | 2 +- 115 files changed, 1348 insertions(+), 1739 deletions(-) delete mode 100644 WickedEngine/Platform.h rename WickedEngine/{WickedEngine_SHARED.vcxitems => WickedEngine_SOURCE.vcxitems} (98%) rename WickedEngine/{WickedEngine_SHARED.vcxitems.filters => WickedEngine_SOURCE.vcxitems.filters} (98%) create mode 100644 WickedEngine/wiPlatform.h delete mode 100644 WickedEngine/wiResourceManager_BindLua.cpp delete mode 100644 WickedEngine/wiResourceManager_BindLua.h rename WickedEngine/{wiSceneSystem.cpp => wiScene.cpp} (99%) rename WickedEngine/{wiSceneSystem.h => wiScene.h} (98%) rename WickedEngine/{wiSceneSystem_BindLua.cpp => wiScene_BindLua.cpp} (98%) rename WickedEngine/{wiSceneSystem_BindLua.h => wiScene_BindLua.h} (83%) rename WickedEngine/{wiSceneSystem_Decl.h => wiScene_Decl.h} (96%) rename WickedEngine/{wiSceneSystem_Serializers.cpp => wiScene_Serializers.cpp} (96%) delete mode 100644 WickedEngine/wiWindowRegistration.cpp delete mode 100644 WickedEngine/wiWindowRegistration.h diff --git a/Documentation/ScriptingAPI-Documentation.md b/Documentation/ScriptingAPI-Documentation.md index 3da712246..4f9038f04 100644 --- a/Documentation/ScriptingAPI-Documentation.md +++ b/Documentation/ScriptingAPI-Documentation.md @@ -44,7 +44,6 @@ The documentation completion is still pending.... 3. LoadingScreen 9. Network 10. Input Handling - 11. ResourceManager ## Introduction and usage Scripting in Wicked Engine is powered by Lua, meaning that the user can make use of the @@ -114,7 +113,6 @@ You can use the Renderer with the following functions, all of which are in the g - GetRenderHeight(): float result - GetCamera() : Camera result -- returns the main camera - AttachCamera(Entity entity) -- attaches camera to an entity in the current frame -- SetEnvironmentMap(Texture cubemap) - HairParticleSettings(opt int lod0, opt int lod1, opt int lod2) - SetAlphaCompositionEnabled(opt bool enabled) - SetShadowProps2D(int resolution, int count, int softShadowQuality) @@ -784,12 +782,3 @@ Describes a touch contact point - [outer]GAMEPAD_ANALOG_THUMBSTICK_R : int - [outer]GAMEPAD_ANALOG_TRIGGER_L : int - [outer]GAMEPAD_ANALOG_TRIGGER_R : int - -### ResourceManager -Stores and manages resources such as textures, audio and shaders. -- [outer]globalResources : Resource -- [void-constructor]Resource() -- Get(string name) -- Add(string name) -- Del(string name) -- List() : string result diff --git a/Documentation/WickedEngine-Documentation.md b/Documentation/WickedEngine-Documentation.md index b68f15f07..6f99bc9e8 100644 --- a/Documentation/WickedEngine-Documentation.md +++ b/Documentation/WickedEngine-Documentation.md @@ -49,7 +49,7 @@ You can find out more about the Entity-Component system and other engine-level s - Entity is a number, it can reference any number of different components through ComponentManager containers - Component is not defined, it can be any data, that is stored inside a ComponentManager along entities -- wiSceneSystem +- wiScene - This contains Scene, a class that is responsible of holding and managing everything in the world - There are also all of the Component types, like TransformComponent, MeshComponent, etc. - There are a number of systems here that can operate on collections of components diff --git a/Editor/AnimationWindow.cpp b/Editor/AnimationWindow.cpp index 773eec73c..c6d46c5d2 100644 --- a/Editor/AnimationWindow.cpp +++ b/Editor/AnimationWindow.cpp @@ -4,7 +4,7 @@ #include using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; AnimationWindow::AnimationWindow(wiGUI* gui) :GUI(gui) { @@ -28,7 +28,7 @@ AnimationWindow::AnimationWindow(wiGUI* gui) :GUI(gui) animationsComboBox->SetPos(XMFLOAT2(x, y += step)); animationsComboBox->SetEnabled(false); animationsComboBox->OnSelect([&](wiEventArgs args) { - entity = wiSceneSystem::GetScene().animations.GetEntity(args.iValue); + entity = wiScene::GetScene().animations.GetEntity(args.iValue); }); animationsComboBox->SetTooltip("Choose an animation clip..."); animWindow->AddWidget(animationsComboBox); @@ -37,7 +37,7 @@ AnimationWindow::AnimationWindow(wiGUI* gui) :GUI(gui) loopedCheckBox->SetTooltip("Toggle animation looping behaviour."); loopedCheckBox->SetPos(XMFLOAT2(150, y += step)); loopedCheckBox->OnClick([&](wiEventArgs args) { - AnimationComponent* animation = wiSceneSystem::GetScene().animations.GetComponent(entity); + AnimationComponent* animation = wiScene::GetScene().animations.GetComponent(entity); if (animation != nullptr) { animation->SetLooped(args.bValue); @@ -49,7 +49,7 @@ AnimationWindow::AnimationWindow(wiGUI* gui) :GUI(gui) playButton->SetTooltip("Play/Pause animation."); playButton->SetPos(XMFLOAT2(200, y)); playButton->OnClick([&](wiEventArgs args) { - AnimationComponent* animation = wiSceneSystem::GetScene().animations.GetComponent(entity); + AnimationComponent* animation = wiScene::GetScene().animations.GetComponent(entity); if (animation != nullptr) { if (animation->IsPlaying()) @@ -68,7 +68,7 @@ AnimationWindow::AnimationWindow(wiGUI* gui) :GUI(gui) stopButton->SetTooltip("Stop animation."); stopButton->SetPos(XMFLOAT2(310, y)); stopButton->OnClick([&](wiEventArgs args) { - AnimationComponent* animation = wiSceneSystem::GetScene().animations.GetComponent(entity); + AnimationComponent* animation = wiScene::GetScene().animations.GetComponent(entity); if (animation != nullptr) { animation->Stop(); @@ -80,7 +80,7 @@ AnimationWindow::AnimationWindow(wiGUI* gui) :GUI(gui) timerSlider->SetSize(XMFLOAT2(250, 30)); timerSlider->SetPos(XMFLOAT2(x, y += step * 2)); timerSlider->OnSlide([&](wiEventArgs args) { - AnimationComponent* animation = wiSceneSystem::GetScene().animations.GetComponent(entity); + AnimationComponent* animation = wiScene::GetScene().animations.GetComponent(entity); if (animation != nullptr) { animation->timer = args.fValue; @@ -110,7 +110,7 @@ void AnimationWindow::Update() { animationsComboBox->ClearItems(); - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); if (!scene.animations.Contains(entity)) { diff --git a/Editor/CameraWindow.cpp b/Editor/CameraWindow.cpp index 61dc1e7c0..027dd4561 100644 --- a/Editor/CameraWindow.cpp +++ b/Editor/CameraWindow.cpp @@ -2,11 +2,11 @@ #include "CameraWindow.h" using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; void CameraWindow::ResetCam() { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); camera_transform.ClearTransform(); camera_transform.Translate(XMFLOAT3(0, 2, -10)); @@ -40,7 +40,7 @@ CameraWindow::CameraWindow(wiGUI* gui) :GUI(gui) farPlaneSlider->SetPos(XMFLOAT2(x, y += inc)); farPlaneSlider->SetValue(wiRenderer::GetCamera().zFarP); farPlaneSlider->OnSlide([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); CameraComponent& camera = wiRenderer::GetCamera(); camera.zFarP = args.fValue; camera.UpdateCamera(); @@ -52,7 +52,7 @@ CameraWindow::CameraWindow(wiGUI* gui) :GUI(gui) nearPlaneSlider->SetPos(XMFLOAT2(x, y += inc)); nearPlaneSlider->SetValue(wiRenderer::GetCamera().zNearP); nearPlaneSlider->OnSlide([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); CameraComponent& camera = wiRenderer::GetCamera(); camera.zNearP = args.fValue; camera.UpdateCamera(); @@ -63,7 +63,7 @@ CameraWindow::CameraWindow(wiGUI* gui) :GUI(gui) fovSlider->SetSize(XMFLOAT2(100, 30)); fovSlider->SetPos(XMFLOAT2(x, y += inc)); fovSlider->OnSlide([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); CameraComponent& camera = wiRenderer::GetCamera(); camera.fov = args.fValue / 180.f * XM_PI; camera.UpdateCamera(); @@ -103,7 +103,7 @@ CameraWindow::CameraWindow(wiGUI* gui) :GUI(gui) const CameraComponent& camera = wiRenderer::GetCamera(); - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); Entity entity = scene.Entity_CreateCamera("cam", camera.width, camera.height, camera.zNearP, camera.zFarP, camera.fov); @@ -116,7 +116,7 @@ CameraWindow::CameraWindow(wiGUI* gui) :GUI(gui) proxyNameField->SetSize(XMFLOAT2(140, 30)); proxyNameField->SetPos(XMFLOAT2(x + 200, y)); proxyNameField->OnInputAccepted([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); NameComponent* camera = scene.names.GetComponent(proxy); if (camera != nullptr) { @@ -156,7 +156,7 @@ void CameraWindow::SetEntity(Entity entity) { proxy = entity; - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); if (scene.cameras.GetComponent(entity) != nullptr) { diff --git a/Editor/CameraWindow.h b/Editor/CameraWindow.h index 2e80df382..cffe33de8 100644 --- a/Editor/CameraWindow.h +++ b/Editor/CameraWindow.h @@ -19,8 +19,8 @@ public: void SetEntity(wiECS::Entity entity); - wiSceneSystem::TransformComponent camera_transform; - wiSceneSystem::TransformComponent camera_target; + wiScene::TransformComponent camera_transform; + wiScene::TransformComponent camera_target; wiGUI* GUI; diff --git a/Editor/DecalWindow.cpp b/Editor/DecalWindow.cpp index 80981f523..bc2c81e75 100644 --- a/Editor/DecalWindow.cpp +++ b/Editor/DecalWindow.cpp @@ -2,7 +2,7 @@ #include "DecalWindow.h" using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; DecalWindow::DecalWindow(wiGUI* gui) : GUI(gui) @@ -23,7 +23,7 @@ DecalWindow::DecalWindow(wiGUI* gui) : GUI(gui) decalNameField->SetPos(XMFLOAT2(10, 30)); decalNameField->SetSize(XMFLOAT2(300, 20)); decalNameField->OnInputAccepted([&](wiEventArgs args) { - NameComponent* name = wiSceneSystem::GetScene().names.GetComponent(entity); + NameComponent* name = wiScene::GetScene().names.GetComponent(entity); if (name != nullptr) { *name = args.sValue; @@ -49,7 +49,7 @@ void DecalWindow::SetEntity(Entity entity) { this->entity = entity; - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); const DecalComponent* decal = scene.decals.GetComponent(entity); if (decal != nullptr) diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index f454b0166..fa9c143c8 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -26,17 +26,13 @@ using namespace std; using namespace wiGraphics; using namespace wiRectPacker; -using namespace wiSceneSystem; +using namespace wiScene; using namespace wiECS; void Editor::Initialize() { - // Call this before Maincomponent::Initialize if you want to load shaders from an other directory! - // otherwise, shaders will be loaded from the working directory - wiRenderer::GetShaderPath() = wiHelper::GetOriginalWorkingDirectory() + "../WickedEngine/shaders/"; - wiFont::GetFontPath() = wiHelper::GetOriginalWorkingDirectory() + "../WickedEngine/fonts/"; // search for fonts elsewhere - MainComponent::Initialize(); + __super::Initialize(); infoDisplay.active = true; infoDisplay.watermark = true; @@ -446,7 +442,7 @@ void EditorComponent::Load() wiArchive archive(fileName, false); if (archive.IsOpen()) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); scene.Serialize(archive); @@ -489,25 +485,25 @@ void EditorComponent::Load() if (!extension.compare("WISCENE")) // engine-serialized { - wiSceneSystem::LoadModel(fileName); + wiScene::LoadModel(fileName); } else if (!extension.compare("OBJ")) // wavefront-obj { Scene scene; ImportModel_OBJ(fileName, scene); - wiSceneSystem::GetScene().Merge(scene); + wiScene::GetScene().Merge(scene); } else if (!extension.compare("GLTF")) // text-based gltf { Scene scene; ImportModel_GLTF(fileName, scene); - wiSceneSystem::GetScene().Merge(scene); + wiScene::GetScene().Merge(scene); } else if (!extension.compare("GLB")) // binary gltf { Scene scene; ImportModel_GLTF(fileName, scene); - wiSceneSystem::GetScene().Merge(scene); + wiScene::GetScene().Merge(scene); } }); loader->onFinished([=] { @@ -719,17 +715,17 @@ void EditorComponent::Load() - pointLightTex = *(Texture*)Content.add("images/pointlight.dds"); - spotLightTex = *(Texture*)Content.add("images/spotlight.dds"); - dirLightTex = *(Texture*)Content.add("images/directional_light.dds"); - areaLightTex = *(Texture*)Content.add("images/arealight.dds"); - decalTex = *(Texture*)Content.add("images/decal.dds"); - forceFieldTex = *(Texture*)Content.add("images/forcefield.dds"); - emitterTex = *(Texture*)Content.add("images/emitter.dds"); - hairTex = *(Texture*)Content.add("images/hair.dds"); - cameraTex = *(Texture*)Content.add("images/camera.dds"); - armatureTex = *(Texture*)Content.add("images/armature.dds"); - soundTex = *(Texture*)Content.add("images/sound.dds"); + pointLightTex = wiResourceManager::Load("images/pointlight.dds"); + spotLightTex = wiResourceManager::Load("images/spotlight.dds"); + dirLightTex = wiResourceManager::Load("images/directional_light.dds"); + areaLightTex = wiResourceManager::Load("images/arealight.dds"); + decalTex = wiResourceManager::Load("images/decal.dds"); + forceFieldTex = wiResourceManager::Load("images/forcefield.dds"); + emitterTex = wiResourceManager::Load("images/emitter.dds"); + hairTex = wiResourceManager::Load("images/hair.dds"); + cameraTex = wiResourceManager::Load("images/camera.dds"); + armatureTex = wiResourceManager::Load("images/armature.dds"); + soundTex = wiResourceManager::Load("images/sound.dds"); } void EditorComponent::Start() { @@ -743,7 +739,7 @@ void EditorComponent::FixedUpdate() } void EditorComponent::Update(float dt) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); CameraComponent& camera = wiRenderer::GetCamera(); animWnd->Update(); @@ -899,12 +895,12 @@ void EditorComponent::Update(float dt) UINT pickMask = rendererWnd->GetPickType(); RAY pickRay = wiRenderer::GetPickRay((long)currentMouse.x, (long)currentMouse.y); { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); // Try to pick objects-meshes: if (pickMask & PICK_OBJECT) { - hovered = wiSceneSystem::Pick(pickRay, pickMask); + hovered = wiScene::Pick(pickRay, pickMask); } if (pickMask & PICK_LIGHT) @@ -918,7 +914,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -935,7 +931,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -952,7 +948,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -969,7 +965,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -986,7 +982,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -1004,7 +1000,7 @@ void EditorComponent::Update(float dt) float dis = wiMath::Distance(transform.GetPosition(), pickRay.origin); if (dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -1023,7 +1019,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -1040,7 +1036,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -1057,7 +1053,7 @@ void EditorComponent::Update(float dt) float dis = XMVectorGetX(disV); if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { - hovered = wiSceneSystem::PickResult(); + hovered = wiScene::PickResult(); hovered.entity = entity; hovered.distance = dis; } @@ -1182,7 +1178,7 @@ void EditorComponent::Update(float dt) { Entity entity = scene.names.GetEntity(i); - wiSceneSystem::PickResult picked; + wiScene::PickResult picked; picked.entity = entity; AddSelected(picked); } @@ -1196,10 +1192,10 @@ void EditorComponent::Update(float dt) if (!selected.empty() && wiInput::Down(wiInput::KEYBOARD_BUTTON_LSHIFT)) { // Union selection: - list saved = selected; + list saved = selected; EndTranslate(); selected.clear(); // endtranslate would clear it, but not if translator is not enabled - for (const wiSceneSystem::PickResult& picked : saved) + for (const wiScene::PickResult& picked : saved) { AddSelected(picked); } @@ -1252,7 +1248,7 @@ void EditorComponent::Update(float dt) } else { - const wiSceneSystem::PickResult& picked = selected.back(); + const wiScene::PickResult& picked = selected.back(); assert(picked.entity != INVALID_ENTITY); @@ -1387,7 +1383,7 @@ void EditorComponent::Update(float dt) *clipboard >> count; for (size_t i = 0; i < count; ++i) { - wiSceneSystem::PickResult picked; + wiScene::PickResult picked; picked.entity = scene.Entity_Serialize(*clipboard, INVALID_ENTITY, wiRandom::getRandom(1, INT_MAX), false); AddSelected(picked); } @@ -1401,7 +1397,7 @@ void EditorComponent::Update(float dt) EndTranslate(); for (auto& x : prevSel) { - wiSceneSystem::PickResult picked; + wiScene::PickResult picked; picked.entity = scene.Entity_Duplicate(x.entity); AddSelected(picked); } @@ -1473,7 +1469,7 @@ void EditorComponent::Update(float dt) } void EditorComponent::Render() const { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); // Hovered item boxes: if (!cinemaModeCheckBox->GetCheck()) @@ -1675,7 +1671,7 @@ void EditorComponent::Compose(CommandList cmd) const const CameraComponent& camera = wiRenderer::GetCamera(); - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); const XMFLOAT4 selectedEntityColor = wiMath::Lerp(wiMath::Lerp(XMFLOAT4(1, 1, 1, 1), selectionColor, 0.4f), selectionColor, selectionColorIntensity); @@ -1712,16 +1708,16 @@ void EditorComponent::Compose(CommandList cmd) const switch (light.GetType()) { case LightComponent::POINT: - wiImage::Draw(&pointLightTex, fx, cmd); + wiImage::Draw(pointLightTex->texture, fx, cmd); break; case LightComponent::SPOT: - wiImage::Draw(&spotLightTex, fx, cmd); + wiImage::Draw(spotLightTex->texture, fx, cmd); break; case LightComponent::DIRECTIONAL: - wiImage::Draw(&dirLightTex, fx, cmd); + wiImage::Draw(dirLightTex->texture, fx, cmd); break; default: - wiImage::Draw(&areaLightTex, fx, cmd); + wiImage::Draw(areaLightTex->texture, fx, cmd); break; } } @@ -1758,7 +1754,7 @@ void EditorComponent::Compose(CommandList cmd) const } - wiImage::Draw(&decalTex, fx, cmd); + wiImage::Draw(decalTex->texture, fx, cmd); } } @@ -1793,7 +1789,7 @@ void EditorComponent::Compose(CommandList cmd) const } - wiImage::Draw(&forceFieldTex, fx, cmd); + wiImage::Draw(forceFieldTex->texture, fx, cmd); } } @@ -1828,7 +1824,7 @@ void EditorComponent::Compose(CommandList cmd) const } - wiImage::Draw(&cameraTex, fx, cmd); + wiImage::Draw(cameraTex->texture, fx, cmd); } } @@ -1862,7 +1858,7 @@ void EditorComponent::Compose(CommandList cmd) const } - wiImage::Draw(&armatureTex, fx, cmd); + wiImage::Draw(armatureTex->texture, fx, cmd); } } @@ -1896,7 +1892,7 @@ void EditorComponent::Compose(CommandList cmd) const } - wiImage::Draw(&emitterTex, fx, cmd); + wiImage::Draw(emitterTex->texture, fx, cmd); } } @@ -1930,7 +1926,7 @@ void EditorComponent::Compose(CommandList cmd) const } - wiImage::Draw(&hairTex, fx, cmd); + wiImage::Draw(hairTex->texture, fx, cmd); } } @@ -1964,7 +1960,7 @@ void EditorComponent::Compose(CommandList cmd) const } - wiImage::Draw(&soundTex, fx, cmd); + wiImage::Draw(soundTex->texture, fx, cmd); } } @@ -1992,7 +1988,7 @@ void EditorComponent::BeginTranslate() return; } - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); // Insert translator into scene: scene.transforms.Create(translator.entityID); @@ -2001,7 +1997,7 @@ void EditorComponent::BeginTranslate() savedHierarchy.Copy(scene.hierarchy); // All selected entities will be attached to translator entity: - TransformComponent* translator_transform = wiSceneSystem::GetScene().transforms.GetComponent(translator.entityID); + TransformComponent* translator_transform = wiScene::GetScene().transforms.GetComponent(translator.entityID); translator_transform->ClearTransform(); // Find the center of all the entities that are selected: @@ -2009,7 +2005,7 @@ void EditorComponent::BeginTranslate() float count = 0; for (auto& x : selected) { - TransformComponent* transform = wiSceneSystem::GetScene().transforms.GetComponent(x.entity); + TransformComponent* transform = wiScene::GetScene().transforms.GetComponent(x.entity); if (transform != nullptr) { centerV = XMVectorAdd(centerV, transform->GetPositionV()); @@ -2029,7 +2025,7 @@ void EditorComponent::BeginTranslate() for (auto& x : selected) { - wiSceneSystem::GetScene().Component_Attach(x.entity, translator.entityID); + wiScene::GetScene().Component_Attach(x.entity, translator.entityID); } } } @@ -2040,7 +2036,7 @@ void EditorComponent::EndTranslate() return; } - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); // Remove translator from scene: scene.Entity_Remove(translator.entityID); @@ -2066,7 +2062,7 @@ void EditorComponent::EndTranslate() // If an attached entity got moved, then the world transform was applied to it (**), // so we need to reattach it properly to the parent matrix: - for (const wiSceneSystem::PickResult& x : selected) + for (const wiScene::PickResult& x : selected) { HierarchyComponent* parent = scene.hierarchy.GetComponent(x.entity); if (parent != nullptr) @@ -2090,7 +2086,7 @@ void EditorComponent::EndTranslate() selected.clear(); } -void EditorComponent::AddSelected(const wiSceneSystem::PickResult& picked) +void EditorComponent::AddSelected(const wiScene::PickResult& picked) { for (auto it = selected.begin(); it != selected.end(); ++it) { @@ -2155,7 +2151,7 @@ void EditorComponent::ConsumeHistoryOperation(bool undo) *archive >> start >> end; translator.enabled = true; - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); TransformComponent& transform = *scene.transforms.GetComponent(translator.entityID); transform.ClearTransform(); @@ -2171,7 +2167,7 @@ void EditorComponent::ConsumeHistoryOperation(bool undo) break; case HISTORYOP_DELETE: { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); size_t count; *archive >> count; @@ -2204,12 +2200,12 @@ void EditorComponent::ConsumeHistoryOperation(bool undo) // Read selections states from archive: - list selectedBEFORE; + list selectedBEFORE; size_t selectionCountBEFORE; *archive >> selectionCountBEFORE; for (size_t i = 0; i < selectionCountBEFORE; ++i) { - wiSceneSystem::PickResult sel; + wiScene::PickResult sel; *archive >> sel.entity; *archive >> sel.position; *archive >> sel.normal; @@ -2221,12 +2217,12 @@ void EditorComponent::ConsumeHistoryOperation(bool undo) ComponentManager savedHierarchyBEFORE; savedHierarchyBEFORE.Serialize(*archive); - list selectedAFTER; + list selectedAFTER; size_t selectionCountAFTER; *archive >> selectionCountAFTER; for (size_t i = 0; i < selectionCountAFTER; ++i) { - wiSceneSystem::PickResult sel; + wiScene::PickResult sel; *archive >> sel.entity; *archive >> sel.position; *archive >> sel.normal; diff --git a/Editor/Editor.h b/Editor/Editor.h index 4da981f64..7d3946d81 100644 --- a/Editor/Editor.h +++ b/Editor/Editor.h @@ -34,7 +34,7 @@ class Editor; class EditorComponent : public RenderPath2D { private: - wiGraphics::Texture pointLightTex, spotLightTex, dirLightTex, areaLightTex, decalTex, forceFieldTex, emitterTex, hairTex, cameraTex, armatureTex, soundTex; + std::shared_ptr pointLightTex, spotLightTex, dirLightTex, areaLightTex, decalTex, forceFieldTex, emitterTex, hairTex, cameraTex, armatureTex, soundTex; public: std::unique_ptr materialWnd; std::unique_ptr postprocessWnd; @@ -94,13 +94,13 @@ public: const XMFLOAT4 selectionColor2 = XMFLOAT4(0, 1, 0.6f, 0.35f); Translator translator; - std::list selected; - wiECS::ComponentManager savedHierarchy; - wiSceneSystem::PickResult hovered; + std::list selected; + wiECS::ComponentManager savedHierarchy; + wiScene::PickResult hovered; void BeginTranslate(); void EndTranslate(); - void AddSelected(const wiSceneSystem::PickResult& picked); + void AddSelected(const wiScene::PickResult& picked); diff --git a/Editor/EmitterWindow.cpp b/Editor/EmitterWindow.cpp index df70892ad..f55ed3967 100644 --- a/Editor/EmitterWindow.cpp +++ b/Editor/EmitterWindow.cpp @@ -5,7 +5,7 @@ using namespace std; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; EmitterWindow::EmitterWindow(wiGUI* gui) : GUI(gui) { @@ -28,7 +28,7 @@ EmitterWindow::EmitterWindow(wiGUI* gui) : GUI(gui) emitterNameField->SetPos(XMFLOAT2(x, y += step)); emitterNameField->SetSize(XMFLOAT2(300, 20)); emitterNameField->OnInputAccepted([&](wiEventArgs args) { - NameComponent* name = wiSceneSystem::GetScene().names.GetComponent(entity); + NameComponent* name = wiScene::GetScene().names.GetComponent(entity); if (name != nullptr) { *name = args.sValue; @@ -40,7 +40,7 @@ EmitterWindow::EmitterWindow(wiGUI* gui) : GUI(gui) addButton->SetPos(XMFLOAT2(x, y += step)); addButton->SetSize(XMFLOAT2(150, 30)); addButton->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); scene.Entity_CreateEmitter("editorEmitter"); }); addButton->SetTooltip("Add new emitter particle system."); @@ -73,7 +73,7 @@ EmitterWindow::EmitterWindow(wiGUI* gui) : GUI(gui) } else { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); emitter->meshID = scene.meshes.GetEntity(args.iValue - 1); } } @@ -537,7 +537,7 @@ wiEmittedParticle* EmitterWindow::GetEmitter() return nullptr; } - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); wiEmittedParticle* emitter = scene.emitters.GetComponent(entity); return emitter; @@ -551,7 +551,7 @@ void EmitterWindow::UpdateData() return; } - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); meshComboBox->ClearItems(); meshComboBox->AddItem("NO MESH"); diff --git a/Editor/EmitterWindow.h b/Editor/EmitterWindow.h index 5429ddcf1..b47a252ca 100644 --- a/Editor/EmitterWindow.h +++ b/Editor/EmitterWindow.h @@ -22,7 +22,7 @@ public: void UpdateData(); - wiSceneSystem::wiEmittedParticle* GetEmitter(); + wiScene::wiEmittedParticle* GetEmitter(); wiGUI* GUI; diff --git a/Editor/EnvProbeWindow.cpp b/Editor/EnvProbeWindow.cpp index 917434156..5f0b53eb2 100644 --- a/Editor/EnvProbeWindow.cpp +++ b/Editor/EnvProbeWindow.cpp @@ -2,7 +2,7 @@ #include "EnvProbeWindow.h" using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; EnvProbeWindow::EnvProbeWindow(wiGUI* gui) : GUI(gui) { @@ -21,7 +21,7 @@ EnvProbeWindow::EnvProbeWindow(wiGUI* gui) : GUI(gui) realTimeCheckBox->SetPos(XMFLOAT2(x, y += step)); realTimeCheckBox->SetEnabled(false); realTimeCheckBox->OnClick([&](wiEventArgs args) { - EnvironmentProbeComponent* probe = wiSceneSystem::GetScene().probes.GetComponent(entity); + EnvironmentProbeComponent* probe = wiScene::GetScene().probes.GetComponent(entity); if (probe != nullptr) { probe->SetRealTime(args.bValue); @@ -35,7 +35,7 @@ EnvProbeWindow::EnvProbeWindow(wiGUI* gui) : GUI(gui) generateButton->OnClick([](wiEventArgs args) { XMFLOAT3 pos; XMStoreFloat3(&pos, XMVectorAdd(wiRenderer::GetCamera().GetEye(), wiRenderer::GetCamera().GetAt() * 4)); - wiSceneSystem::GetScene().Entity_CreateEnvironmentProbe("editorProbe", pos); + wiScene::GetScene().Entity_CreateEnvironmentProbe("editorProbe", pos); }); envProbeWindow->AddWidget(generateButton); @@ -43,7 +43,7 @@ EnvProbeWindow::EnvProbeWindow(wiGUI* gui) : GUI(gui) refreshButton->SetPos(XMFLOAT2(x, y += step)); refreshButton->SetEnabled(false); refreshButton->OnClick([&](wiEventArgs args) { - EnvironmentProbeComponent* probe = wiSceneSystem::GetScene().probes.GetComponent(entity); + EnvironmentProbeComponent* probe = wiScene::GetScene().probes.GetComponent(entity); if (probe != nullptr) { probe->SetDirty(); @@ -55,7 +55,7 @@ EnvProbeWindow::EnvProbeWindow(wiGUI* gui) : GUI(gui) refreshAllButton->SetPos(XMFLOAT2(x, y += step)); refreshAllButton->SetEnabled(true); refreshAllButton->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); for (size_t i = 0; i < scene.probes.GetCount(); ++i) { EnvironmentProbeComponent& probe = scene.probes[i]; @@ -85,7 +85,7 @@ void EnvProbeWindow::SetEntity(Entity entity) { this->entity = entity; - const EnvironmentProbeComponent* probe = wiSceneSystem::GetScene().probes.GetComponent(entity); + const EnvironmentProbeComponent* probe = wiScene::GetScene().probes.GetComponent(entity); if (probe == nullptr) { diff --git a/Editor/ForceFieldWindow.cpp b/Editor/ForceFieldWindow.cpp index d09f2bca0..9dbaab047 100644 --- a/Editor/ForceFieldWindow.cpp +++ b/Editor/ForceFieldWindow.cpp @@ -2,7 +2,7 @@ #include "ForceFieldWindow.h" using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; ForceFieldWindow::ForceFieldWindow(wiGUI* gui) : GUI(gui) @@ -25,7 +25,7 @@ ForceFieldWindow::ForceFieldWindow(wiGUI* gui) : GUI(gui) typeComboBox->SetPos(XMFLOAT2(x, y += step)); typeComboBox->SetSize(XMFLOAT2(300, 25)); typeComboBox->OnSelect([&](wiEventArgs args) { - ForceFieldComponent* force = wiSceneSystem::GetScene().forces.GetComponent(entity); + ForceFieldComponent* force = wiScene::GetScene().forces.GetComponent(entity); if (force != nullptr && args.iValue >= 0) { switch (args.iValue) @@ -53,7 +53,7 @@ ForceFieldWindow::ForceFieldWindow(wiGUI* gui) : GUI(gui) gravitySlider->SetSize(XMFLOAT2(200, 30)); gravitySlider->SetPos(XMFLOAT2(x, y += step)); gravitySlider->OnSlide([&](wiEventArgs args) { - ForceFieldComponent* force = wiSceneSystem::GetScene().forces.GetComponent(entity); + ForceFieldComponent* force = wiScene::GetScene().forces.GetComponent(entity); if (force != nullptr) { force->gravity = args.fValue; @@ -68,7 +68,7 @@ ForceFieldWindow::ForceFieldWindow(wiGUI* gui) : GUI(gui) rangeSlider->SetSize(XMFLOAT2(200, 30)); rangeSlider->SetPos(XMFLOAT2(x, y += step)); rangeSlider->OnSlide([&](wiEventArgs args) { - ForceFieldComponent* force = wiSceneSystem::GetScene().forces.GetComponent(entity); + ForceFieldComponent* force = wiScene::GetScene().forces.GetComponent(entity); if (force != nullptr) { force->range_local = args.fValue; @@ -83,8 +83,8 @@ ForceFieldWindow::ForceFieldWindow(wiGUI* gui) : GUI(gui) addButton->SetSize(XMFLOAT2(150, 30)); addButton->SetPos(XMFLOAT2(x, y += step * 2)); addButton->OnClick([&](wiEventArgs args) { - Entity entity = wiSceneSystem::GetScene().Entity_CreateForce("editorForce"); - ForceFieldComponent* force = wiSceneSystem::GetScene().forces.GetComponent(entity); + Entity entity = wiScene::GetScene().Entity_CreateForce("editorForce"); + ForceFieldComponent* force = wiScene::GetScene().forces.GetComponent(entity); if (force != nullptr) { switch (typeComboBox->GetSelected()) @@ -129,7 +129,7 @@ void ForceFieldWindow::SetEntity(Entity entity) { this->entity = entity; - const ForceFieldComponent* force = wiSceneSystem::GetScene().forces.GetComponent(entity); + const ForceFieldComponent* force = wiScene::GetScene().forces.GetComponent(entity); if (force != nullptr) { diff --git a/Editor/HairParticleWindow.cpp b/Editor/HairParticleWindow.cpp index 3e5ce4a2d..4e7796ed4 100644 --- a/Editor/HairParticleWindow.cpp +++ b/Editor/HairParticleWindow.cpp @@ -3,7 +3,7 @@ using namespace std; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; HairParticleWindow::HairParticleWindow(wiGUI* gui) : GUI(gui) { @@ -26,7 +26,7 @@ HairParticleWindow::HairParticleWindow(wiGUI* gui) : GUI(gui) addButton->SetPos(XMFLOAT2(x, y += step)); addButton->SetSize(XMFLOAT2(200, 30)); addButton->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); scene.Entity_CreateHair("editorHair"); }); addButton->SetTooltip("Add new hair particle system."); @@ -46,7 +46,7 @@ HairParticleWindow::HairParticleWindow(wiGUI* gui) : GUI(gui) } else { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); hair->meshID = scene.meshes.GetEntity(args.iValue - 1); } } @@ -195,7 +195,7 @@ wiHairParticle* HairParticleWindow::GetHair() return nullptr; } - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); wiHairParticle* hair = scene.hairs.GetComponent(entity); return hair; @@ -209,7 +209,7 @@ void HairParticleWindow::UpdateData() return; } - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); meshComboBox->ClearItems(); meshComboBox->AddItem("NO MESH"); diff --git a/Editor/HairParticleWindow.h b/Editor/HairParticleWindow.h index 384f8de2c..d9ee429f4 100644 --- a/Editor/HairParticleWindow.h +++ b/Editor/HairParticleWindow.h @@ -22,7 +22,7 @@ public: void UpdateData(); - wiSceneSystem::wiHairParticle* GetHair(); + wiScene::wiHairParticle* GetHair(); wiGUI* GUI; diff --git a/Editor/LightWindow.cpp b/Editor/LightWindow.cpp index 3ea7d072e..a3dbfe389 100644 --- a/Editor/LightWindow.cpp +++ b/Editor/LightWindow.cpp @@ -5,7 +5,7 @@ using namespace wiECS; using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; LightWindow::LightWindow(wiGUI* gui) : GUI(gui) @@ -27,7 +27,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) energySlider->SetSize(XMFLOAT2(100, 30)); energySlider->SetPos(XMFLOAT2(x, y += step)); energySlider->OnSlide([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->energy = args.fValue; @@ -41,7 +41,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) rangeSlider->SetSize(XMFLOAT2(100, 30)); rangeSlider->SetPos(XMFLOAT2(x, y += step)); rangeSlider->OnSlide([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->range_local = args.fValue; @@ -55,7 +55,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) radiusSlider->SetSize(XMFLOAT2(100, 30)); radiusSlider->SetPos(XMFLOAT2(x, y += step)); radiusSlider->OnSlide([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->radius = args.fValue; @@ -69,7 +69,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) widthSlider->SetSize(XMFLOAT2(100, 30)); widthSlider->SetPos(XMFLOAT2(x, y += step)); widthSlider->OnSlide([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->width = args.fValue; @@ -83,7 +83,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) heightSlider->SetSize(XMFLOAT2(100, 30)); heightSlider->SetPos(XMFLOAT2(x, y += step)); heightSlider->OnSlide([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->height = args.fValue; @@ -97,7 +97,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) fovSlider->SetSize(XMFLOAT2(100, 30)); fovSlider->SetPos(XMFLOAT2(x, y += step)); fovSlider->OnSlide([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->fov = args.fValue; @@ -111,7 +111,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) biasSlider->SetSize(XMFLOAT2(100, 30)); biasSlider->SetPos(XMFLOAT2(x, y += step)); biasSlider->OnSlide([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->shadowBias = args.fValue; @@ -124,7 +124,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) shadowCheckBox = new wiCheckBox("Shadow: "); shadowCheckBox->SetPos(XMFLOAT2(x, y += step)); shadowCheckBox->OnClick([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->SetCastShadow(args.bValue); @@ -137,7 +137,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) volumetricsCheckBox = new wiCheckBox("Volumetric Scattering: "); volumetricsCheckBox->SetPos(XMFLOAT2(x, y += step)); volumetricsCheckBox->OnClick([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->SetVolumetricsEnabled(args.bValue); @@ -150,7 +150,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) haloCheckBox = new wiCheckBox("Visualizer: "); haloCheckBox->SetPos(XMFLOAT2(x, y += step)); haloCheckBox->OnClick([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->SetVisualizerEnabled(args.bValue); @@ -163,7 +163,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) staticCheckBox = new wiCheckBox("Static: "); staticCheckBox->SetPos(XMFLOAT2(x, y += step)); staticCheckBox->OnClick([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->SetStatic(args.bValue); @@ -177,8 +177,8 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) addLightButton->SetPos(XMFLOAT2(x, y += step)); addLightButton->SetSize(XMFLOAT2(150, 30)); addLightButton->OnClick([&](wiEventArgs args) { - Entity entity = wiSceneSystem::GetScene().Entity_CreateLight("editorLight", XMFLOAT3(0, 3, 0), XMFLOAT3(1, 1, 1), 2, 60); - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + Entity entity = wiScene::GetScene().Entity_CreateLight("editorLight", XMFLOAT3(0, 3, 0), XMFLOAT3(1, 1, 1), 2, 60); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->type = (LightComponent::LightType)typeSelectorComboBox->GetSelected(); @@ -198,7 +198,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) colorPicker->SetVisible(true); colorPicker->SetEnabled(false); colorPicker->OnColorChanged([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { light->color = args.color.toFloat3(); @@ -209,7 +209,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) typeSelectorComboBox = new wiComboBox("Type: "); typeSelectorComboBox->SetPos(XMFLOAT2(x, y += step)); typeSelectorComboBox->OnSelect([&](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr && args.iValue >= 0) { light->SetType((LightComponent::LightType)args.iValue); @@ -247,7 +247,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) lensflare_Button[i]->SetPos(XMFLOAT2(x, y += step)); lensflare_Button[i]->SetSize(XMFLOAT2(260, 20)); lensflare_Button[i]->OnClick([=](wiEventArgs args) { - LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light == nullptr) return; @@ -277,7 +277,7 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui) if (result.ok) { std::string fileName = result.filenames.front(); - light->lensFlareRimTextures[i] = (Texture*)wiResourceManager::GetGlobal().add(fileName); + light->lensFlareRimTextures[i] = wiResourceManager::Load(fileName); light->lensFlareNames[i] = fileName; fileName = wiHelper::GetFileNameFromPath(fileName); lensflare_Button[i]->SetText(fileName); @@ -306,7 +306,7 @@ void LightWindow::SetEntity(Entity entity) { this->entity = entity; - const LightComponent* light = wiSceneSystem::GetScene().lights.GetComponent(entity); + const LightComponent* light = wiScene::GetScene().lights.GetComponent(entity); if (light != nullptr) { diff --git a/Editor/LightWindow.h b/Editor/LightWindow.h index ef049e50b..d9867491e 100644 --- a/Editor/LightWindow.h +++ b/Editor/LightWindow.h @@ -20,7 +20,7 @@ public: wiECS::Entity entity; void SetEntity(wiECS::Entity entity); - void SetLightType(wiSceneSystem::LightComponent::LightType type); + void SetLightType(wiScene::LightComponent::LightType type); wiWindow* lightWindow; wiSlider* energySlider; diff --git a/Editor/MaterialWindow.cpp b/Editor/MaterialWindow.cpp index b2acb9295..ecaa6340f 100644 --- a/Editor/MaterialWindow.cpp +++ b/Editor/MaterialWindow.cpp @@ -6,7 +6,7 @@ using namespace std; using namespace wiGraphics; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) { @@ -23,7 +23,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) materialNameField->SetPos(XMFLOAT2(10, 60)); materialNameField->SetSize(XMFLOAT2(300, 20)); materialNameField->OnInputAccepted([&](wiEventArgs args) { - NameComponent* name = wiSceneSystem::GetScene().names.GetComponent(entity); + NameComponent* name = wiScene::GetScene().names.GetComponent(entity); if (name != nullptr) { *name = args.sValue; @@ -38,7 +38,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) waterCheckBox->SetTooltip("Set material as special water material."); waterCheckBox->SetPos(XMFLOAT2(670, y += step)); waterCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetWater(args.bValue); }); @@ -48,7 +48,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) planarReflCheckBox->SetTooltip("Enable planar reflections. The mesh should be a single plane for best results."); planarReflCheckBox->SetPos(XMFLOAT2(670, y += step)); planarReflCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetPlanarReflections(args.bValue); }); @@ -58,7 +58,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) shadowCasterCheckBox->SetTooltip("The subset will contribute to the scene shadows if enabled."); shadowCasterCheckBox->SetPos(XMFLOAT2(670, y += step)); shadowCasterCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetCastShadow(args.bValue); }); @@ -68,7 +68,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) flipNormalMapCheckBox->SetTooltip("The normal map green channel will be inverted. Useful for imported models coming from OpenGL space (such as GLTF)."); flipNormalMapCheckBox->SetPos(XMFLOAT2(670, y += step)); flipNormalMapCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetFlipNormalMap(args.bValue); }); @@ -78,7 +78,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) useVertexColorsCheckBox->SetTooltip("Enable if you want to render the mesh with vertex colors (must have appropriate vertex buffer)"); useVertexColorsCheckBox->SetPos(XMFLOAT2(670, y += step)); useVertexColorsCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetUseVertexColors(args.bValue); }); @@ -88,7 +88,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) specularGlossinessCheckBox->SetTooltip("If enabled, surface map will be viewed like it contains specular color (RGB) and smoothness (A)"); specularGlossinessCheckBox->SetPos(XMFLOAT2(670, y += step)); specularGlossinessCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetUseSpecularGlossinessWorkflow(args.bValue); }); @@ -98,7 +98,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) occlusionPrimaryCheckBox->SetTooltip("If enabled, surface map's RED channel will be used as occlusion map"); occlusionPrimaryCheckBox->SetPos(XMFLOAT2(670, y += step)); occlusionPrimaryCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetOcclusionEnabled_Primary(args.bValue); }); @@ -108,7 +108,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) occlusionSecondaryCheckBox->SetTooltip("If enabled, occlusion map's RED channel will be used as occlusion map"); occlusionSecondaryCheckBox->SetPos(XMFLOAT2(670, y += step)); occlusionSecondaryCheckBox->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetOcclusionEnabled_Secondary(args.bValue); }); @@ -122,7 +122,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) normalMapSlider->SetSize(XMFLOAT2(100, 30)); normalMapSlider->SetPos(XMFLOAT2(x, y += step)); normalMapSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetNormalMapStrength(args.fValue); }); @@ -133,7 +133,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) roughnessSlider->SetSize(XMFLOAT2(100, 30)); roughnessSlider->SetPos(XMFLOAT2(x, y += step)); roughnessSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetRoughness(args.fValue); }); @@ -144,7 +144,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) reflectanceSlider->SetSize(XMFLOAT2(100, 30)); reflectanceSlider->SetPos(XMFLOAT2(x, y += step)); reflectanceSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetReflectance(args.fValue); }); @@ -155,7 +155,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) metalnessSlider->SetSize(XMFLOAT2(100, 30)); metalnessSlider->SetPos(XMFLOAT2(x, y += step)); metalnessSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetMetalness(args.fValue); }); @@ -166,7 +166,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) alphaSlider->SetSize(XMFLOAT2(100, 30)); alphaSlider->SetPos(XMFLOAT2(x, y += step)); alphaSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetOpacity(args.fValue); }); @@ -177,7 +177,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) alphaRefSlider->SetSize(XMFLOAT2(100, 30)); alphaRefSlider->SetPos(XMFLOAT2(x, y += step)); alphaRefSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetAlphaRef(args.fValue); }); @@ -188,7 +188,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) refractionIndexSlider->SetSize(XMFLOAT2(100, 30)); refractionIndexSlider->SetPos(XMFLOAT2(x, y += step)); refractionIndexSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetRefractionIndex(args.fValue); }); @@ -199,7 +199,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) emissiveSlider->SetSize(XMFLOAT2(100, 30)); emissiveSlider->SetPos(XMFLOAT2(x, y += step)); emissiveSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetEmissiveStrength(args.fValue); }); @@ -210,7 +210,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) sssSlider->SetSize(XMFLOAT2(100, 30)); sssSlider->SetPos(XMFLOAT2(x, y += step)); sssSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetSubsurfaceScattering(args.fValue); }); @@ -221,7 +221,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) pomSlider->SetSize(XMFLOAT2(100, 30)); pomSlider->SetPos(XMFLOAT2(x, y += step)); pomSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetParallaxOcclusionMapping(args.fValue); }); @@ -232,7 +232,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) displacementMappingSlider->SetSize(XMFLOAT2(100, 30)); displacementMappingSlider->SetPos(XMFLOAT2(x, y += step)); displacementMappingSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) material->SetDisplacementMapping(args.fValue); }); @@ -243,7 +243,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texAnimFrameRateSlider->SetSize(XMFLOAT2(100, 30)); texAnimFrameRateSlider->SetPos(XMFLOAT2(x, y += step)); texAnimFrameRateSlider->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->texAnimFrameRate = args.fValue; @@ -256,7 +256,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texAnimDirectionSliderU->SetSize(XMFLOAT2(100, 30)); texAnimDirectionSliderU->SetPos(XMFLOAT2(x, y += step)); texAnimDirectionSliderU->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->texAnimDirection.x = args.fValue; @@ -269,7 +269,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texAnimDirectionSliderV->SetSize(XMFLOAT2(100, 30)); texAnimDirectionSliderV->SetPos(XMFLOAT2(x, y += step)); texAnimDirectionSliderV->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->texAnimDirection.y = args.fValue; @@ -282,7 +282,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texMulSliderX->SetSize(XMFLOAT2(100, 30)); texMulSliderX->SetPos(XMFLOAT2(x, y += step)); texMulSliderX->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetDirty(); @@ -296,7 +296,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texMulSliderY->SetSize(XMFLOAT2(100, 30)); texMulSliderY->SetPos(XMFLOAT2(x, y += step)); texMulSliderY->OnSlide([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetDirty(); @@ -312,7 +312,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) baseColorPicker->SetVisible(true); baseColorPicker->SetEnabled(true); baseColorPicker->OnColorChanged([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { XMFLOAT3 col = args.color.toFloat3(); @@ -328,7 +328,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) emissiveColorPicker->SetVisible(true); emissiveColorPicker->SetEnabled(true); emissiveColorPicker->OnColorChanged([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { XMFLOAT3 col = args.color.toFloat3(); @@ -342,7 +342,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) blendModeComboBox->SetPos(XMFLOAT2(x, y += step)); blendModeComboBox->SetSize(XMFLOAT2(100, 25)); blendModeComboBox->OnSelect([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr && args.iValue >= 0) { material->userBlendMode = static_cast(args.iValue); @@ -362,7 +362,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) shaderTypeComboBox->SetPos(XMFLOAT2(x, y += step)); shaderTypeComboBox->SetSize(XMFLOAT2(100, 25)); shaderTypeComboBox->OnSelect([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetCustomShaderID(args.iValue - 1); @@ -394,7 +394,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_baseColor_Button->SetPos(XMFLOAT2(x + 122, y)); texture_baseColor_Button->SetSize(XMFLOAT2(260, 20)); texture_baseColor_Button->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material == nullptr) return; @@ -419,7 +419,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) if (result.ok) { string fileName = result.filenames.front(); - material->baseColorMap = (Texture*)wiResourceManager::GetGlobal().add(fileName); + material->baseColorMap = wiResourceManager::Load(fileName); material->baseColorMapName = fileName; material->SetDirty(); fileName = wiHelper::GetFileNameFromPath(fileName); @@ -435,7 +435,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_baseColor_uvset_Field->SetPos(XMFLOAT2(x + 392, y)); texture_baseColor_uvset_Field->SetSize(XMFLOAT2(20, 20)); texture_baseColor_uvset_Field->OnInputAccepted([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetUVSet_BaseColorMap(args.iValue); @@ -456,7 +456,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_normal_Button->SetPos(XMFLOAT2(x + 122, y)); texture_normal_Button->SetSize(XMFLOAT2(260, 20)); texture_normal_Button->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material == nullptr) return; @@ -481,7 +481,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) if (result.ok) { string fileName = result.filenames.front(); - material->normalMap = (Texture*)wiResourceManager::GetGlobal().add(fileName); + material->normalMap = wiResourceManager::Load(fileName); material->normalMapName = fileName; material->SetDirty(); fileName = wiHelper::GetFileNameFromPath(fileName); @@ -497,7 +497,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_normal_uvset_Field->SetPos(XMFLOAT2(x + 392, y)); texture_normal_uvset_Field->SetSize(XMFLOAT2(20, 20)); texture_normal_uvset_Field->OnInputAccepted([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetUVSet_NormalMap(args.iValue); @@ -518,7 +518,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_surface_Button->SetPos(XMFLOAT2(x + 122, y)); texture_surface_Button->SetSize(XMFLOAT2(260, 20)); texture_surface_Button->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material == nullptr) return; @@ -543,7 +543,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) if (result.ok) { string fileName = result.filenames.front(); - material->surfaceMap = (Texture*)wiResourceManager::GetGlobal().add(fileName); + material->surfaceMap = wiResourceManager::Load(fileName); material->surfaceMapName = fileName; material->SetDirty(); fileName = wiHelper::GetFileNameFromPath(fileName); @@ -559,7 +559,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_surface_uvset_Field->SetPos(XMFLOAT2(x + 392, y)); texture_surface_uvset_Field->SetSize(XMFLOAT2(20, 20)); texture_surface_uvset_Field->OnInputAccepted([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetUVSet_SurfaceMap(args.iValue); @@ -580,7 +580,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_displacement_Button->SetPos(XMFLOAT2(x + 122, y)); texture_displacement_Button->SetSize(XMFLOAT2(260, 20)); texture_displacement_Button->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material == nullptr) return; @@ -605,7 +605,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) if (result.ok) { string fileName = result.filenames.front(); - material->displacementMap = (Texture*)wiResourceManager::GetGlobal().add(fileName); + material->displacementMap = wiResourceManager::Load(fileName); material->displacementMapName = fileName; material->SetDirty(); fileName = wiHelper::GetFileNameFromPath(fileName); @@ -621,7 +621,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_displacement_uvset_Field->SetPos(XMFLOAT2(x + 392, y)); texture_displacement_uvset_Field->SetSize(XMFLOAT2(20, 20)); texture_displacement_uvset_Field->OnInputAccepted([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetUVSet_DisplacementMap(args.iValue); @@ -642,7 +642,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_emissive_Button->SetPos(XMFLOAT2(x + 122, y)); texture_emissive_Button->SetSize(XMFLOAT2(260, 20)); texture_emissive_Button->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material == nullptr) return; @@ -667,7 +667,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) if (result.ok) { string fileName = result.filenames.front(); - material->emissiveMap = (Texture*)wiResourceManager::GetGlobal().add(fileName); + material->emissiveMap = wiResourceManager::Load(fileName); material->emissiveMapName = fileName; material->SetDirty(); fileName = wiHelper::GetFileNameFromPath(fileName); @@ -683,7 +683,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_emissive_uvset_Field->SetPos(XMFLOAT2(x + 392, y)); texture_emissive_uvset_Field->SetSize(XMFLOAT2(20, 20)); texture_emissive_uvset_Field->OnInputAccepted([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetUVSet_EmissiveMap(args.iValue); @@ -705,7 +705,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_occlusion_Button->SetPos(XMFLOAT2(x + 122, y)); texture_occlusion_Button->SetSize(XMFLOAT2(260, 20)); texture_occlusion_Button->OnClick([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material == nullptr) return; @@ -730,7 +730,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) if (result.ok) { string fileName = result.filenames.front(); - material->occlusionMap = (Texture*)wiResourceManager::GetGlobal().add(fileName); + material->occlusionMap = wiResourceManager::Load(fileName); material->occlusionMapName = fileName; material->SetDirty(); fileName = wiHelper::GetFileNameFromPath(fileName); @@ -746,7 +746,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texture_occlusion_uvset_Field->SetPos(XMFLOAT2(x + 392, y)); texture_occlusion_uvset_Field->SetSize(XMFLOAT2(20, 20)); texture_occlusion_uvset_Field->OnInputAccepted([&](wiEventArgs args) { - MaterialComponent* material = wiSceneSystem::GetScene().materials.GetComponent(entity); + MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) { material->SetUVSet_OcclusionMap(args.iValue); @@ -774,7 +774,7 @@ void MaterialWindow::SetEntity(Entity entity) { this->entity = entity; - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); MaterialComponent* material = scene.materials.GetComponent(entity); if (material != nullptr) diff --git a/Editor/MeshWindow.cpp b/Editor/MeshWindow.cpp index 34215009d..1214a6ae9 100644 --- a/Editor/MeshWindow.cpp +++ b/Editor/MeshWindow.cpp @@ -5,7 +5,7 @@ using namespace std; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) { @@ -34,7 +34,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) doubleSidedCheckBox->SetTooltip("If enabled, the inside of the mesh will be visible."); doubleSidedCheckBox->SetPos(XMFLOAT2(x, y += step)); doubleSidedCheckBox->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->SetDoubleSided(args.bValue); @@ -47,7 +47,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) softbodyCheckBox->SetPos(XMFLOAT2(x, y += step)); softbodyCheckBox->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); SoftBodyPhysicsComponent* physicscomponent = scene.softbodies.GetComponent(entity); if (args.bValue) @@ -75,7 +75,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) massSlider->SetSize(XMFLOAT2(100, 30)); massSlider->SetPos(XMFLOAT2(x, y += step)); massSlider->OnSlide([&](wiEventArgs args) { - SoftBodyPhysicsComponent* physicscomponent = wiSceneSystem::GetScene().softbodies.GetComponent(entity); + SoftBodyPhysicsComponent* physicscomponent = wiScene::GetScene().softbodies.GetComponent(entity); if (physicscomponent != nullptr) { physicscomponent->mass = args.fValue; @@ -88,7 +88,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) frictionSlider->SetSize(XMFLOAT2(100, 30)); frictionSlider->SetPos(XMFLOAT2(x, y += step)); frictionSlider->OnSlide([&](wiEventArgs args) { - SoftBodyPhysicsComponent* physicscomponent = wiSceneSystem::GetScene().softbodies.GetComponent(entity); + SoftBodyPhysicsComponent* physicscomponent = wiScene::GetScene().softbodies.GetComponent(entity); if (physicscomponent != nullptr) { physicscomponent->friction = args.fValue; @@ -101,10 +101,10 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) impostorCreateButton->SetSize(XMFLOAT2(240, 30)); impostorCreateButton->SetPos(XMFLOAT2(x - 50, y += step)); impostorCreateButton->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); scene.impostors.Create(entity).swapInDistance = impostorDistanceSlider->GetValue(); } }); @@ -115,7 +115,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) impostorDistanceSlider->SetSize(XMFLOAT2(100, 30)); impostorDistanceSlider->SetPos(XMFLOAT2(x, y += step)); impostorDistanceSlider->OnSlide([&](wiEventArgs args) { - ImpostorComponent* impostor = wiSceneSystem::GetScene().impostors.GetComponent(entity); + ImpostorComponent* impostor = wiScene::GetScene().impostors.GetComponent(entity); if (impostor != nullptr) { impostor->swapInDistance = args.fValue; @@ -128,7 +128,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) tessellationFactorSlider->SetSize(XMFLOAT2(100, 30)); tessellationFactorSlider->SetPos(XMFLOAT2(x, y += step)); tessellationFactorSlider->OnSlide([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->tessellationFactor = args.fValue; @@ -141,7 +141,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) flipCullingButton->SetSize(XMFLOAT2(240, 30)); flipCullingButton->SetPos(XMFLOAT2(x - 50, y += step)); flipCullingButton->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->FlipCulling(); @@ -155,7 +155,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) flipNormalsButton->SetSize(XMFLOAT2(240, 30)); flipNormalsButton->SetPos(XMFLOAT2(x - 50, y += step)); flipNormalsButton->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->FlipNormals(); @@ -169,7 +169,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) computeNormalsSmoothButton->SetSize(XMFLOAT2(240, 30)); computeNormalsSmoothButton->SetPos(XMFLOAT2(x - 50, y += step)); computeNormalsSmoothButton->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->ComputeNormals(true); @@ -183,7 +183,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) computeNormalsHardButton->SetSize(XMFLOAT2(240, 30)); computeNormalsHardButton->SetPos(XMFLOAT2(x - 50, y += step)); computeNormalsHardButton->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->ComputeNormals(false); @@ -197,7 +197,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) recenterButton->SetSize(XMFLOAT2(240, 30)); recenterButton->SetPos(XMFLOAT2(x - 50, y += step)); recenterButton->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->Recenter(); @@ -211,7 +211,7 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) recenterToBottomButton->SetSize(XMFLOAT2(240, 30)); recenterToBottomButton->SetPos(XMFLOAT2(x - 50, y += step)); recenterToBottomButton->OnClick([&](wiEventArgs args) { - MeshComponent* mesh = wiSceneSystem::GetScene().meshes.GetComponent(entity); + MeshComponent* mesh = wiScene::GetScene().meshes.GetComponent(entity); if (mesh != nullptr) { mesh->RecenterToBottom(); @@ -241,7 +241,7 @@ void MeshWindow::SetEntity(Entity entity) { this->entity = entity; - Scene&scene = wiSceneSystem::GetScene(); + Scene&scene = wiScene::GetScene(); const MeshComponent* mesh = scene.meshes.GetComponent(entity); @@ -276,7 +276,7 @@ void MeshWindow::SetEntity(Entity entity) softbodyCheckBox->SetCheck(false); - SoftBodyPhysicsComponent* physicscomponent = wiSceneSystem::GetScene().softbodies.GetComponent(entity); + SoftBodyPhysicsComponent* physicscomponent = wiScene::GetScene().softbodies.GetComponent(entity); if (physicscomponent != nullptr) { softbodyCheckBox->SetCheck(true); diff --git a/Editor/ModelImporter.h b/Editor/ModelImporter.h index ede17e7aa..b4f47bbb8 100644 --- a/Editor/ModelImporter.h +++ b/Editor/ModelImporter.h @@ -1,8 +1,8 @@ #pragma once #include -struct wiSceneSystem::Scene; +struct wiScene::Scene; -void ImportModel_OBJ(const std::string& fileName, wiSceneSystem::Scene& scene); -void ImportModel_GLTF(const std::string& fileName, wiSceneSystem::Scene& scene); +void ImportModel_OBJ(const std::string& fileName, wiScene::Scene& scene); +void ImportModel_GLTF(const std::string& fileName, wiScene::Scene& scene); diff --git a/Editor/ModelImporter_GLTF.cpp b/Editor/ModelImporter_GLTF.cpp index 6634ba549..eaf272de3 100644 --- a/Editor/ModelImporter_GLTF.cpp +++ b/Editor/ModelImporter_GLTF.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "ModelImporter.h" #include "wiRandom.h" @@ -16,7 +16,7 @@ using namespace std; using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; using namespace wiECS; @@ -94,7 +94,7 @@ namespace tinygltf void RegisterTexture(tinygltf::Image *image, const string& type_name) { // We will load the texture2d by hand here and register to the resource manager (if it was not already registered) - if (wiResourceManager::GetGlobal().get(wiHashString(image->uri)).data == nullptr) + if (!wiResourceManager::Contains(wiHashString(image->uri))) { int width = image->width; int height = image->height; @@ -154,7 +154,7 @@ void RegisterTexture(tinygltf::Image *image, const string& type_name) } // We loaded the texture2d, so register to the resource manager to be retrieved later: - wiResourceManager::GetGlobal().Register(image->uri, tex, wiResourceManager::IMAGE); + wiResourceManager::Register(image->uri, tex, wiResource::IMAGE); } } else @@ -478,15 +478,15 @@ void ImportModel_GLTF(const std::string& fileName, Scene& scene) // Retrieve textures by name: if (!material.baseColorMapName.empty()) - material.baseColorMap = (Texture*)wiResourceManager::GetGlobal().add(material.baseColorMapName); + material.baseColorMap = wiResourceManager::Load(material.baseColorMapName); if (!material.normalMapName.empty()) - material.normalMap = (Texture*)wiResourceManager::GetGlobal().add(material.normalMapName); + material.normalMap = wiResourceManager::Load(material.normalMapName); if (!material.surfaceMapName.empty()) - material.surfaceMap = (Texture*)wiResourceManager::GetGlobal().add(material.surfaceMapName); + material.surfaceMap = wiResourceManager::Load(material.surfaceMapName); if (!material.emissiveMapName.empty()) - material.emissiveMap = (Texture*)wiResourceManager::GetGlobal().add(material.emissiveMapName); + material.emissiveMap = wiResourceManager::Load(material.emissiveMapName); if (!material.occlusionMapName.empty()) - material.occlusionMap = (Texture*)wiResourceManager::GetGlobal().add(material.occlusionMapName); + material.occlusionMap = wiResourceManager::Load(material.occlusionMapName); } diff --git a/Editor/ModelImporter_OBJ.cpp b/Editor/ModelImporter_OBJ.cpp index 290445b6a..046e74871 100644 --- a/Editor/ModelImporter_OBJ.cpp +++ b/Editor/ModelImporter_OBJ.cpp @@ -1,5 +1,5 @@ #include "stdafx.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "ModelImporter.h" #define TINYOBJLOADER_IMPLEMENTATION @@ -9,7 +9,7 @@ using namespace std; using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; using namespace wiECS; // Transform the data from OBJ space to engine-space: @@ -66,19 +66,19 @@ void ImportModel_OBJ(const std::string& fileName, Scene& scene) if (!material.surfaceMapName.empty()) { - material.surfaceMap = (Texture*)wiResourceManager::GetGlobal().add(directory + material.surfaceMapName); + material.surfaceMap = wiResourceManager::Load(directory + material.surfaceMapName); } if (!material.baseColorMapName.empty()) { - material.baseColorMap = (Texture*)wiResourceManager::GetGlobal().add(directory + material.baseColorMapName); + material.baseColorMap = wiResourceManager::Load(directory + material.baseColorMapName); } if (!material.normalMapName.empty()) { - material.normalMap = (Texture*)wiResourceManager::GetGlobal().add(directory + material.normalMapName); + material.normalMap = wiResourceManager::Load(directory + material.normalMapName); } if (!material.displacementMapName.empty()) { - material.displacementMap = (Texture*)wiResourceManager::GetGlobal().add(directory + material.displacementMapName); + material.displacementMap = wiResourceManager::Load(directory + material.displacementMapName); } materialLibrary.push_back(materialEntity); // for subset-indexing... diff --git a/Editor/ObjectWindow.cpp b/Editor/ObjectWindow.cpp index c37e86696..42f739134 100644 --- a/Editor/ObjectWindow.cpp +++ b/Editor/ObjectWindow.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #include "Editor.h" #include "ObjectWindow.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "xatlas.h" @@ -10,7 +10,7 @@ #include using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; static void SetPixel(uint8_t *dest, int destWidth, int x, int y, const uint8_t *color) @@ -270,7 +270,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) renderableCheckBox->SetPos(XMFLOAT2(x, y += 30)); renderableCheckBox->SetCheck(true); renderableCheckBox->OnClick([&](wiEventArgs args) { - ObjectComponent* object = wiSceneSystem::GetScene().objects.GetComponent(entity); + ObjectComponent* object = wiScene::GetScene().objects.GetComponent(entity); if (object != nullptr) { object->SetRenderable(args.bValue); @@ -283,7 +283,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) ditherSlider->SetSize(XMFLOAT2(100, 30)); ditherSlider->SetPos(XMFLOAT2(x, y += 30)); ditherSlider->OnSlide([&](wiEventArgs args) { - ObjectComponent* object = wiSceneSystem::GetScene().objects.GetComponent(entity); + ObjectComponent* object = wiScene::GetScene().objects.GetComponent(entity); if (object != nullptr) { object->color.w = 1 - args.fValue; @@ -296,7 +296,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) cascadeMaskSlider->SetSize(XMFLOAT2(100, 30)); cascadeMaskSlider->SetPos(XMFLOAT2(x, y += 30)); cascadeMaskSlider->OnSlide([&](wiEventArgs args) { - ObjectComponent* object = wiSceneSystem::GetScene().objects.GetComponent(entity); + ObjectComponent* object = wiScene::GetScene().objects.GetComponent(entity); if (object != nullptr) { object->cascadeMask = (uint32_t)args.iValue; @@ -311,7 +311,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) colorPicker->SetVisible(true); colorPicker->SetEnabled(true); colorPicker->OnColorChanged([&](wiEventArgs args) { - ObjectComponent* object = wiSceneSystem::GetScene().objects.GetComponent(entity); + ObjectComponent* object = wiScene::GetScene().objects.GetComponent(entity); if (object != nullptr) { XMFLOAT3 col = args.color.toFloat3(); @@ -336,7 +336,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) rigidBodyCheckBox->SetCheck(false); rigidBodyCheckBox->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); RigidBodyPhysicsComponent* physicscomponent = scene.rigidbodies.GetComponent(entity); if (args.bValue) @@ -365,7 +365,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) kinematicCheckBox->SetPos(XMFLOAT2(x, y += 30)); kinematicCheckBox->SetCheck(false); kinematicCheckBox->OnClick([&](wiEventArgs args) { - RigidBodyPhysicsComponent* physicscomponent = wiSceneSystem::GetScene().rigidbodies.GetComponent(entity); + RigidBodyPhysicsComponent* physicscomponent = wiScene::GetScene().rigidbodies.GetComponent(entity); if (physicscomponent != nullptr) { physicscomponent->SetKinematic(args.bValue); @@ -378,7 +378,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) disabledeactivationCheckBox->SetPos(XMFLOAT2(x, y += 30)); disabledeactivationCheckBox->SetCheck(false); disabledeactivationCheckBox->OnClick([&](wiEventArgs args) { - RigidBodyPhysicsComponent* physicscomponent = wiSceneSystem::GetScene().rigidbodies.GetComponent(entity); + RigidBodyPhysicsComponent* physicscomponent = wiScene::GetScene().rigidbodies.GetComponent(entity); if (physicscomponent != nullptr) { physicscomponent->SetDisableDeactivation(args.bValue); @@ -396,7 +396,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) collisionShapeComboBox->AddItem("Triangle Mesh"); collisionShapeComboBox->OnSelect([&](wiEventArgs args) { - RigidBodyPhysicsComponent* physicscomponent = wiSceneSystem::GetScene().rigidbodies.GetComponent(entity); + RigidBodyPhysicsComponent* physicscomponent = wiScene::GetScene().rigidbodies.GetComponent(entity); if (physicscomponent != nullptr) { switch (args.iValue) @@ -457,7 +457,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) generateLightmapButton->SetSize(XMFLOAT2(140,30)); generateLightmapButton->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); enum UV_GEN_TYPE { @@ -538,7 +538,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) stopLightmapGenButton->SetSize(XMFLOAT2(140, 30)); stopLightmapGenButton->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); for (auto& x : this->editor->selected) { @@ -559,7 +559,7 @@ ObjectWindow::ObjectWindow(EditorComponent* editor) : editor(editor) clearLightmapButton->SetSize(XMFLOAT2(140, 30)); clearLightmapButton->OnClick([&](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); for (auto& x : this->editor->selected) { @@ -594,7 +594,7 @@ void ObjectWindow::SetEntity(Entity entity) { this->entity = entity; - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); const ObjectComponent* object = scene.objects.GetComponent(entity); diff --git a/Editor/OceanWindow.cpp b/Editor/OceanWindow.cpp index bb48cb8f0..9902fa360 100644 --- a/Editor/OceanWindow.cpp +++ b/Editor/OceanWindow.cpp @@ -1,8 +1,8 @@ #include "stdafx.h" #include "OceanWindow.h" -#include "wiSceneSystem.h" +#include "wiScene.h" -using namespace wiSceneSystem; +using namespace wiScene; OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) @@ -33,12 +33,12 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) patchSizeSlider = new wiSlider(1, 1000, 1000, 100000, "Patch size: "); patchSizeSlider->SetSize(XMFLOAT2(100, 30)); patchSizeSlider->SetPos(XMFLOAT2(x, y += inc)); - patchSizeSlider->SetValue(wiSceneSystem::GetScene().weather.oceanParameters.patch_length); + patchSizeSlider->SetValue(wiScene::GetScene().weather.oceanParameters.patch_length); patchSizeSlider->SetTooltip("Adjust water tiling patch size"); patchSizeSlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.patch_length = args.fValue; wiRenderer::SetOceanEnabled(enabledCheckBox->GetCheck()); } @@ -48,12 +48,12 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) waveAmplitudeSlider = new wiSlider(0, 1000, 1000, 100000, "Wave amplitude: "); waveAmplitudeSlider->SetSize(XMFLOAT2(100, 30)); waveAmplitudeSlider->SetPos(XMFLOAT2(x, y += inc)); - waveAmplitudeSlider->SetValue(wiSceneSystem::GetScene().weather.oceanParameters.wave_amplitude); + waveAmplitudeSlider->SetValue(wiScene::GetScene().weather.oceanParameters.wave_amplitude); waveAmplitudeSlider->SetTooltip("Adjust wave size"); waveAmplitudeSlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.wave_amplitude = args.fValue; wiRenderer::SetOceanEnabled(enabledCheckBox->GetCheck()); } @@ -63,12 +63,12 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) choppyScaleSlider = new wiSlider(0, 10, 1000, 100000, "Choppiness: "); choppyScaleSlider->SetSize(XMFLOAT2(100, 30)); choppyScaleSlider->SetPos(XMFLOAT2(x, y += inc)); - choppyScaleSlider->SetValue(wiSceneSystem::GetScene().weather.oceanParameters.choppy_scale); + choppyScaleSlider->SetValue(wiScene::GetScene().weather.oceanParameters.choppy_scale); choppyScaleSlider->SetTooltip("Adjust wave choppiness"); choppyScaleSlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.choppy_scale = args.fValue; wiRenderer::SetOceanEnabled(enabledCheckBox->GetCheck()); } @@ -78,12 +78,12 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) windDependencySlider = new wiSlider(0, 1, 1000, 100000, "Wind dependency: "); windDependencySlider->SetSize(XMFLOAT2(100, 30)); windDependencySlider->SetPos(XMFLOAT2(x, y += inc)); - windDependencySlider->SetValue(wiSceneSystem::GetScene().weather.oceanParameters.wind_dependency); + windDependencySlider->SetValue(wiScene::GetScene().weather.oceanParameters.wind_dependency); windDependencySlider->SetTooltip("Adjust wind contribution"); windDependencySlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.wind_dependency = args.fValue; wiRenderer::SetOceanEnabled(enabledCheckBox->GetCheck()); } @@ -93,12 +93,12 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) timeScaleSlider = new wiSlider(0, 4, 1000, 100000, "Time scale: "); timeScaleSlider->SetSize(XMFLOAT2(100, 30)); timeScaleSlider->SetPos(XMFLOAT2(x, y += inc)); - timeScaleSlider->SetValue(wiSceneSystem::GetScene().weather.oceanParameters.time_scale); + timeScaleSlider->SetValue(wiScene::GetScene().weather.oceanParameters.time_scale); timeScaleSlider->SetTooltip("Adjust simulation speed"); timeScaleSlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.time_scale = args.fValue; wiRenderer::SetOceanEnabled(enabledCheckBox->GetCheck()); } @@ -111,9 +111,9 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) heightSlider->SetValue(0); heightSlider->SetTooltip("Adjust water level"); heightSlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.waterHeight = args.fValue; } }); @@ -125,9 +125,9 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) detailSlider->SetValue(4); detailSlider->SetTooltip("Adjust surface tessellation resolution. High values can decrease performance."); detailSlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.surfaceDetail = (uint32_t)args.iValue; } }); @@ -139,9 +139,9 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) toleranceSlider->SetValue(2); toleranceSlider->SetTooltip("Big waves can introduce glitches on screen borders, this can fix that but surface detail will decrease."); toleranceSlider->OnSlide([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.surfaceDisplacementTolerance = args.fValue; } }); @@ -154,9 +154,9 @@ OceanWindow::OceanWindow(wiGUI* gui) :GUI(gui) colorPicker->SetVisible(true); colorPicker->SetEnabled(true); colorPicker->OnColorChanged([&](wiEventArgs args) { - if (wiSceneSystem::GetScene().weathers.GetCount() > 0) + if (wiScene::GetScene().weathers.GetCount() > 0) { - WeatherComponent& weather = wiSceneSystem::GetScene().weathers[0]; + WeatherComponent& weather = wiScene::GetScene().weathers[0]; weather.oceanParameters.waterColor = args.color.toFloat3(); } }); diff --git a/Editor/PostprocessWindow.cpp b/Editor/PostprocessWindow.cpp index 542167667..55f70c2ab 100644 --- a/Editor/PostprocessWindow.cpp +++ b/Editor/PostprocessWindow.cpp @@ -199,7 +199,6 @@ PostprocessWindow::PostprocessWindow(wiGUI* gui, RenderPath3D* comp) : GUI(gui), colorGradingButton->SetPos(XMFLOAT2(x + 35, y)); colorGradingButton->SetSize(XMFLOAT2(200, 18)); colorGradingButton->OnClick([=](wiEventArgs args) { - //auto x = wiRenderer::GetColorGrading(); auto x = component->getColorGradingTexture(); if (x == nullptr) @@ -217,7 +216,7 @@ PostprocessWindow::PostprocessWindow(wiGUI* gui, RenderPath3D* comp) : GUI(gui), if (result.ok) { string fileName = result.filenames.front(); - component->setColorGradingTexture((Texture*)wiResourceManager::GetGlobal().add(fileName)); + component->setColorGradingTexture(wiResourceManager::Load(fileName)); if (component->getColorGradingTexture() != nullptr) { colorGradingButton->SetText(fileName); diff --git a/Editor/SoundWindow.cpp b/Editor/SoundWindow.cpp index d554c3836..85c8de771 100644 --- a/Editor/SoundWindow.cpp +++ b/Editor/SoundWindow.cpp @@ -7,7 +7,7 @@ using namespace std; using namespace wiGraphics; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; SoundWindow::SoundWindow(wiGUI* gui) : GUI(gui) { @@ -94,10 +94,10 @@ SoundWindow::SoundWindow(wiGUI* gui) : GUI(gui) nameField->SetPos(XMFLOAT2(x, y += step)); nameField->SetSize(XMFLOAT2(300, 20)); nameField->OnInputAccepted([&](wiEventArgs args) { - NameComponent* name = wiSceneSystem::GetScene().names.GetComponent(entity); + NameComponent* name = wiScene::GetScene().names.GetComponent(entity); if (name == nullptr) { - name = &wiSceneSystem::GetScene().names.Create(entity); + name = &wiScene::GetScene().names.Create(entity); } *name = args.sValue; }); @@ -174,7 +174,7 @@ void SoundWindow::SetEntity(Entity entity) { this->entity = entity; - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); SoundComponent* sound = scene.sounds.GetComponent(entity); NameComponent* name = scene.names.GetComponent(entity); diff --git a/Editor/Translator.cpp b/Editor/Translator.cpp index 1df655ddb..4494d6b8e 100644 --- a/Editor/Translator.cpp +++ b/Editor/Translator.cpp @@ -7,7 +7,7 @@ using namespace wiGraphics; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; PipelineState pso_solidpart; PipelineState pso_wirepart; @@ -191,7 +191,7 @@ Translator::~Translator() void Translator::Update() { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); if (!scene.transforms.Contains(entityID)) { @@ -428,7 +428,7 @@ void Translator::Update() } void Translator::Draw(const CameraComponent& camera, CommandList cmd) const { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); if (!scene.transforms.Contains(entityID)) { diff --git a/Editor/Translator.h b/Editor/Translator.h index 40b51f30e..b10c5ba8d 100644 --- a/Editor/Translator.h +++ b/Editor/Translator.h @@ -15,7 +15,7 @@ public: ~Translator(); void Update(); - void Draw(const wiSceneSystem::CameraComponent& camera, wiGraphics::CommandList cmd) const; + void Draw(const wiScene::CameraComponent& camera, wiGraphics::CommandList cmd) const; wiECS::Entity entityID = wiECS::INVALID_ENTITY; diff --git a/Editor/WeatherWindow.cpp b/Editor/WeatherWindow.cpp index cfb0a2335..6ec260342 100644 --- a/Editor/WeatherWindow.cpp +++ b/Editor/WeatherWindow.cpp @@ -5,7 +5,7 @@ using namespace std; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; using namespace wiGraphics; WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) @@ -95,9 +95,9 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) skyButton->SetSize(XMFLOAT2(240, 30)); skyButton->SetPos(XMFLOAT2(x-100, y += step)); skyButton->OnClick([=](wiEventArgs args) { - auto x = wiRenderer::GetEnvironmentMap(); + auto& weather = GetWeather(); - if (x == nullptr) + if (weather.skyMap == nullptr) { wiHelper::FileDialogParams params; wiHelper::FileDialogResult result; @@ -108,13 +108,15 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) if (result.ok) { string fileName = result.filenames.front(); - wiRenderer::SetEnvironmentMap((Texture*)wiResourceManager::GetGlobal().add(fileName)); + weather.skyMapName = fileName; + weather.skyMap = wiResourceManager::Load(fileName); skyButton->SetText(fileName); } } else { - wiRenderer::SetEnvironmentMap(nullptr); + weather.skyMap.reset(); + weather.skyMapName.clear(); skyButton->SetText("Load Sky"); } @@ -134,7 +136,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) preset0Button->SetPos(XMFLOAT2(x - 100, y += step * 2)); preset0Button->OnClick([=](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); scene.weathers.Clear(); scene.weather = WeatherComponent(); @@ -230,7 +232,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) eliminateCoarseCascadesButton->SetPos(XMFLOAT2(x - 100, y += step * 3)); eliminateCoarseCascadesButton->OnClick([=](wiEventArgs args) { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); for (size_t i = 0; i < scene.objects.GetCount(); ++i) { scene.objects[i].cascadeMask = 1; @@ -292,7 +294,7 @@ WeatherWindow::~WeatherWindow() void WeatherWindow::Update() { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); if (scene.weathers.GetCount() > 0) { auto& weather = scene.weathers[0]; @@ -313,7 +315,7 @@ void WeatherWindow::Update() WeatherComponent& WeatherWindow::GetWeather() const { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); if (scene.weathers.GetCount() == 0) { scene.weathers.Create(CreateEntity()); @@ -323,7 +325,7 @@ WeatherComponent& WeatherWindow::GetWeather() const void WeatherWindow::InvalidateProbes() const { - Scene& scene = wiSceneSystem::GetScene(); + Scene& scene = wiScene::GetScene(); // Also, we invalidate all environment probes to reflect the sky changes. for (size_t i = 0; i < scene.probes.GetCount(); ++i) diff --git a/Editor/WeatherWindow.h b/Editor/WeatherWindow.h index 5f5b27115..8f649eeec 100644 --- a/Editor/WeatherWindow.h +++ b/Editor/WeatherWindow.h @@ -16,7 +16,7 @@ public: void Update(); - wiSceneSystem::WeatherComponent& GetWeather() const; + wiScene::WeatherComponent& GetWeather() const; void InvalidateProbes() const; wiGUI* GUI; diff --git a/Editor/main.cpp b/Editor/main.cpp index 907b9d75a..af14295f8 100644 --- a/Editor/main.cpp +++ b/Editor/main.cpp @@ -159,7 +159,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) return FALSE; } - editor.SetWindow(hWnd, hInst); + editor.SetWindow(hWnd); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); diff --git a/README.md b/README.md index 4e2098605..b18be664a 100644 --- a/README.md +++ b/README.md @@ -86,8 +86,8 @@ Initialization example (C++): // Declare main component once per application: MainComponent main; -// If you want to render, interface with Windows API like this: -main.SetWindow(hWnd, hInst); +// Set the window to render to like this: +main.SetWindow(hWnd); // Run the application: while(true) { @@ -100,13 +100,13 @@ Some basic usage examples (C++): RenderPath3D_Deferred myGame; // Declare a game screen component, aka "RenderPath" (you could also override its Update(), Render() etc. functions). This is a 3D, Deferred path for example, but there are others main.ActivatePath(&myGame); // Register your game to the application. It will call Start(), Update(), Render(), etc. from now on... -wiSceneSystem::LoadModel("myModel.wiscene"); // Simply load a model into the current global scene -wiSceneSystem::GetScene(); // Get the current global scene +wiScene::LoadModel("myModel.wiscene"); // Simply load a model into the current global scene +wiScene::GetScene(); // Get the current global scene wiRenderer::ClearWorld(); // Delete every model, etc. from the current global scene -wiSceneSystem::Scene scene2; // create a separate scene -wiSceneSystem::LoadModel(scene2, "myModel2.wiscene"); // Load model into a separate scene -wiSceneSystem::GetScene().Merge(scene2); // Combine separate scene with global scene +wiScene::Scene scene2; // create a separate scene +wiScene::LoadModel(scene2, "myModel2.wiscene"); // Load model into a separate scene +wiScene::GetScene().Merge(scene2); // Combine separate scene with global scene myGame.setSSAOEnabled(true); // You can enable post process effects this way... diff --git a/Template_Windows/main.cpp b/Template_Windows/main.cpp index 41f1a3d1e..23341b64c 100644 --- a/Template_Windows/main.cpp +++ b/Template_Windows/main.cpp @@ -43,10 +43,11 @@ int APIENTRY wWinMain(_In_ HINSTANCE hInstance, HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEMPLATEWINDOWS)); - wiRenderer::GetShaderPath() = "../WickedEngine/shaders/"; // search for shaders elsewhere - wiFont::GetFontPath() = "../WickedEngine/fonts/"; // search for fonts elsewhere - main.infoDisplay.active = true; // just show some basic info... - + // just show some basic info: + main.infoDisplay.active = true; + main.infoDisplay.watermark = true; + main.infoDisplay.resolution = true; + main.infoDisplay.fpsinfo = true; MSG msg = { 0 }; while (msg.message != WM_QUIT) @@ -119,7 +120,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) UpdateWindow(hWnd); - main.SetWindow(hWnd, hInst); // assign window handle (mandatory) + main.SetWindow(hWnd); // assign window handle (mandatory) return TRUE; diff --git a/Tests/Tests.cpp b/Tests/Tests.cpp index 9d0c2f2e1..cec9c5ce5 100644 --- a/Tests/Tests.cpp +++ b/Tests/Tests.cpp @@ -5,15 +5,11 @@ #include #include -using namespace wiSceneSystem; +using namespace wiScene; void Tests::Initialize() { - // Call this before Maincomponent::Initialize if you want to load shaders from an other directory! - // otherwise, shaders will be loaded from the working directory - wiRenderer::GetShaderPath() = "../WickedEngine/shaders/"; - wiFont::GetFontPath() = "../WickedEngine/fonts/"; // search for fonts elsewhere - MainComponent::Initialize(); + __super::Initialize(); infoDisplay.active = true; infoDisplay.watermark = true; @@ -119,7 +115,7 @@ TestsRenderer::TestsRenderer() wiRenderer::SetToDrawGridHelper(false); wiRenderer::SetTemporalAAEnabled(false); wiRenderer::ClearWorld(); - wiSceneSystem::GetScene().weather = WeatherComponent(); + wiScene::GetScene().weather = WeatherComponent(); this->clearSprites(); this->clearFonts(); wiLua::GetGlobal()->KillProcesses(); @@ -153,16 +149,16 @@ TestsRenderer::TestsRenderer() } case 1: wiRenderer::SetTemporalAAEnabled(true); - wiSceneSystem::LoadModel("../models/teapot.wiscene"); + wiScene::LoadModel("../models/teapot.wiscene"); break; case 2: - wiSceneSystem::LoadModel("../models/emitter_smoke.wiscene"); + wiScene::LoadModel("../models/emitter_smoke.wiscene"); break; case 3: - wiSceneSystem::LoadModel("../models/emitter_skinned.wiscene"); + wiScene::LoadModel("../models/emitter_skinned.wiscene"); break; case 4: - wiSceneSystem::LoadModel("../models/hairparticle_torus.wiscene", XMMatrixTranslation(0, 1, 0)); + wiScene::LoadModel("../models/hairparticle_torus.wiscene", XMMatrixTranslation(0, 1, 0)); break; case 5: wiRenderer::SetToDrawGridHelper(true); @@ -170,18 +166,18 @@ TestsRenderer::TestsRenderer() break; case 6: wiRenderer::SetTemporalAAEnabled(true); - wiSceneSystem::LoadModel("../models/water_test.wiscene", XMMatrixTranslation(0, 1, 0)); + wiScene::LoadModel("../models/water_test.wiscene", XMMatrixTranslation(0, 1, 0)); break; case 7: wiRenderer::SetTemporalAAEnabled(true); - wiSceneSystem::LoadModel("../models/shadows_test.wiscene", XMMatrixTranslation(0, 1, 0)); + wiScene::LoadModel("../models/shadows_test.wiscene", XMMatrixTranslation(0, 1, 0)); break; case 8: wiRenderer::SetTemporalAAEnabled(true); - wiSceneSystem::LoadModel("../models/physics_test.wiscene"); + wiScene::LoadModel("../models/physics_test.wiscene"); break; case 9: - wiSceneSystem::LoadModel("../models/cloth_test.wiscene", XMMatrixTranslation(0, 3, 4)); + wiScene::LoadModel("../models/cloth_test.wiscene", XMMatrixTranslation(0, 3, 4)); break; case 10: RunJobSystemTest(); @@ -191,7 +187,7 @@ TestsRenderer::TestsRenderer() break; case 12: wiRenderer::SetTemporalAAEnabled(true); - wiSceneSystem::LoadModel("../models/volumetric_test.wiscene", XMMatrixTranslation(0, 0, 4)); + wiScene::LoadModel("../models/volumetric_test.wiscene", XMMatrixTranslation(0, 0, 4)); break; case 13: RunSpriteTest(); @@ -199,7 +195,7 @@ TestsRenderer::TestsRenderer() case 14: wiRenderer::GetDevice()->SetVSyncEnabled(false); // turn off vsync if we can to accelerate the baking wiRenderer::SetTemporalAAEnabled(true); - wiSceneSystem::LoadModel("../models/lightmap_bake_test.wiscene", XMMatrixTranslation(0, 0, 4)); + wiScene::LoadModel("../models/lightmap_bake_test.wiscene", XMMatrixTranslation(0, 0, 4)); break; case 15: RunNetworkTest(); @@ -275,7 +271,7 @@ void TestsRenderer::RunJobSystemTest() // Simple loop test: { - std::vector dataSet(itemCount); + std::vector dataSet(itemCount); timer.record(); for (uint32_t i = 0; i < itemCount; ++i) { @@ -287,7 +283,7 @@ void TestsRenderer::RunJobSystemTest() // Dispatch test: { - std::vector dataSet(itemCount); + std::vector dataSet(itemCount); timer.record(); wiJobSystem::Dispatch(ctx, itemCount, 1000, [&](wiJobDispatchArgs args) { dataSet[args.jobIndex].UpdateCamera(); diff --git a/Tests/main.cpp b/Tests/main.cpp index 11f892eb7..ea5c22e08 100644 --- a/Tests/main.cpp +++ b/Tests/main.cpp @@ -115,7 +115,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) return FALSE; } - tests.SetWindow(hWnd, hInst); + tests.SetWindow(hWnd); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); diff --git a/WickedEngine.sln b/WickedEngine.sln index 9754c6b1c..c227436bc 100644 --- a/WickedEngine.sln +++ b/WickedEngine.sln @@ -1,10 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2036 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29519.87 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WickedEngine_SHARED", "WickedEngine\WickedEngine_SHARED.vcxitems", "{45D41ACC-2C3C-43D2-BC10-02AA73FFC7C7}" -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}" @@ -17,11 +15,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tests", "Tests\Tests.vcxpro EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Template_Windows", "Template_Windows\Template_Windows.vcxproj", "{76AA3D37-3252-4785-9334-3FC6B8CC07DE}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WickedEngine_SOURCE", "WickedEngine\WickedEngine_SOURCE.vcxitems", "{45D41ACC-2C3C-43D2-BC10-02AA73FFC7C7}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution - WickedEngine\WickedEngine_SHARED.vcxitems*{06163dcb-b183-4ed9-9c62-13ef1658e049}*SharedItemsImports = 4 - WickedEngine\WickedEngine_SHARED.vcxitems*{45d41acc-2c3c-43d2-bc10-02aa73ffc7c7}*SharedItemsImports = 9 - WickedEngine\WickedEngine_SHARED.vcxitems*{60da258f-e95f-4cf4-a46b-17d80644464b}*SharedItemsImports = 4 + WickedEngine\WickedEngine_SOURCE.vcxitems*{06163dcb-b183-4ed9-9c62-13ef1658e049}*SharedItemsImports = 4 + WickedEngine\WickedEngine_SOURCE.vcxitems*{45d41acc-2c3c-43d2-bc10-02aa73ffc7c7}*SharedItemsImports = 9 + WickedEngine\WickedEngine_SOURCE.vcxitems*{60da258f-e95f-4cf4-a46b-17d80644464b}*SharedItemsImports = 4 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM = Debug|ARM diff --git a/WickedEngine/ArchiveVersionHistory.txt b/WickedEngine/ArchiveVersionHistory.txt index 0eb2de57f..88007ff79 100644 --- a/WickedEngine/ArchiveVersionHistory.txt +++ b/WickedEngine/ArchiveVersionHistory.txt @@ -1,5 +1,6 @@ This file contains changelog of wiArchive versions +32: WeatherComponent::skyMapName serialized 31: ObjectComponent::userStencilRef serialized 30: serialized sound components 29: serialized soft body rest pose vertices diff --git a/WickedEngine/CommonInclude.h b/WickedEngine/CommonInclude.h index 7f6a467fb..f2fe19fb9 100644 --- a/WickedEngine/CommonInclude.h +++ b/WickedEngine/CommonInclude.h @@ -17,6 +17,7 @@ using namespace DirectX::PackedVector; #define SAFE_DELETE(a) {delete (a);(a)=nullptr;} #define SAFE_DELETE_ARRAY(a) {delete[](a);(a)=nullptr;} #define GFX_STRUCT struct alignas(16) +#define NOMINMAX static const XMFLOAT4X4 IDENTITYMATRIX = XMFLOAT4X4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); diff --git a/WickedEngine/MainComponent.cpp b/WickedEngine/MainComponent.cpp index f09ac0a40..be1af79fd 100644 --- a/WickedEngine/MainComponent.cpp +++ b/WickedEngine/MainComponent.cpp @@ -44,14 +44,14 @@ void MainComponent::Initialize() // User can also create a graphics device if custom logic is desired, but he must do before this function! if (wiRenderer::GetDevice() == nullptr) { - auto window = wiWindowRegistration::GetRegisteredWindow(); + auto window = wiPlatform::GetWindow(); bool debugdevice = wiStartupArguments::HasArgument("debugdevice"); if (wiStartupArguments::HasArgument("vulkan")) { #ifdef WICKEDENGINE_BUILD_VULKAN - wiRenderer::GetShaderPath() += "spirv/"; + wiRenderer::SetShaderPath(wiRenderer::GetShaderPath() + "spirv/"); wiRenderer::SetDevice(new GraphicsDevice_Vulkan(window, fullscreen, debugdevice)); #else wiHelper::messageBox("Vulkan SDK not found during building the application! Vulkan API disabled!", "Error"); @@ -61,7 +61,7 @@ void MainComponent::Initialize() { if (wiStartupArguments::HasArgument("hlsl6")) { - wiRenderer::GetShaderPath() += "hlsl6/"; + wiRenderer::SetShaderPath(wiRenderer::GetShaderPath() + "hlsl6/"); } wiRenderer::SetDevice(new GraphicsDevice_DX12(window, fullscreen, debugdevice)); } @@ -132,7 +132,7 @@ void MainComponent::Run() deltaTime = float(std::max(0.0, timer.elapsed() / 1000.0)); timer.record(); - if (wiWindowRegistration::IsWindowActive()) + if (wiPlatform::IsWindowActive()) { // If the application is active, run Update loops: @@ -316,16 +316,8 @@ void MainComponent::Compose(CommandList cmd) wiProfiler::EndRange(range); // Compose } -#ifndef WINSTORE_SUPPORT -void MainComponent::SetWindow(wiWindowRegistration::window_type window, HINSTANCE hInst) +void MainComponent::SetWindow(wiPlatform::window_type window) { - wiWindowRegistration::RegisterInstance(hInst); - wiWindowRegistration::RegisterWindow(window); + wiPlatform::GetWindow() = window; } -#else -void MainComponent::SetWindow(wiWindowRegistration::window_type window) -{ - wiWindowRegistration::RegisterWindow(window); -} -#endif diff --git a/WickedEngine/MainComponent.h b/WickedEngine/MainComponent.h index ef5a5e183..5b73e5d7b 100644 --- a/WickedEngine/MainComponent.h +++ b/WickedEngine/MainComponent.h @@ -1,9 +1,9 @@ #pragma once #include "CommonInclude.h" +#include "wiPlatform.h" #include "wiResourceManager.h" #include "wiColor.h" #include "wiFadeManager.h" -#include "wiWindowRegistration.h" class RenderPath; @@ -34,9 +34,6 @@ public: void ActivatePath(RenderPath* component, float fadeSeconds = 0, wiColor fadeColor = wiColor(0,0,0,255)); inline RenderPath* GetActivePath(){ return activePath; } - // You can use this as a self-contained resource manager if you want to avoid using the wiResourceManager::GetGlobal() - wiResourceManager Content; - // Set the desired target framerate for the FixedUpdate() loop (default = 60) void setTargetFrameRate(float value) { targetFrameRate = value; } // Get the desired target framerate for the FixedUpdate() loop @@ -61,13 +58,8 @@ public: // This is where the application will render to the screen (backbuffer). It must render to the provided command list. virtual void Compose(wiGraphics::CommandList cmd); -#ifndef WINSTORE_SUPPORT - // You need to call this before calling Run() or Initialize() if you want to render to a Win32 window handle - void SetWindow(wiWindowRegistration::window_type window, HINSTANCE hInst = NULL); -#else - // You need to call this before calling Run() or Initialize() if you want to render to a UWP window - void SetWindow(wiWindowRegistration::window_type window); -#endif + // You need to call this before calling Run() or Initialize() if you want to render + void SetWindow(wiPlatform::window_type); struct InfoDisplayer diff --git a/WickedEngine/MainComponent_BindLua.cpp b/WickedEngine/MainComponent_BindLua.cpp index ac94f874a..2ee58fcab 100644 --- a/WickedEngine/MainComponent_BindLua.cpp +++ b/WickedEngine/MainComponent_BindLua.cpp @@ -7,13 +7,11 @@ #include "RenderPath3D_TiledForward_BindLua.h" #include "RenderPath3D_TiledDeferred_BindLua.h" #include "LoadingScreen_BindLua.h" -#include "wiResourceManager_BindLua.h" #include "wiProfiler.h" const char MainComponent_BindLua::className[] = "MainComponent"; Luna::FunctionType MainComponent_BindLua::methods[] = { - lunamethod(MainComponent_BindLua, GetContent), lunamethod(MainComponent_BindLua, GetActivePath), lunamethod(MainComponent_BindLua, SetActivePath), lunamethod(MainComponent_BindLua, SetFrameSkip), @@ -42,16 +40,6 @@ MainComponent_BindLua::~MainComponent_BindLua() { } -int MainComponent_BindLua::GetContent(lua_State *L) -{ - if (component == nullptr) - { - wiLua::SError(L, "GetContent() component is empty!"); - return 0; - } - Luna::push(L, new wiResourceManager_BindLua(&component->Content)); - return 1; -} int MainComponent_BindLua::GetActivePath(lua_State *L) { if (component == nullptr) diff --git a/WickedEngine/MainComponent_BindLua.h b/WickedEngine/MainComponent_BindLua.h index fc8ff8e6f..234955e00 100644 --- a/WickedEngine/MainComponent_BindLua.h +++ b/WickedEngine/MainComponent_BindLua.h @@ -16,7 +16,6 @@ public: MainComponent_BindLua(lua_State *L); ~MainComponent_BindLua(); - int GetContent(lua_State *L); int GetActivePath(lua_State *L); int SetActivePath(lua_State *L); int SetFrameSkip(lua_State *L); diff --git a/WickedEngine/Platform.h b/WickedEngine/Platform.h deleted file mode 100644 index 9fa86e4f6..000000000 --- a/WickedEngine/Platform.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#ifdef _WIN32 - -#define NOMINMAX -#include -#include - -#ifdef WINSTORE_SUPPORT -#include -#endif // WINSTORE_SUPPORT - -#endif // _WIN32 diff --git a/WickedEngine/RenderPath.h b/WickedEngine/RenderPath.h index 172576631..b1733b9c0 100644 --- a/WickedEngine/RenderPath.h +++ b/WickedEngine/RenderPath.h @@ -14,8 +14,6 @@ protected: // create resolution dependant resources virtual void ResizeBuffers() {} public: - wiResourceManager Content; - std::function onStart; std::function onStop; diff --git a/WickedEngine/RenderPath2D.cpp b/WickedEngine/RenderPath2D.cpp index cc32ec3e1..8224df48e 100644 --- a/WickedEngine/RenderPath2D.cpp +++ b/WickedEngine/RenderPath2D.cpp @@ -86,7 +86,6 @@ void RenderPath2D::Unload() { if (y.sprite != nullptr) { - y.sprite->Destroy(); delete y.sprite; } if (y.font != nullptr) diff --git a/WickedEngine/RenderPath2D_BindLua.cpp b/WickedEngine/RenderPath2D_BindLua.cpp index 32e9a01fc..3831149a8 100644 --- a/WickedEngine/RenderPath2D_BindLua.cpp +++ b/WickedEngine/RenderPath2D_BindLua.cpp @@ -1,5 +1,4 @@ #include "RenderPath2D_BindLua.h" -#include "wiResourceManager_BindLua.h" #include "wiSprite_BindLua.h" #include "wiFont_BindLua.h" @@ -10,7 +9,6 @@ using namespace std; const char RenderPath2D_BindLua::className[] = "RenderPath2D"; Luna::FunctionType RenderPath2D_BindLua::methods[] = { - lunamethod(RenderPath2D_BindLua, GetContent), lunamethod(RenderPath2D_BindLua, AddSprite), lunamethod(RenderPath2D_BindLua, AddFont), lunamethod(RenderPath2D_BindLua, RemoveSprite), diff --git a/WickedEngine/RenderPath3D.cpp b/WickedEngine/RenderPath3D.cpp index 59c235705..97144dca9 100644 --- a/WickedEngine/RenderPath3D.cpp +++ b/WickedEngine/RenderPath3D.cpp @@ -3,7 +3,7 @@ #include "wiImage.h" #include "wiHelper.h" #include "wiTextureHelper.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "ResourceMapping.h" #include "wiProfiler.h" @@ -458,7 +458,7 @@ void RenderPath3D::RenderOutline(const Texture& dstSceneRT, CommandList cmd) con } void RenderPath3D::RenderLightShafts(CommandList cmd) const { - XMVECTOR sunDirection = XMLoadFloat3(&wiSceneSystem::GetScene().weather.sunDirection); + XMVECTOR sunDirection = XMLoadFloat3(&wiScene::GetScene().weather.sunDirection); if (getLightShaftsEnabled() && XMVectorGetX(XMVector3Dot(sunDirection, wiRenderer::GetCamera().GetAt())) > 0) { GraphicsDevice* device = wiRenderer::GetDevice(); @@ -748,7 +748,7 @@ void RenderPath3D::RenderPostprocessChain(const Texture& srcSceneRT, const Textu { wiRenderer::Postprocess_Colorgrade( *rt_read, - colorGradingTex != nullptr ? *colorGradingTex : *wiTextureHelper::getColorGradeDefault(), + colorGradingTex != nullptr ? *colorGradingTex->texture : *wiTextureHelper::getColorGradeDefault(), *rt_write, cmd ); diff --git a/WickedEngine/RenderPath3D.h b/WickedEngine/RenderPath3D.h index 57f4d0c3e..9fa2b9463 100644 --- a/WickedEngine/RenderPath3D.h +++ b/WickedEngine/RenderPath3D.h @@ -2,6 +2,9 @@ #include "RenderPath2D.h" #include "wiRenderer.h" #include "wiGraphicsDevice.h" +#include "wiResourceManager.h" + +#include class RenderPath3D : public RenderPath2D @@ -39,7 +42,7 @@ private: bool outlineEnabled = false; bool chromaticAberrationEnabled = false; - const wiGraphics::Texture* colorGradingTex = nullptr; + std::shared_ptr colorGradingTex; uint32_t msaaSampleCount = 1; @@ -141,7 +144,7 @@ public: constexpr bool getOutlineEnabled() const { return outlineEnabled; } constexpr bool getChromaticAberrationEnabled() const { return chromaticAberrationEnabled; } - constexpr const wiGraphics::Texture* getColorGradingTexture() const { return colorGradingTex; } + constexpr const std::shared_ptr& getColorGradingTexture() const { return colorGradingTex; } constexpr uint32_t getMSAASampleCount() const { return msaaSampleCount; } @@ -177,7 +180,7 @@ public: constexpr void setOutlineEnabled(bool value) { outlineEnabled = value; } constexpr void setChromaticAberrationEnabled(bool value) { chromaticAberrationEnabled = value; } - constexpr void setColorGradingTexture(const wiGraphics::Texture* tex) { colorGradingTex = tex; } + void setColorGradingTexture(std::shared_ptr resource) { colorGradingTex = resource; } virtual void setMSAASampleCount(uint32_t value) { if (msaaSampleCount != value) { msaaSampleCount = value; ResizeBuffers(); } } diff --git a/WickedEngine/RenderPath3D_BindLua.cpp b/WickedEngine/RenderPath3D_BindLua.cpp index 791067945..6045288a5 100644 --- a/WickedEngine/RenderPath3D_BindLua.cpp +++ b/WickedEngine/RenderPath3D_BindLua.cpp @@ -1,5 +1,4 @@ #include "RenderPath3D_BindLua.h" -#include "wiResourceManager_BindLua.h" #include "Texture_BindLua.h" const char RenderPath3D_BindLua::className[] = "RenderPath3D"; @@ -20,7 +19,6 @@ Luna::FunctionType RenderPath3D_BindLua::methods[] = { lunamethod(RenderPath2D_BindLua, SetSpriteOrder), lunamethod(RenderPath2D_BindLua, SetFontOrder), - lunamethod(RenderPath3D_BindLua, GetContent), lunamethod(RenderPath3D_BindLua, Initialize), lunamethod(RenderPath_BindLua, OnStart), lunamethod(RenderPath_BindLua, OnStop), @@ -34,7 +32,6 @@ Luna::FunctionType RenderPath3D_BindLua::methods[] = { lunamethod(RenderPath3D_BindLua, SetFXAAEnabled), lunamethod(RenderPath3D_BindLua, SetBloomEnabled), lunamethod(RenderPath3D_BindLua, SetColorGradingEnabled), - lunamethod(RenderPath3D_BindLua, SetColorGradingTexture), lunamethod(RenderPath3D_BindLua, SetVolumeLightsEnabled), lunamethod(RenderPath3D_BindLua, SetLightShaftsEnabled), lunamethod(RenderPath3D_BindLua, SetLensFlareEnabled), @@ -162,24 +159,6 @@ int RenderPath3D_BindLua::SetColorGradingEnabled(lua_State* L) wiLua::SError(L, "SetColorGradingEnabled(bool value) not enough arguments!"); return 0; } -int RenderPath3D_BindLua::SetColorGradingTexture(lua_State* L) -{ - int argc = wiLua::SGetArgCount(L); - if (argc > 0) - { - Texture_BindLua* tex = Luna::lightcheck(L, 1); - if (tex != nullptr) - { - ((RenderPath3D*)component)->setColorGradingTexture(tex->texture); - } - else - wiLua::SError(L, "SetColorGradingTexture(Texture texture2D) argument is not a texture!"); - } - else - wiLua::SError(L, "SetColorGradingTexture(Texture texture2D) not enough arguments!"); - - return 0; -} int RenderPath3D_BindLua::SetVolumeLightsEnabled(lua_State* L) { if (component == nullptr) diff --git a/WickedEngine/RenderPath3D_BindLua.h b/WickedEngine/RenderPath3D_BindLua.h index 65332d2aa..46ecac5fa 100644 --- a/WickedEngine/RenderPath3D_BindLua.h +++ b/WickedEngine/RenderPath3D_BindLua.h @@ -22,7 +22,6 @@ public: int SetFXAAEnabled(lua_State* L); int SetBloomEnabled(lua_State* L); int SetColorGradingEnabled(lua_State* L); - int SetColorGradingTexture(lua_State* L); int SetVolumeLightsEnabled(lua_State* L); int SetLightShaftsEnabled(lua_State* L); int SetLensFlareEnabled(lua_State* L); diff --git a/WickedEngine/RenderPath3D_Deferred_BindLua.cpp b/WickedEngine/RenderPath3D_Deferred_BindLua.cpp index 47b507a49..9b2483f35 100644 --- a/WickedEngine/RenderPath3D_Deferred_BindLua.cpp +++ b/WickedEngine/RenderPath3D_Deferred_BindLua.cpp @@ -18,7 +18,6 @@ Luna::FunctionType RenderPath3D_Deferred_BindLua: lunamethod(RenderPath2D_BindLua, SetSpriteOrder), lunamethod(RenderPath2D_BindLua, SetFontOrder), - lunamethod(RenderPath_BindLua, GetContent), lunamethod(RenderPath_BindLua, Initialize), lunamethod(RenderPath_BindLua, OnStart), lunamethod(RenderPath_BindLua, OnStop), @@ -32,7 +31,6 @@ Luna::FunctionType RenderPath3D_Deferred_BindLua: lunamethod(RenderPath3D_BindLua, SetFXAAEnabled), lunamethod(RenderPath3D_BindLua, SetBloomEnabled), lunamethod(RenderPath3D_BindLua, SetColorGradingEnabled), - lunamethod(RenderPath3D_BindLua, SetColorGradingTexture), lunamethod(RenderPath3D_BindLua, SetVolumeLightsEnabled), lunamethod(RenderPath3D_BindLua, SetLightShaftsEnabled), lunamethod(RenderPath3D_BindLua, SetLensFlareEnabled), diff --git a/WickedEngine/RenderPath3D_Forward_BindLua.cpp b/WickedEngine/RenderPath3D_Forward_BindLua.cpp index a28b01d35..aefa1ef85 100644 --- a/WickedEngine/RenderPath3D_Forward_BindLua.cpp +++ b/WickedEngine/RenderPath3D_Forward_BindLua.cpp @@ -18,7 +18,6 @@ Luna::FunctionType RenderPath3D_Forward_BindLua::m lunamethod(RenderPath2D_BindLua, SetSpriteOrder), lunamethod(RenderPath2D_BindLua, SetFontOrder), - lunamethod(RenderPath_BindLua, GetContent), lunamethod(RenderPath_BindLua, Initialize), lunamethod(RenderPath_BindLua, OnStart), lunamethod(RenderPath_BindLua, OnStop), @@ -32,7 +31,6 @@ Luna::FunctionType RenderPath3D_Forward_BindLua::m lunamethod(RenderPath3D_BindLua, SetFXAAEnabled), lunamethod(RenderPath3D_BindLua, SetBloomEnabled), lunamethod(RenderPath3D_BindLua, SetColorGradingEnabled), - lunamethod(RenderPath3D_BindLua, SetColorGradingTexture), lunamethod(RenderPath3D_BindLua, SetVolumeLightsEnabled), lunamethod(RenderPath3D_BindLua, SetLightShaftsEnabled), lunamethod(RenderPath3D_BindLua, SetLensFlareEnabled), diff --git a/WickedEngine/RenderPath3D_PathTracing.cpp b/WickedEngine/RenderPath3D_PathTracing.cpp index 644aaf948..77c64ca33 100644 --- a/WickedEngine/RenderPath3D_PathTracing.cpp +++ b/WickedEngine/RenderPath3D_PathTracing.cpp @@ -6,10 +6,10 @@ #include "wiSprite.h" #include "ResourceMapping.h" #include "wiProfiler.h" -#include "wiSceneSystem.h" +#include "wiScene.h" using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; void RenderPath3D_PathTracing::ResizeBuffers() @@ -53,7 +53,7 @@ void RenderPath3D_PathTracing::ResizeBuffers() void RenderPath3D_PathTracing::Update(float dt) { - const Scene& scene = wiSceneSystem::GetScene(); + const Scene& scene = wiScene::GetScene(); if (wiRenderer::GetCamera().IsDirty()) { diff --git a/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp b/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp index 01484bafb..d9168f830 100644 --- a/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp +++ b/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp @@ -18,7 +18,6 @@ Luna::FunctionType RenderPath3D_TiledDeferre lunamethod(RenderPath2D_BindLua, SetSpriteOrder), lunamethod(RenderPath2D_BindLua, SetFontOrder), - lunamethod(RenderPath_BindLua, GetContent), lunamethod(RenderPath_BindLua, Initialize), lunamethod(RenderPath_BindLua, OnStart), lunamethod(RenderPath_BindLua, OnStop), @@ -32,7 +31,6 @@ Luna::FunctionType RenderPath3D_TiledDeferre lunamethod(RenderPath3D_BindLua, SetFXAAEnabled), lunamethod(RenderPath3D_BindLua, SetBloomEnabled), lunamethod(RenderPath3D_BindLua, SetColorGradingEnabled), - lunamethod(RenderPath3D_BindLua, SetColorGradingTexture), lunamethod(RenderPath3D_BindLua, SetVolumeLightsEnabled), lunamethod(RenderPath3D_BindLua, SetLightShaftsEnabled), lunamethod(RenderPath3D_BindLua, SetLensFlareEnabled), diff --git a/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp b/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp index c93fc8937..bc98de544 100644 --- a/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp +++ b/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp @@ -18,7 +18,6 @@ Luna::FunctionType RenderPath3D_TiledForward_ lunamethod(RenderPath2D_BindLua, SetSpriteOrder), lunamethod(RenderPath2D_BindLua, SetFontOrder), - lunamethod(RenderPath_BindLua, GetContent), lunamethod(RenderPath_BindLua, Initialize), lunamethod(RenderPath_BindLua, OnStart), lunamethod(RenderPath_BindLua, OnStop), @@ -32,7 +31,6 @@ Luna::FunctionType RenderPath3D_TiledForward_ lunamethod(RenderPath3D_BindLua, SetFXAAEnabled), lunamethod(RenderPath3D_BindLua, SetBloomEnabled), lunamethod(RenderPath3D_BindLua, SetColorGradingEnabled), - lunamethod(RenderPath3D_BindLua, SetColorGradingTexture), lunamethod(RenderPath3D_BindLua, SetVolumeLightsEnabled), lunamethod(RenderPath3D_BindLua, SetLightShaftsEnabled), lunamethod(RenderPath3D_BindLua, SetLensFlareEnabled), diff --git a/WickedEngine/RenderPath_BindLua.cpp b/WickedEngine/RenderPath_BindLua.cpp index 4484bc4c9..4e3477356 100644 --- a/WickedEngine/RenderPath_BindLua.cpp +++ b/WickedEngine/RenderPath_BindLua.cpp @@ -1,12 +1,10 @@ #include "RenderPath_BindLua.h" -#include "wiResourceManager_BindLua.h" using namespace std; const char RenderPath_BindLua::className[] = "RenderPath"; Luna::FunctionType RenderPath_BindLua::methods[] = { - lunamethod(RenderPath_BindLua, GetContent), lunamethod(RenderPath_BindLua, Initialize), lunamethod(RenderPath_BindLua, OnStart), lunamethod(RenderPath_BindLua, OnStop), @@ -32,17 +30,6 @@ RenderPath_BindLua::~RenderPath_BindLua() { } -int RenderPath_BindLua::GetContent(lua_State *L) -{ - if (component == nullptr) - { - wiLua::SError(L, "GetContent() component is empty!"); - return 0; - } - Luna::push(L, new wiResourceManager_BindLua(&component->Content)); - return 1; -} - int RenderPath_BindLua::Initialize(lua_State* L) { if (component == nullptr) diff --git a/WickedEngine/RenderPath_BindLua.h b/WickedEngine/RenderPath_BindLua.h index 9e178d599..82b7d6532 100644 --- a/WickedEngine/RenderPath_BindLua.h +++ b/WickedEngine/RenderPath_BindLua.h @@ -15,8 +15,6 @@ public: RenderPath_BindLua(lua_State *L); ~RenderPath_BindLua(); - virtual int GetContent(lua_State* L); - virtual int Initialize(lua_State* L); virtual int OnStart(lua_State* L); diff --git a/WickedEngine/WickedEngine.h b/WickedEngine/WickedEngine.h index 2155545f0..0a6fc85a5 100644 --- a/WickedEngine/WickedEngine.h +++ b/WickedEngine/WickedEngine.h @@ -27,7 +27,7 @@ #include "wiImage.h" #include "wiSprite.h" #include "wiFont.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiEmittedParticle.h" #include "wiHairParticle.h" #include "wiRenderer.h" diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems b/WickedEngine/WickedEngine_SOURCE.vcxitems similarity index 98% rename from WickedEngine/WickedEngine_SHARED.vcxitems rename to WickedEngine/WickedEngine_SOURCE.vcxitems index 26c66ebca..86865d0be 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems +++ b/WickedEngine/WickedEngine_SOURCE.vcxitems @@ -4,6 +4,7 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) true {45d41acc-2c3c-43d2-bc10-02aa73ffc7c7} + WickedEngine_SOURCE @@ -229,7 +230,6 @@ - @@ -342,13 +342,13 @@ - + @@ -356,9 +356,9 @@ - - - + + + @@ -367,7 +367,6 @@ - @@ -672,7 +671,6 @@ - @@ -684,9 +682,9 @@ - - - + + + @@ -694,7 +692,6 @@ - diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems.filters b/WickedEngine/WickedEngine_SOURCE.vcxitems.filters similarity index 98% rename from WickedEngine/WickedEngine_SHARED.vcxitems.filters rename to WickedEngine/WickedEngine_SOURCE.vcxitems.filters index 38dd0b133..fc86163a3 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems.filters +++ b/WickedEngine/WickedEngine_SOURCE.vcxitems.filters @@ -195,9 +195,6 @@ ENGINE\Scripting\LuaBindings - - ENGINE\Scripting\LuaBindings - ENGINE\Scripting\LuaBindings @@ -996,12 +993,6 @@ ENGINE\System - - ENGINE\System - - - ENGINE\System - ENGINE\Graphics\GPUMapping @@ -1014,9 +1005,6 @@ ENGINE\Physics - - ENGINE\Scripting\LuaBindings - ENGINE\Graphics @@ -1083,9 +1071,6 @@ ENGINE\System - - ENGINE\System - ENGINE\Helpers @@ -1131,8 +1116,17 @@ ENGINE\Scripting\LuaBindings - - ENGINE\Common + + ENGINE\System + + + ENGINE\System + + + ENGINE\Scripting\LuaBindings + + + ENGINE\System @@ -1274,9 +1268,6 @@ ENGINE\Scripting\LuaBindings - - ENGINE\Scripting\LuaBindings - ENGINE\Scripting\LuaBindings @@ -1796,18 +1787,9 @@ UTILITY - - ENGINE\System - - - ENGINE\System - ENGINE\Physics - - ENGINE\Scripting\LuaBindings - ENGINE\Graphics @@ -1868,9 +1850,6 @@ ENGINE\System - - ENGINE\System - ENGINE\Scripting\LuaBindings @@ -1901,6 +1880,15 @@ ENGINE\Scripting\LuaBindings + + ENGINE\System + + + ENGINE\System + + + ENGINE\Scripting\LuaBindings + diff --git a/WickedEngine/WickedEngine_UWP.vcxproj b/WickedEngine/WickedEngine_UWP.vcxproj index 4d6412beb..c4b86de8b 100644 --- a/WickedEngine/WickedEngine_UWP.vcxproj +++ b/WickedEngine/WickedEngine_UWP.vcxproj @@ -76,7 +76,7 @@ - + diff --git a/WickedEngine/WickedEngine_Windows.vcxproj b/WickedEngine/WickedEngine_Windows.vcxproj index b2e1bdf53..f159085a4 100644 --- a/WickedEngine/WickedEngine_Windows.vcxproj +++ b/WickedEngine/WickedEngine_Windows.vcxproj @@ -55,7 +55,7 @@ - + diff --git a/WickedEngine/lightingHF.hlsli b/WickedEngine/lightingHF.hlsli index cbccd5714..f16d54d03 100644 --- a/WickedEngine/lightingHF.hlsli +++ b/WickedEngine/lightingHF.hlsli @@ -154,11 +154,12 @@ inline void PointLight(in ShaderEntity light, in Surface surface, inout Lighting { float3 L = light.positionWS - surface.P; const float dist2 = dot(L, L); - const float dist = sqrt(dist2); + const float range2 = light.range * light.range; [branch] - if (dist < light.range) + if (dist2 < range2) { + const float dist = sqrt(dist2); L /= dist; SurfaceToLight surfaceToLight = CreateSurfaceToLight(surface, L); @@ -180,7 +181,6 @@ inline void PointLight(in ShaderEntity light, in Surface surface, inout Lighting { float3 lightColor = light.GetColor().rgb * light.energy * sh; - const float range2 = light.range * light.range; const float att = saturate(1.0 - (dist2 / range2)); const float attenuation = att * att; lightColor *= attenuation; @@ -195,11 +195,12 @@ inline void SpotLight(in ShaderEntity light, in Surface surface, inout Lighting { float3 L = light.positionWS - surface.P; const float dist2 = dot(L, L); - const float dist = sqrt(dist2); + const float range2 = light.range * light.range; [branch] - if (dist < light.range) + if (dist2 < range2) { + const float dist = sqrt(dist2); L /= dist; SurfaceToLight surfaceToLight = CreateSurfaceToLight(surface, L); @@ -235,7 +236,6 @@ inline void SpotLight(in ShaderEntity light, in Surface surface, inout Lighting { float3 lightColor = light.GetColor().rgb * light.energy * sh; - const float range2 = light.range * light.range; const float att = saturate(1.0 - (dist2 / range2)); float attenuation = att * att; attenuation *= saturate((1.0 - (1.0 - SpotFactor) * 1.0 / (1.0 - spotCutOff))); diff --git a/WickedEngine/wiArchive.cpp b/WickedEngine/wiArchive.cpp index 6ab37a9d0..76befe87a 100644 --- a/WickedEngine/wiArchive.cpp +++ b/WickedEngine/wiArchive.cpp @@ -7,7 +7,7 @@ using namespace std; // this should always be only INCREMENTED and only if a new serialization is implemeted somewhere! -uint64_t __archiveVersion = 31; +uint64_t __archiveVersion = 32; // this is the version number of which below the archive is not compatible with the current version uint64_t __archiveVersionBarrier = 22; diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp index b1a3bc96d..8c46fe484 100644 --- a/WickedEngine/wiEmittedParticle.cpp +++ b/WickedEngine/wiEmittedParticle.cpp @@ -1,6 +1,6 @@ #include "wiEmittedParticle.h" #include "wiMath.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiRenderer.h" #include "wiResourceManager.h" #include "wiIntersect.h" @@ -17,24 +17,24 @@ using namespace std; using namespace wiGraphics; -namespace wiSceneSystem +namespace wiScene { -static const VertexShader* vertexShader = nullptr; -static const PixelShader* pixelShader[wiEmittedParticle::PARTICLESHADERTYPE_COUNT] = {}; -static const ComputeShader* kickoffUpdateCS = nullptr; -static const ComputeShader* finishUpdateCS = nullptr; -static const ComputeShader* emitCS = nullptr; -static const ComputeShader* emitCS_FROMMESH = nullptr; -static const ComputeShader* sphpartitionCS = nullptr; -static const ComputeShader* sphpartitionoffsetsCS = nullptr; -static const ComputeShader* sphpartitionoffsetsresetCS = nullptr; -static const ComputeShader* sphdensityCS = nullptr; -static const ComputeShader* sphforceCS = nullptr; -static const ComputeShader* simulateCS = nullptr; -static const ComputeShader* simulateCS_SORTING = nullptr; -static const ComputeShader* simulateCS_DEPTHCOLLISIONS = nullptr; -static const ComputeShader* simulateCS_SORTING_DEPTHCOLLISIONS = nullptr; +static VertexShader vertexShader; +static PixelShader pixelShader[wiEmittedParticle::PARTICLESHADERTYPE_COUNT]; +static ComputeShader kickoffUpdateCS; +static ComputeShader finishUpdateCS; +static ComputeShader emitCS; +static ComputeShader emitCS_FROMMESH; +static ComputeShader sphpartitionCS; +static ComputeShader sphpartitionoffsetsCS; +static ComputeShader sphpartitionoffsetsresetCS; +static ComputeShader sphdensityCS; +static ComputeShader sphforceCS; +static ComputeShader simulateCS; +static ComputeShader simulateCS_SORTING; +static ComputeShader simulateCS_DEPTHCOLLISIONS; +static ComputeShader simulateCS_SORTING_DEPTHCOLLISIONS; static BlendState blendStates[BLENDMODE_COUNT]; static RasterizerState rasterizerState; @@ -325,7 +325,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat // kick off updating, set up state device->EventBegin("KickOff Update", cmd); - device->BindComputeShader(kickoffUpdateCS, cmd); + device->BindComputeShader(&kickoffUpdateCS, cmd); device->Dispatch(1, 1, 1, cmd); device->Barrier(&GPUBarrier::Memory(), 1, cmd); device->EventEnd(cmd); @@ -334,7 +334,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat // emit the required amount if there are free slots in dead list device->EventBegin("Emit", cmd); - device->BindComputeShader(mesh == nullptr ? emitCS : emitCS_FROMMESH, cmd); + device->BindComputeShader(mesh == nullptr ? &emitCS : &emitCS_FROMMESH, cmd); device->DispatchIndirect(indirectBuffers.get(), ARGUMENTBUFFER_OFFSET_DISPATCHEMIT, cmd); device->Barrier(&GPUBarrier::Memory(), 1, cmd); device->EventEnd(cmd); @@ -349,7 +349,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat #ifdef SPH_USE_ACCELERATION_GRID // 1.) Assign particles into partitioning grid: device->EventBegin("Partitioning", cmd); - device->BindComputeShader(sphpartitionCS, cmd); + device->BindComputeShader(&sphpartitionCS, cmd); device->UnbindUAVs(0, 8, cmd); GPUResource* res_partition[] = { aliveList[0].get(), // CURRENT alivelist @@ -370,7 +370,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat // 3.) Reset grid cell offset buffer with invalid offsets (max uint): device->EventBegin("PartitionOffsetsReset", cmd); - device->BindComputeShader(sphpartitionoffsetsresetCS, cmd); + device->BindComputeShader(&sphpartitionoffsetsresetCS, cmd); device->UnbindUAVs(0, 8, cmd); GPUResource* uav_partitionoffsets[] = { sphPartitionCellOffsets.get(), @@ -382,7 +382,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat // 4.) Assemble grid cell offsets from the sorted particle index list <--> grid cell index list connection: device->EventBegin("PartitionOffsets", cmd); - device->BindComputeShader(sphpartitionoffsetsCS, cmd); + device->BindComputeShader(&sphpartitionoffsetsCS, cmd); GPUResource* res_partitionoffsets[] = { aliveList[0].get(), // CURRENT alivelist counterBuffer.get(), @@ -397,7 +397,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat // 5.) Compute particle density field: device->EventBegin("Density Evaluation", cmd); - device->BindComputeShader(sphdensityCS, cmd); + device->BindComputeShader(&sphdensityCS, cmd); device->UnbindUAVs(0, 8, cmd); GPUResource* res_density[] = { aliveList[0].get(), // CURRENT alivelist @@ -417,7 +417,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat // 6.) Compute particle pressure forces: device->EventBegin("Force Evaluation", cmd); - device->BindComputeShader(sphforceCS, cmd); + device->BindComputeShader(&sphforceCS, cmd); device->UnbindUAVs(0, 8, cmd); GPUResource* res_force[] = { aliveList[0].get(), // CURRENT alivelist @@ -452,22 +452,22 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat { if (IsDepthCollisionEnabled()) { - device->BindComputeShader(simulateCS_SORTING_DEPTHCOLLISIONS, cmd); + device->BindComputeShader(&simulateCS_SORTING_DEPTHCOLLISIONS, cmd); } else { - device->BindComputeShader(simulateCS_SORTING, cmd); + device->BindComputeShader(&simulateCS_SORTING, cmd); } } else { if (IsDepthCollisionEnabled()) { - device->BindComputeShader(simulateCS_DEPTHCOLLISIONS, cmd); + device->BindComputeShader(&simulateCS_DEPTHCOLLISIONS, cmd); } else { - device->BindComputeShader(simulateCS, cmd); + device->BindComputeShader(&simulateCS, cmd); } } device->DispatchIndirect(indirectBuffers.get(), ARGUMENTBUFFER_OFFSET_DISPATCHSIMULATION, cmd); @@ -554,7 +554,7 @@ void wiEmittedParticle::UpdateGPU(const TransformComponent& transform, const Mat { // finish updating, update draw argument buffer: device->EventBegin("FinishUpdate", cmd); - device->BindComputeShader(finishUpdateCS, cmd); + device->BindComputeShader(&finishUpdateCS, cmd); GPUResource* res[] = { counterBuffer.get(), @@ -618,25 +618,25 @@ void wiEmittedParticle::LoadShaders() { std::string path = wiRenderer::GetShaderPath(); - vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticleVS.cso", wiResourceManager::VERTEXSHADER)); + wiRenderer::LoadVertexShader(vertexShader, "emittedparticleVS.cso"); - pixelShader[SOFT] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_soft.cso", wiResourceManager::PIXELSHADER)); - pixelShader[SOFT_DISTORTION] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_soft_distortion.cso", wiResourceManager::PIXELSHADER)); - pixelShader[SIMPLEST] = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticlePS_simplest.cso", wiResourceManager::PIXELSHADER)); + wiRenderer::LoadPixelShader(pixelShader[SOFT], "emittedparticlePS_soft.cso"); + wiRenderer::LoadPixelShader(pixelShader[SOFT_DISTORTION], "emittedparticlePS_soft_distortion.cso"); + wiRenderer::LoadPixelShader(pixelShader[SIMPLEST], "emittedparticlePS_simplest.cso"); - kickoffUpdateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_kickoffUpdateCS.cso", wiResourceManager::COMPUTESHADER)); - finishUpdateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_finishUpdateCS.cso", wiResourceManager::COMPUTESHADER)); - emitCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_emitCS.cso", wiResourceManager::COMPUTESHADER)); - emitCS_FROMMESH = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_emitCS_FROMMESH.cso", wiResourceManager::COMPUTESHADER)); - sphpartitionCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionCS.cso", wiResourceManager::COMPUTESHADER)); - sphpartitionoffsetsCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionoffsetsCS.cso", wiResourceManager::COMPUTESHADER)); - sphpartitionoffsetsresetCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphpartitionoffsetsresetCS.cso", wiResourceManager::COMPUTESHADER)); - sphdensityCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphdensityCS.cso", wiResourceManager::COMPUTESHADER)); - sphforceCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_sphforceCS.cso", wiResourceManager::COMPUTESHADER)); - simulateCS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS.cso", wiResourceManager::COMPUTESHADER)); - simulateCS_SORTING = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_SORTING.cso", wiResourceManager::COMPUTESHADER)); - simulateCS_DEPTHCOLLISIONS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_DEPTHCOLLISIONS.cso", wiResourceManager::COMPUTESHADER)); - simulateCS_SORTING_DEPTHCOLLISIONS = static_cast(wiResourceManager::GetShaderManager().add(path + "emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.cso", wiResourceManager::COMPUTESHADER)); + wiRenderer::LoadComputeShader(kickoffUpdateCS, "emittedparticle_kickoffUpdateCS.cso"); + wiRenderer::LoadComputeShader(finishUpdateCS, "emittedparticle_finishUpdateCS.cso"); + wiRenderer::LoadComputeShader(emitCS, "emittedparticle_emitCS.cso"); + wiRenderer::LoadComputeShader(emitCS_FROMMESH, "emittedparticle_emitCS_FROMMESH.cso"); + wiRenderer::LoadComputeShader(sphpartitionCS, "emittedparticle_sphpartitionCS.cso"); + wiRenderer::LoadComputeShader(sphpartitionoffsetsCS, "emittedparticle_sphpartitionoffsetsCS.cso"); + wiRenderer::LoadComputeShader(sphpartitionoffsetsresetCS, "emittedparticle_sphpartitionoffsetsresetCS.cso"); + wiRenderer::LoadComputeShader(sphdensityCS, "emittedparticle_sphdensityCS.cso"); + wiRenderer::LoadComputeShader(sphforceCS, "emittedparticle_sphforceCS.cso"); + wiRenderer::LoadComputeShader(simulateCS, "emittedparticle_simulateCS.cso"); + wiRenderer::LoadComputeShader(simulateCS_SORTING, "emittedparticle_simulateCS_SORTING.cso"); + wiRenderer::LoadComputeShader(simulateCS_DEPTHCOLLISIONS, "emittedparticle_simulateCS_DEPTHCOLLISIONS.cso"); + wiRenderer::LoadComputeShader(simulateCS_SORTING_DEPTHCOLLISIONS, "emittedparticle_simulateCS_SORTING_DEPTHCOLLISIONS.cso"); GraphicsDevice* device = wiRenderer::GetDevice(); @@ -644,23 +644,23 @@ void wiEmittedParticle::LoadShaders() for (int i = 0; i < BLENDMODE_COUNT; ++i) { PipelineStateDesc desc; - desc.vs = vertexShader; + desc.vs = &vertexShader; desc.bs = &blendStates[i]; desc.rs = &rasterizerState; desc.dss = &depthStencilState; - desc.ps = pixelShader[SOFT]; + desc.ps = &pixelShader[SOFT]; device->CreatePipelineState(&desc, &PSO[i][SOFT]); - desc.ps = pixelShader[SOFT_DISTORTION]; + desc.ps = &pixelShader[SOFT_DISTORTION]; device->CreatePipelineState(&desc, &PSO[i][SOFT_DISTORTION]); - desc.ps = pixelShader[SIMPLEST]; + desc.ps = &pixelShader[SIMPLEST]; device->CreatePipelineState(&desc, &PSO[i][SIMPLEST]); } { PipelineStateDesc desc; - desc.vs = vertexShader; - desc.ps = pixelShader[SIMPLEST]; + desc.vs = &vertexShader; + desc.ps = &pixelShader[SIMPLEST]; desc.bs = &blendStates[BLENDMODE_ALPHA]; desc.rs = &wireFrameRS; desc.dss = &depthStencilState; diff --git a/WickedEngine/wiEmittedParticle.h b/WickedEngine/wiEmittedParticle.h index 9e2f5a708..bcfa3821a 100644 --- a/WickedEngine/wiEmittedParticle.h +++ b/WickedEngine/wiEmittedParticle.h @@ -4,14 +4,14 @@ #include "wiIntersect.h" #include "ShaderInterop_EmittedParticle.h" #include "wiEnums.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" #include "wiECS.h" #include class wiArchive; -namespace wiSceneSystem +namespace wiScene { class wiEmittedParticle diff --git a/WickedEngine/wiFFTGenerator.cpp b/WickedEngine/wiFFTGenerator.cpp index 88082a0ae..9a6ecda31 100644 --- a/WickedEngine/wiFFTGenerator.cpp +++ b/WickedEngine/wiFFTGenerator.cpp @@ -11,9 +11,8 @@ using namespace wiGraphics; namespace wiFFTGenerator { - - static const ComputeShader* pRadix008A_CS = nullptr; - static const ComputeShader* pRadix008A_CS2 = nullptr; + ComputeShader radix008A_CS; + ComputeShader radix008A_CS2; #define TWO_PI 6.283185307179586476925286766559 @@ -46,11 +45,11 @@ namespace wiFFTGenerator // Shader if (istride > 1) { - device->BindComputeShader(pRadix008A_CS, cmd); + device->BindComputeShader(&radix008A_CS, cmd); } else { - device->BindComputeShader(pRadix008A_CS2, cmd); + device->BindComputeShader(&radix008A_CS2, cmd); } // Execute @@ -204,8 +203,8 @@ namespace wiFFTGenerator { std::string path = wiRenderer::GetShaderPath(); - pRadix008A_CS = static_cast(wiResourceManager::GetShaderManager().add(path + "fft_512x512_c2c_CS.cso", wiResourceManager::COMPUTESHADER)); - pRadix008A_CS2 = static_cast(wiResourceManager::GetShaderManager().add(path + "fft_512x512_c2c_v2_CS.cso", wiResourceManager::COMPUTESHADER)); + wiRenderer::LoadComputeShader(radix008A_CS, "fft_512x512_c2c_CS.cso"); + wiRenderer::LoadComputeShader(radix008A_CS2, "fft_512x512_c2c_v2_CS.cso"); } } diff --git a/WickedEngine/wiFont.cpp b/WickedEngine/wiFont.cpp index bcd828e82..fa9ace377 100644 --- a/WickedEngine/wiFont.cpp +++ b/WickedEngine/wiFont.cpp @@ -29,7 +29,7 @@ using namespace wiRectPacker; namespace wiFont_Internal { - std::string FONTPATH = "fonts/"; + std::string FONTPATH = "../WickedEngine/fonts/"; GPUBuffer indexBuffer; GPUBuffer constantBuffer; BlendState blendState; @@ -38,8 +38,8 @@ namespace wiFont_Internal Sampler sampler; VertexLayout vertexLayout; - const VertexShader *vertexShader = nullptr; - const PixelShader *pixelShader = nullptr; + VertexShader vertexShader; + PixelShader pixelShader; PipelineState PSO; atomic_bool initialized = false; @@ -306,17 +306,16 @@ void wiFont::LoadShaders() { "POSITION", 0, FORMAT_R16G16_SINT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, FORMAT_R16G16_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, }; - vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "fontVS.cso", wiResourceManager::VERTEXSHADER)); - - wiRenderer::GetDevice()->CreateInputLayout(layout, arraysize(layout), &vertexShader->code, &vertexLayout); + wiRenderer::LoadVertexShader(vertexShader, "fontVS.cso"); + wiRenderer::GetDevice()->CreateInputLayout(layout, arraysize(layout), &vertexShader.code, &vertexLayout); - pixelShader = static_cast(wiResourceManager::GetShaderManager().add(path + "fontPS.cso", wiResourceManager::PIXELSHADER)); + wiRenderer::LoadPixelShader(pixelShader, "fontPS.cso"); PipelineStateDesc desc; - desc.vs = vertexShader; - desc.ps = pixelShader; + desc.vs = &vertexShader; + desc.ps = &pixelShader; desc.il = &vertexLayout; desc.bs = &blendState; desc.dss = &depthStencilState; @@ -433,10 +432,14 @@ const Texture* wiFont::GetAtlas() { return &texture; } -std::string& wiFont::GetFontPath() +const std::string& wiFont::GetFontPath() { return FONTPATH; } +void wiFont::SetFontPath(const std::string& path) +{ + FONTPATH = path; +} int wiFont::AddFontStyle(const string& fontName) { for (size_t i = 0; i < fontStyles.size(); i++) diff --git a/WickedEngine/wiFont.h b/WickedEngine/wiFont.h index b32f2fe09..bf599dafb 100644 --- a/WickedEngine/wiFont.h +++ b/WickedEngine/wiFont.h @@ -41,8 +41,10 @@ public: static void LoadShaders(); static const wiGraphics::Texture* GetAtlas(); - // Returns the font path that can be modified - static std::string& GetFontPath(); + // Returns the font directory + static const std::string& GetFontPath(); + // Sets the font directory + static void SetFontPath(const std::string& path); // Create a font. Returns fontStyleID that is reusable. If font already exists, just return its ID static int AddFontStyle(const std::string& fontName); diff --git a/WickedEngine/wiGPUBVH.cpp b/WickedEngine/wiGPUBVH.cpp index da5f6d29d..2b647751f 100644 --- a/WickedEngine/wiGPUBVH.cpp +++ b/WickedEngine/wiGPUBVH.cpp @@ -1,5 +1,5 @@ #include "wiGPUBVH.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiRenderer.h" #include "ShaderInterop_BVH.h" #include "wiProfiler.h" @@ -15,7 +15,7 @@ using namespace std; using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; using namespace wiECS; enum CSTYPES_BVH @@ -25,8 +25,7 @@ enum CSTYPES_BVH CSTYPE_BVH_PROPAGATEAABB, CSTYPE_BVH_COUNT }; -static const ComputeShader* computeShaders[CSTYPE_BVH_COUNT] = {}; - +static ComputeShader computeShaders[CSTYPE_BVH_COUNT]; static GPUBuffer constantBuffer; @@ -374,7 +373,7 @@ void wiGPUBVH::Build(const Scene& scene, CommandList cmd) device->EventBegin("BVH - Primitive Builder", cmd); { - device->BindComputeShader(computeShaders[CSTYPE_BVH_PRIMITIVES], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_BVH_PRIMITIVES], cmd); GPUResource* uavs[] = { &primitiveIDBuffer, &primitiveBuffer, @@ -436,7 +435,7 @@ void wiGPUBVH::Build(const Scene& scene, CommandList cmd) device->EventBegin("BVH - Build Hierarchy", cmd); { - device->BindComputeShader(computeShaders[CSTYPE_BVH_HIERARCHY], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_BVH_HIERARCHY], cmd); GPUResource* uavs[] = { &bvhNodeBuffer, &bvhParentBuffer, @@ -462,7 +461,7 @@ void wiGPUBVH::Build(const Scene& scene, CommandList cmd) { device->Barrier(&GPUBarrier::Memory(), 1, cmd); - device->BindComputeShader(computeShaders[CSTYPE_BVH_PROPAGATEAABB], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_BVH_PROPAGATEAABB], cmd); GPUResource* uavs[] = { &bvhNodeBuffer, &bvhFlagBuffer, @@ -591,7 +590,7 @@ void wiGPUBVH::LoadShaders() { string SHADERPATH = wiRenderer::GetShaderPath(); - computeShaders[CSTYPE_BVH_PRIMITIVES] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_primitivesCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_BVH_HIERARCHY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_hierarchyCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_BVH_PROPAGATEAABB] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bvh_propagateaabbCS.cso", wiResourceManager::COMPUTESHADER)); + wiRenderer::LoadComputeShader(computeShaders[CSTYPE_BVH_PRIMITIVES], "bvh_primitivesCS.cso"); + wiRenderer::LoadComputeShader(computeShaders[CSTYPE_BVH_HIERARCHY], "bvh_hierarchyCS.cso"); + wiRenderer::LoadComputeShader(computeShaders[CSTYPE_BVH_PROPAGATEAABB], "bvh_propagateaabbCS.cso"); } diff --git a/WickedEngine/wiGPUBVH.h b/WickedEngine/wiGPUBVH.h index bbb389276..2b6377e24 100644 --- a/WickedEngine/wiGPUBVH.h +++ b/WickedEngine/wiGPUBVH.h @@ -1,7 +1,7 @@ #pragma once #include "CommonInclude.h" #include "wiGraphicsDevice.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" #include "wiRectPacker.h" #include "ShaderInterop_Renderer.h" @@ -30,10 +30,10 @@ private: std::vector materialArray; std::unordered_map storedTextures; std::unordered_set sceneTextures; - void UpdateGlobalMaterialResources(const wiSceneSystem::Scene& scene, wiGraphics::CommandList cmd); + void UpdateGlobalMaterialResources(const wiScene::Scene& scene, wiGraphics::CommandList cmd); public: - void Build(const wiSceneSystem::Scene& scene, wiGraphics::CommandList cmd); + void Build(const wiScene::Scene& scene, wiGraphics::CommandList cmd); void Bind(wiGraphics::SHADERSTAGE stage, wiGraphics::CommandList cmd) const; static void LoadShaders(); diff --git a/WickedEngine/wiGPUSortLib.cpp b/WickedEngine/wiGPUSortLib.cpp index 428580a16..85c78596f 100644 --- a/WickedEngine/wiGPUSortLib.cpp +++ b/WickedEngine/wiGPUSortLib.cpp @@ -9,10 +9,10 @@ namespace wiGPUSortLib { static GPUBuffer indirectBuffer; static GPUBuffer sortCB; - static const ComputeShader* kickoffSortCS = nullptr; - static const ComputeShader* sortCS = nullptr; - static const ComputeShader* sortInnerCS = nullptr; - static const ComputeShader* sortStepCS = nullptr; + static ComputeShader kickoffSortCS; + static ComputeShader sortCS; + static ComputeShader sortInnerCS; + static ComputeShader sortStepCS; void Initialize() { @@ -39,10 +39,10 @@ namespace wiGPUSortLib { std::string path = wiRenderer::GetShaderPath(); - kickoffSortCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_kickoffSortCS.cso", wiResourceManager::COMPUTESHADER)); - sortCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortCS.cso", wiResourceManager::COMPUTESHADER)); - sortInnerCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortInnerCS.cso", wiResourceManager::COMPUTESHADER)); - sortStepCS = static_cast(wiResourceManager::GetShaderManager().add(path + "gpusortlib_sortStepCS.cso", wiResourceManager::COMPUTESHADER)); + wiRenderer::LoadComputeShader(kickoffSortCS, "gpusortlib_kickoffSortCS.cso"); + wiRenderer::LoadComputeShader(sortCS, "gpusortlib_sortCS.cso"); + wiRenderer::LoadComputeShader(sortInnerCS, "gpusortlib_sortInnerCS.cso"); + wiRenderer::LoadComputeShader(sortStepCS, "gpusortlib_sortStepCS.cso"); } @@ -81,7 +81,7 @@ namespace wiGPUSortLib // initialize sorting arguments: { - device->BindComputeShader(kickoffSortCS, cmd); + device->BindComputeShader(&kickoffSortCS, cmd); const GPUResource* res[] = { &counterBuffer_read, @@ -138,7 +138,7 @@ namespace wiGPUSortLib } // sort all buffers of size 512 (and presort bigger ones) - device->BindComputeShader(sortCS, cmd); + device->BindComputeShader(&sortCS, cmd); device->DispatchIndirect(&indirectBuffer, 0, cmd); device->Barrier(&GPUBarrier::Memory(), 1, cmd); } @@ -149,7 +149,7 @@ namespace wiGPUSortLib // Incremental sorting: bDone = true; - device->BindComputeShader(sortStepCS, cmd); + device->BindComputeShader(&sortStepCS, cmd); // prepare thread group description data uint32_t numThreadGroups = 0; @@ -189,7 +189,7 @@ namespace wiGPUSortLib device->Barrier(&GPUBarrier::Memory(), 1, cmd); } - device->BindComputeShader(sortInnerCS, cmd); + device->BindComputeShader(&sortInnerCS, cmd); device->Dispatch(numThreadGroups, 1, 1, cmd); device->Barrier(&GPUBarrier::Memory(), 1, cmd); diff --git a/WickedEngine/wiGUI.h b/WickedEngine/wiGUI.h index 828c9567a..c618df058 100644 --- a/WickedEngine/wiGUI.h +++ b/WickedEngine/wiGUI.h @@ -1,7 +1,7 @@ #pragma once #include "CommonInclude.h" #include "wiGraphicsDevice.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include @@ -9,7 +9,7 @@ class wiHashString; class wiWidget; -class wiGUI : public wiSceneSystem::TransformComponent +class wiGUI : public wiScene::TransformComponent { friend class wiWidget; private: diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index 8b98ba8e5..2f63645d1 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -1076,7 +1076,7 @@ const void* const __nullBlob[128] = {}; // this is initialized to nullptrs and u // Engine functions -GraphicsDevice_DX11::GraphicsDevice_DX11(wiWindowRegistration::window_type window, bool fullscreen, bool debuglayer) +GraphicsDevice_DX11::GraphicsDevice_DX11(wiPlatform::window_type window, bool fullscreen, bool debuglayer) { DEBUGDEVICE = debuglayer; FULLSCREEN = fullscreen; diff --git a/WickedEngine/wiGraphicsDevice_DX11.h b/WickedEngine/wiGraphicsDevice_DX11.h index 998e27eac..7bb50af54 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.h +++ b/WickedEngine/wiGraphicsDevice_DX11.h @@ -1,7 +1,7 @@ #pragma once #include "CommonInclude.h" #include "wiGraphicsDevice.h" -#include "wiWindowRegistration.h" +#include "wiPlatform.h" #include "wiContainers.h" #include @@ -65,7 +65,7 @@ namespace wiGraphics wiContainers::ThreadSafeRingBuffer active_commandlists; public: - GraphicsDevice_DX11(wiWindowRegistration::window_type window, bool fullscreen = false, bool debuglayer = false); + GraphicsDevice_DX11(wiPlatform::window_type window, bool fullscreen = false, bool debuglayer = false); virtual ~GraphicsDevice_DX11(); bool CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *pBuffer) override; diff --git a/WickedEngine/wiGraphicsDevice_DX12.cpp b/WickedEngine/wiGraphicsDevice_DX12.cpp index e2df3d870..2e870d23e 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.cpp +++ b/WickedEngine/wiGraphicsDevice_DX12.cpp @@ -1353,7 +1353,7 @@ namespace wiGraphics } // Engine functions - GraphicsDevice_DX12::GraphicsDevice_DX12(wiWindowRegistration::window_type window, bool fullscreen, bool debuglayer) + GraphicsDevice_DX12::GraphicsDevice_DX12(wiPlatform::window_type window, bool fullscreen, bool debuglayer) { DEBUGDEVICE = debuglayer; FULLSCREEN = fullscreen; diff --git a/WickedEngine/wiGraphicsDevice_DX12.h b/WickedEngine/wiGraphicsDevice_DX12.h index c44cbf5db..cc8f011e2 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.h +++ b/WickedEngine/wiGraphicsDevice_DX12.h @@ -1,7 +1,7 @@ #pragma once #include "CommonInclude.h" #include "wiGraphicsDevice.h" -#include "wiWindowRegistration.h" +#include "wiPlatform.h" #include "wiSpinLock.h" #include "wiContainers.h" #include "wiGraphicsDevice_SharedInternals.h" @@ -227,7 +227,7 @@ namespace wiGraphics std::unordered_map mem_allocations; public: - GraphicsDevice_DX12(wiWindowRegistration::window_type window, bool fullscreen = false, bool debuglayer = false); + GraphicsDevice_DX12(wiPlatform::window_type window, bool fullscreen = false, bool debuglayer = false); virtual ~GraphicsDevice_DX12(); bool CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *pBuffer) override; diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.cpp b/WickedEngine/wiGraphicsDevice_Vulkan.cpp index 83625b07b..f88105ae4 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.cpp +++ b/WickedEngine/wiGraphicsDevice_Vulkan.cpp @@ -1401,7 +1401,7 @@ namespace wiGraphics // Engine functions - GraphicsDevice_Vulkan::GraphicsDevice_Vulkan(wiWindowRegistration::window_type window, bool fullscreen, bool debuglayer) + GraphicsDevice_Vulkan::GraphicsDevice_Vulkan(wiPlatform::window_type window, bool fullscreen, bool debuglayer) { DEBUGDEVICE = debuglayer; BACKBUFFER_FORMAT = FORMAT::FORMAT_B8G8R8A8_UNORM; @@ -4191,7 +4191,7 @@ namespace wiGraphics std::vector shaderStages; - if (pso->desc.vs != nullptr) + if (pso->desc.vs != nullptr && pso->desc.vs->code.data != nullptr) { VkShaderModuleCreateInfo moduleInfo = {}; moduleInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; @@ -4210,7 +4210,7 @@ namespace wiGraphics shaderStages.push_back(stageInfo); } - if (pso->desc.hs != nullptr) + if (pso->desc.hs != nullptr && pso->desc.hs->code.data != nullptr) { VkShaderModuleCreateInfo moduleInfo = {}; moduleInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; @@ -4229,7 +4229,7 @@ namespace wiGraphics shaderStages.push_back(stageInfo); } - if (pso->desc.ds != nullptr) + if (pso->desc.ds != nullptr && pso->desc.ds->code.data != nullptr) { VkShaderModuleCreateInfo moduleInfo = {}; moduleInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; @@ -4248,7 +4248,7 @@ namespace wiGraphics shaderStages.push_back(stageInfo); } - if (pso->desc.gs != nullptr) + if (pso->desc.gs != nullptr && pso->desc.gs->code.data != nullptr) { VkShaderModuleCreateInfo moduleInfo = {}; moduleInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; @@ -4267,7 +4267,7 @@ namespace wiGraphics shaderStages.push_back(stageInfo); } - if (pso->desc.ps != nullptr) + if (pso->desc.ps != nullptr && pso->desc.ps->code.data != nullptr) { VkShaderModuleCreateInfo moduleInfo = {}; moduleInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.h b/WickedEngine/wiGraphicsDevice_Vulkan.h index f74a7f39b..a606d362b 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.h +++ b/WickedEngine/wiGraphicsDevice_Vulkan.h @@ -1,7 +1,7 @@ #pragma once #include "CommonInclude.h" #include "wiGraphicsDevice.h" -#include "wiWindowRegistration.h" +#include "wiPlatform.h" #include "wiSpinLock.h" #include "wiContainers.h" @@ -259,7 +259,7 @@ namespace wiGraphics } public: - GraphicsDevice_Vulkan(wiWindowRegistration::window_type window, bool fullscreen = false, bool debuglayer = false); + GraphicsDevice_Vulkan(wiPlatform::window_type window, bool fullscreen = false, bool debuglayer = false); virtual ~GraphicsDevice_Vulkan(); bool CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *pBuffer) override; diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp index f3154fbaf..11d24ce67 100644 --- a/WickedEngine/wiHairParticle.cpp +++ b/WickedEngine/wiHairParticle.cpp @@ -8,25 +8,25 @@ #include "wiArchive.h" #include "ShaderInterop.h" #include "wiTextureHelper.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "ShaderInterop_HairParticle.h" #include "wiBackLog.h" using namespace std; using namespace wiGraphics; -namespace wiSceneSystem +namespace wiScene { -static const VertexShader *vs = nullptr; -static const PixelShader* ps_alphatestonly = nullptr; -static const PixelShader* ps_deferred = nullptr; -static const PixelShader* ps_forward = nullptr; -static const PixelShader* ps_forward_transparent = nullptr; -static const PixelShader* ps_tiledforward = nullptr; -static const PixelShader* ps_tiledforward_transparent = nullptr; -static const PixelShader *ps_simplest = nullptr; -static const ComputeShader *cs_simulate = nullptr; +static VertexShader vs; +static PixelShader ps_alphatestonly; +static PixelShader ps_deferred; +static PixelShader ps_forward; +static PixelShader ps_forward_transparent; +static PixelShader ps_tiledforward; +static PixelShader ps_tiledforward_transparent; +static PixelShader ps_simplest; +static ComputeShader cs_simulate; static DepthStencilState dss_default, dss_equal, dss_rejectopaque_keeptransparent; static RasterizerState rs, ncrs, wirers; static BlendState bs[2]; @@ -99,7 +99,7 @@ void wiHairParticle::UpdateGPU(const MeshComponent& mesh, const MaterialComponen GraphicsDevice* device = wiRenderer::GetDevice(); device->EventBegin("HairParticle - UpdateRenderData", cmd); - device->BindComputeShader(cs_simulate, cmd); + device->BindComputeShader(&cs_simulate, cmd); HairParticleCB hcb; hcb.xWorld = world; @@ -216,15 +216,17 @@ void wiHairParticle::LoadShaders() { std::string path = wiRenderer::GetShaderPath(); - vs = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticleVS.cso", wiResourceManager::VERTEXSHADER)); + wiRenderer::LoadVertexShader(vs, "hairparticleVS.cso"); - ps_alphatestonly = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_alphatestonly.cso", wiResourceManager::PIXELSHADER)); - ps_deferred = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_deferred.cso", wiResourceManager::PIXELSHADER)); - ps_forward = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_forward.cso", wiResourceManager::PIXELSHADER)); - ps_forward_transparent = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_forward_transparent.cso", wiResourceManager::PIXELSHADER)); - ps_tiledforward = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_tiledforward.cso", wiResourceManager::PIXELSHADER)); - ps_tiledforward_transparent = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_tiledforward_transparent.cso", wiResourceManager::PIXELSHADER)); + wiRenderer::LoadPixelShader(ps_simplest, "hairparticlePS_simplest.cso"); + wiRenderer::LoadPixelShader(ps_alphatestonly, "hairparticlePS_alphatestonly.cso"); + wiRenderer::LoadPixelShader(ps_deferred, "hairparticlePS_deferred.cso"); + wiRenderer::LoadPixelShader(ps_forward, "hairparticlePS_forward.cso"); + wiRenderer::LoadPixelShader(ps_forward_transparent, "hairparticlePS_forward_transparent.cso"); + wiRenderer::LoadPixelShader(ps_tiledforward, "hairparticlePS_tiledforward.cso"); + wiRenderer::LoadPixelShader(ps_tiledforward_transparent, "hairparticlePS_tiledforward_transparent.cso"); + wiRenderer::LoadComputeShader(cs_simulate, "hairparticle_simulateCS.cso"); GraphicsDevice* device = wiRenderer::GetDevice(); @@ -240,7 +242,7 @@ void wiHairParticle::LoadShaders() } PipelineStateDesc desc; - desc.vs = vs; + desc.vs = &vs; desc.bs = &bs[j]; desc.rs = &ncrs; desc.dss = &dss_default; @@ -248,31 +250,31 @@ void wiHairParticle::LoadShaders() switch (i) { case RENDERPASS_DEPTHONLY: - desc.ps = ps_alphatestonly; + desc.ps = &ps_alphatestonly; break; case RENDERPASS_DEFERRED: - desc.ps = ps_deferred; + desc.ps = &ps_deferred; break; case RENDERPASS_FORWARD: if (j == 0) { - desc.ps = ps_forward; + desc.ps = &ps_forward; desc.dss = &dss_equal; } else { - desc.ps = ps_forward_transparent; + desc.ps = &ps_forward_transparent; } break; case RENDERPASS_TILEDFORWARD: if (j == 0) { - desc.ps = ps_tiledforward; + desc.ps = &ps_tiledforward; desc.dss = &dss_equal; } else { - desc.ps = ps_tiledforward_transparent; + desc.ps = &ps_tiledforward_transparent; } break; } @@ -287,19 +289,16 @@ void wiHairParticle::LoadShaders() } } - ps_simplest = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticlePS_simplest.cso", wiResourceManager::PIXELSHADER)); - { PipelineStateDesc desc; - desc.vs = vs; - desc.ps = ps_simplest; + desc.vs = &vs; + desc.ps = &ps_simplest; desc.bs = &bs[0]; desc.rs = &wirers; desc.dss = &dss_default; device->CreatePipelineState(&desc, &PSO_wire); } - cs_simulate = static_cast(wiResourceManager::GetShaderManager().add(path + "hairparticle_simulateCS.cso", wiResourceManager::COMPUTESHADER)); } void wiHairParticle::Initialize() diff --git a/WickedEngine/wiHairParticle.h b/WickedEngine/wiHairParticle.h index b45f30c1e..f12526fb2 100644 --- a/WickedEngine/wiHairParticle.h +++ b/WickedEngine/wiHairParticle.h @@ -3,14 +3,14 @@ #include "wiGraphicsDevice.h" #include "wiEnums.h" #include "wiECS.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" #include "wiIntersect.h" #include class wiArchive; -namespace wiSceneSystem +namespace wiScene { class wiHairParticle diff --git a/WickedEngine/wiHelper.cpp b/WickedEngine/wiHelper.cpp index 94936ad2c..1631da277 100644 --- a/WickedEngine/wiHelper.cpp +++ b/WickedEngine/wiHelper.cpp @@ -1,7 +1,7 @@ #include "wiHelper.h" +#include "wiPlatform.h" #include "wiRenderer.h" #include "wiBackLog.h" -#include "wiWindowRegistration.h" #include "Utility/stb_image_write.h" @@ -49,9 +49,10 @@ namespace wiHelper return false; } - void messageBox(const std::string& msg, const std::string& caption){ + void messageBox(const std::string& msg, const std::string& caption) + { #ifndef WINSTORE_SUPPORT - MessageBoxA(wiWindowRegistration::GetRegisteredWindow(), msg.c_str(), caption.c_str(), 0); + MessageBoxA(wiPlatform::GetWindow(), msg.c_str(), caption.c_str(), 0); #else wstring wmsg; StringConvert(msg, wmsg); diff --git a/WickedEngine/wiImage.cpp b/WickedEngine/wiImage.cpp index a818ff9d3..a81a7707d 100644 --- a/WickedEngine/wiImage.cpp +++ b/WickedEngine/wiImage.cpp @@ -4,7 +4,7 @@ #include "wiHelper.h" #include "SamplerMapping.h" #include "ResourceMapping.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "ShaderInterop_Image.h" #include "wiBackLog.h" @@ -32,9 +32,9 @@ namespace wiImage }; GPUBuffer constantBuffer; - const VertexShader* vertexShader = nullptr; - const VertexShader* screenVS = nullptr; - const PixelShader* imagePS[IMAGE_SHADER_COUNT][IMAGE_SAMPLING_COUNT]; + VertexShader vertexShader; + VertexShader screenVS; + PixelShader imagePS[IMAGE_SHADER_COUNT][IMAGE_SAMPLING_COUNT]; BlendState blendStates[BLENDMODE_COUNT]; RasterizerState rasterizerState; DepthStencilState depthStencilStates[STENCILMODE_COUNT][STENCILREFMODE_COUNT]; @@ -236,18 +236,18 @@ namespace wiImage { std::string path = wiRenderer::GetShaderPath(); - vertexShader = static_cast(wiResourceManager::GetShaderManager().add(path + "imageVS.cso", wiResourceManager::VERTEXSHADER)); - screenVS = static_cast(wiResourceManager::GetShaderManager().add(path + "screenVS.cso", wiResourceManager::VERTEXSHADER)); + wiRenderer::LoadVertexShader(vertexShader, "imageVS.cso"); + wiRenderer::LoadVertexShader(screenVS, "screenVS.cso"); - imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS.cso", wiResourceManager::PIXELSHADER)); - imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_separatenormalmap.cso", wiResourceManager::PIXELSHADER)); - imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_masked.cso", wiResourceManager::PIXELSHADER)); - imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(path + "screenPS.cso", wiResourceManager::PIXELSHADER)); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_SIMPLE], "imagePS.cso"); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_SIMPLE], "imagePS_separatenormalmap.cso"); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_SIMPLE],"imagePS_masked.cso"); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_SIMPLE], "screenPS.cso"); - imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_bicubic.cso", wiResourceManager::PIXELSHADER)); - imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_separatenormalmap_bicubic.cso", wiResourceManager::PIXELSHADER)); - imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "imagePS_masked_bicubic.cso", wiResourceManager::PIXELSHADER)); - imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(path + "screenPS_bicubic.cso", wiResourceManager::PIXELSHADER)); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_STANDARD][IMAGE_SAMPLING_BICUBIC], "imagePS_bicubic.cso"); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_SEPARATENORMALMAP][IMAGE_SAMPLING_BICUBIC], "imagePS_separatenormalmap_bicubic.cso"); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_MASKED][IMAGE_SAMPLING_BICUBIC], "imagePS_masked_bicubic.cso"); + wiRenderer::LoadPixelShader(imagePS[IMAGE_SHADER_FULLSCREEN][IMAGE_SAMPLING_BICUBIC], "screenPS_bicubic.cso"); GraphicsDevice* device = wiRenderer::GetDevice(); @@ -255,17 +255,17 @@ namespace wiImage for (int i = 0; i < IMAGE_SHADER_COUNT; ++i) { PipelineStateDesc desc; - desc.vs = vertexShader; + desc.vs = &vertexShader; if (i == IMAGE_SHADER_FULLSCREEN) { - desc.vs = screenVS; + desc.vs = &screenVS; } desc.rs = &rasterizerState; desc.pt = TRIANGLESTRIP; for (int l = 0; l < IMAGE_SAMPLING_COUNT; ++l) { - desc.ps = imagePS[i][l]; + desc.ps = &imagePS[i][l]; for (int j = 0; j < BLENDMODE_COUNT; ++j) { diff --git a/WickedEngine/wiInitializer.cpp b/WickedEngine/wiInitializer.cpp index a164f7ee6..7d5a66f40 100644 --- a/WickedEngine/wiInitializer.cpp +++ b/WickedEngine/wiInitializer.cpp @@ -31,8 +31,8 @@ namespace wiInitializer wiJobSystem::Execute(ctx, [] { wiAudio::Initialize(); }); wiJobSystem::Execute(ctx, [] { wiNetwork::Initialize(); }); wiJobSystem::Execute(ctx, [] { wiTextureHelper::Initialize(); }); - wiJobSystem::Execute(ctx, [] { wiSceneSystem::wiHairParticle::Initialize(); }); - wiJobSystem::Execute(ctx, [] { wiSceneSystem::wiEmittedParticle::Initialize(); }); + wiJobSystem::Execute(ctx, [] { wiScene::wiHairParticle::Initialize(); }); + wiJobSystem::Execute(ctx, [] { wiScene::wiEmittedParticle::Initialize(); }); wiJobSystem::Execute(ctx, [] { wiOcean::Initialize(); }); wiJobSystem::Execute(ctx, [] { wiGPUSortLib::LoadShaders(); }); wiJobSystem::Execute(ctx, [] { wiGPUBVH::LoadShaders(); }); diff --git a/WickedEngine/wiInput.cpp b/WickedEngine/wiInput.cpp index 2e15ba60b..135817607 100644 --- a/WickedEngine/wiInput.cpp +++ b/WickedEngine/wiInput.cpp @@ -1,10 +1,9 @@ #include "wiInput.h" -#include "Platform.h" +#include "wiPlatform.h" #include "wiXInput.h" #include "wiRawInput.h" #include "wiHelper.h" #include "wiBackLog.h" -#include "wiWindowRegistration.h" #include "wiProfiler.h" #include "wiColor.h" @@ -205,7 +204,7 @@ namespace wiInput { return false; } - if (!wiWindowRegistration::IsWindowActive()) + if (!wiPlatform::IsWindowActive()) { return false; } @@ -390,7 +389,7 @@ namespace wiInput #ifndef WINSTORE_SUPPORT POINT p; GetCursorPos(&p); - ScreenToClient(wiWindowRegistration::GetRegisteredWindow(), &p); + ScreenToClient(wiPlatform::GetWindow(), &p); return XMFLOAT4((float)p.x, (float)p.y, state.delta_wheel, 0); #else auto& p = Windows::UI::Core::CoreWindow::GetForCurrentThread()->PointerPosition; @@ -403,7 +402,7 @@ namespace wiInput POINT p; p.x = (LONG)props.x; p.y = (LONG)props.y; - ClientToScreen(wiWindowRegistration::GetRegisteredWindow(), &p); + ClientToScreen(wiPlatform::GetWindow(), &p); SetCursorPos(p.x, p.y); #endif } diff --git a/WickedEngine/wiJobSystem.cpp b/WickedEngine/wiJobSystem.cpp index 608e7c448..bbb9d35a5 100644 --- a/WickedEngine/wiJobSystem.cpp +++ b/WickedEngine/wiJobSystem.cpp @@ -2,7 +2,7 @@ #include "wiSpinLock.h" #include "wiBackLog.h" #include "wiContainers.h" -#include "Platform.h" +#include "wiPlatform.h" #include #include diff --git a/WickedEngine/wiLua.cpp b/WickedEngine/wiLua.cpp index a2c22988b..72ad76ee4 100644 --- a/WickedEngine/wiLua.cpp +++ b/WickedEngine/wiLua.cpp @@ -16,8 +16,7 @@ #include "wiSprite_BindLua.h" #include "wiImageParams_BindLua.h" #include "SpriteAnim_BindLua.h" -#include "wiResourceManager_BindLua.h" -#include "wiSceneSystem_BindLua.h" +#include "wiScene_BindLua.h" #include "Vector_BindLua.h" #include "Matrix_BindLua.h" #include "wiInput_BindLua.h" @@ -68,8 +67,7 @@ wiLua* wiLua::GetGlobal() wiSprite_BindLua::Bind(); wiImageParams_BindLua::Bind(); SpriteAnim_BindLua::Bind(); - wiResourceManager_BindLua::Bind(); - wiSceneSystem_BindLua::Bind(); + wiScene_BindLua::Bind(); Vector_BindLua::Bind(); Matrix_BindLua::Bind(); wiInput_BindLua::Bind(); diff --git a/WickedEngine/wiOcean.cpp b/WickedEngine/wiOcean.cpp index 5e0c3285a..35bd30ba1 100644 --- a/WickedEngine/wiOcean.cpp +++ b/WickedEngine/wiOcean.cpp @@ -2,25 +2,25 @@ #include "wiRenderer.h" #include "wiResourceManager.h" #include "ShaderInterop_Ocean.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiBackLog.h" #include using namespace std; using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; namespace wiOcean_Internal { - const ComputeShader* m_pUpdateSpectrumCS = nullptr; - const ComputeShader* m_pUpdateDisplacementMapCS = nullptr; - const ComputeShader* m_pUpdateGradientFoldingCS = nullptr; - const VertexShader* g_pOceanSurfVS = nullptr; - const PixelShader* g_pWireframePS = nullptr; - const PixelShader* g_pOceanSurfPS = nullptr; + ComputeShader updateSpectrumCS; + ComputeShader updateDisplacementMapCS; + ComputeShader updateGradientFoldingCS; + VertexShader oceanSurfVS; + PixelShader wireframePS; + PixelShader oceanSurfPS; - GPUBuffer g_pShadingCB; + GPUBuffer shadingCB; RasterizerState rasterizerState; RasterizerState wireRS; DepthStencilState depthStencilState; @@ -253,7 +253,7 @@ void wiOcean::UpdateDisplacementMap(const WeatherComponent& weather, float time, // ---------------------------- H(0) -> H(t), D(x, t), D(y, t) -------------------------------- - device->BindComputeShader(m_pUpdateSpectrumCS, cmd); + device->BindComputeShader(&updateSpectrumCS, cmd); // Buffers const GPUResource* cs0_srvs[2] = { @@ -294,7 +294,7 @@ void wiOcean::UpdateDisplacementMap(const WeatherComponent& weather, float time, // Update displacement map: - device->BindComputeShader(m_pUpdateDisplacementMapCS, cmd); + device->BindComputeShader(&updateDisplacementMapCS, cmd); const GPUResource* cs_uavs[] = { &m_pDisplacementMap }; device->BindUAVs(CS, cs_uavs, 0, 1, cmd); const GPUResource* cs_srvs[1] = { &m_pBuffer_Float_Dxyz }; @@ -303,7 +303,7 @@ void wiOcean::UpdateDisplacementMap(const WeatherComponent& weather, float time, device->Barrier(&GPUBarrier::Memory(), 1, cmd); // Update gradient map: - device->BindComputeShader(m_pUpdateGradientFoldingCS, cmd); + device->BindComputeShader(&updateGradientFoldingCS, cmd); cs_uavs[0] = { &m_pGradientMap }; device->BindUAVs(CS, cs_uavs, 0, 1, cmd); cs_srvs[0] = &m_pDisplacementMap; @@ -353,10 +353,10 @@ void wiOcean::Render(const CameraComponent& camera, const WeatherComponent& weat cb.xOceanWaterHeight = params.waterHeight; cb.xOceanSurfaceDisplacementTolerance = std::max(1.0f, params.surfaceDisplacementTolerance); - device->UpdateBuffer(&g_pShadingCB, &cb, cmd); + device->UpdateBuffer(&shadingCB, &cb, cmd); - device->BindConstantBuffer(VS, &g_pShadingCB, CB_GETBINDSLOT(Ocean_RenderCB), cmd); - device->BindConstantBuffer(PS, &g_pShadingCB, CB_GETBINDSLOT(Ocean_RenderCB), cmd); + device->BindConstantBuffer(VS, &shadingCB, CB_GETBINDSLOT(Ocean_RenderCB), cmd); + device->BindConstantBuffer(PS, &shadingCB, CB_GETBINDSLOT(Ocean_RenderCB), cmd); device->BindResource(VS, &m_pDisplacementMap, TEXSLOT_ONDEMAND0, cmd); device->BindResource(PS, &m_pGradientMap, TEXSLOT_ONDEMAND0, cmd); @@ -372,29 +372,28 @@ void wiOcean::LoadShaders() std::string path = wiRenderer::GetShaderPath(); - m_pUpdateSpectrumCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSimulatorCS.cso", wiResourceManager::COMPUTESHADER)); - m_pUpdateDisplacementMapCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanUpdateDisplacementMapCS.cso", wiResourceManager::COMPUTESHADER)); - m_pUpdateGradientFoldingCS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanUpdateGradientFoldingCS.cso", wiResourceManager::COMPUTESHADER)); + wiRenderer::LoadComputeShader(updateSpectrumCS, "oceanSimulatorCS.cso"); + wiRenderer::LoadComputeShader(updateDisplacementMapCS, "oceanUpdateDisplacementMapCS.cso"); + wiRenderer::LoadComputeShader(updateGradientFoldingCS, "oceanUpdateGradientFoldingCS.cso"); + wiRenderer::LoadVertexShader(oceanSurfVS, "oceanSurfaceVS.cso"); - g_pOceanSurfVS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfaceVS.cso", wiResourceManager::VERTEXSHADER)); - - g_pOceanSurfPS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfacePS.cso", wiResourceManager::PIXELSHADER)); - g_pWireframePS = static_cast(wiResourceManager::GetShaderManager().add(path + "oceanSurfaceSimplePS.cso", wiResourceManager::PIXELSHADER)); + wiRenderer::LoadPixelShader(oceanSurfPS, "oceanSurfacePS.cso"); + wiRenderer::LoadPixelShader(wireframePS, "oceanSurfaceSimplePS.cso"); GraphicsDevice* device = wiRenderer::GetDevice(); { PipelineStateDesc desc; - desc.vs = g_pOceanSurfVS; - desc.ps = g_pOceanSurfPS; + desc.vs = &oceanSurfVS; + desc.ps = &oceanSurfPS; desc.bs = &blendState; desc.rs = &rasterizerState; desc.dss = &depthStencilState; device->CreatePipelineState(&desc, &PSO); - desc.ps = g_pWireframePS; + desc.ps = &wireframePS; desc.rs = &wireRS; device->CreatePipelineState(&desc, &PSO_wire); } @@ -411,7 +410,7 @@ void wiOcean::Initialize() cb_desc.ByteWidth = sizeof(Ocean_RenderCB); cb_desc.StructureByteStride = 0; cb_desc.BindFlags = BIND_CONSTANT_BUFFER; - device->CreateBuffer(&cb_desc, nullptr, &g_pShadingCB); + device->CreateBuffer(&cb_desc, nullptr, &shadingCB); RasterizerStateDesc ras_desc; diff --git a/WickedEngine/wiOcean.h b/WickedEngine/wiOcean.h index 2cd06328d..bac6d90cc 100644 --- a/WickedEngine/wiOcean.h +++ b/WickedEngine/wiOcean.h @@ -2,18 +2,18 @@ #include "CommonInclude.h" #include "wiGraphicsDevice.h" #include "wiFFTGenerator.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" #include class wiOcean { public: - wiOcean(const wiSceneSystem::WeatherComponent& weather); + wiOcean(const wiScene::WeatherComponent& weather); ~wiOcean(); - void UpdateDisplacementMap(const wiSceneSystem::WeatherComponent& weather, float time, wiGraphics::CommandList cmd) const; - void Render(const wiSceneSystem::CameraComponent& camera, const wiSceneSystem::WeatherComponent& weather, float time, wiGraphics::CommandList cmd) const; + void UpdateDisplacementMap(const wiScene::WeatherComponent& weather, float time, wiGraphics::CommandList cmd) const; + void Render(const wiScene::CameraComponent& camera, const wiScene::WeatherComponent& weather, float time, wiGraphics::CommandList cmd) const; const wiGraphics::Texture* getDisplacementMap() const; const wiGraphics::Texture* getGradientMap() const; @@ -26,7 +26,7 @@ protected: wiGraphics::Texture m_pGradientMap; // (RGBA16F) - void initHeightMap(const wiSceneSystem::WeatherComponent& weather, XMFLOAT2* out_h0, float* out_omega); + void initHeightMap(const wiScene::WeatherComponent& weather, XMFLOAT2* out_h0, float* out_omega); // Initial height field H(0) generated by Phillips spectrum & Gauss distribution. diff --git a/WickedEngine/wiPhysicsEngine.h b/WickedEngine/wiPhysicsEngine.h index e544c2211..ef54afd1d 100644 --- a/WickedEngine/wiPhysicsEngine.h +++ b/WickedEngine/wiPhysicsEngine.h @@ -1,6 +1,6 @@ #pragma once #include "wiECS.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" #include "wiJobSystem.h" namespace wiPhysicsEngine @@ -13,13 +13,13 @@ namespace wiPhysicsEngine void RunPhysicsUpdateSystem( wiJobSystem::context& ctx, - const wiSceneSystem::WeatherComponent& weather, - const wiECS::ComponentManager& armatures, - wiECS::ComponentManager& transforms, - wiECS::ComponentManager& meshes, - wiECS::ComponentManager& objects, - wiECS::ComponentManager& rigidbodies, - wiECS::ComponentManager& softbodies, + const wiScene::WeatherComponent& weather, + const wiECS::ComponentManager& armatures, + wiECS::ComponentManager& transforms, + wiECS::ComponentManager& meshes, + wiECS::ComponentManager& objects, + wiECS::ComponentManager& rigidbodies, + wiECS::ComponentManager& softbodies, float dt ); } diff --git a/WickedEngine/wiPhysicsEngine_Bullet.cpp b/WickedEngine/wiPhysicsEngine_Bullet.cpp index b6eb57f6f..7885251ac 100644 --- a/WickedEngine/wiPhysicsEngine_Bullet.cpp +++ b/WickedEngine/wiPhysicsEngine_Bullet.cpp @@ -1,5 +1,5 @@ #include "wiPhysicsEngine.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiProfiler.h" #include "wiBackLog.h" #include "wiJobSystem.h" @@ -14,7 +14,7 @@ using namespace std; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; namespace wiPhysicsEngine @@ -78,7 +78,7 @@ namespace wiPhysicsEngine bool IsEnabled() { return ENABLED; } void SetEnabled(bool value) { ENABLED = value; } - void AddRigidBody(Entity entity, wiSceneSystem::RigidBodyPhysicsComponent& physicscomponent, const wiSceneSystem::MeshComponent& mesh, const wiSceneSystem::TransformComponent& transform) + void AddRigidBody(Entity entity, wiScene::RigidBodyPhysicsComponent& physicscomponent, const wiScene::MeshComponent& mesh, const wiScene::TransformComponent& transform) { btVector3 S(transform.scale_local.x, transform.scale_local.y, transform.scale_local.z); @@ -195,7 +195,7 @@ namespace wiPhysicsEngine physicscomponent.physicsobject = rigidbody; } } - void AddSoftBody(Entity entity, wiSceneSystem::SoftBodyPhysicsComponent& physicscomponent, const wiSceneSystem::MeshComponent& mesh) + void AddSoftBody(Entity entity, wiScene::SoftBodyPhysicsComponent& physicscomponent, const wiScene::MeshComponent& mesh) { physicscomponent.CreateFromMesh(mesh); diff --git a/WickedEngine/wiPlatform.h b/WickedEngine/wiPlatform.h new file mode 100644 index 000000000..7b6146509 --- /dev/null +++ b/WickedEngine/wiPlatform.h @@ -0,0 +1,44 @@ +#pragma once +// This file includes platform, os specific libraries and supplies common platform specific resources + +#ifdef _WIN32 + +#define WIN32_LEAN_AND_MEAN +#include +#include + +#ifdef WINSTORE_SUPPORT +#include +#endif // WINSTORE_SUPPORT + +#endif // _WIN32 + + +namespace wiPlatform +{ +#ifdef _WIN32 +#ifndef WINSTORE_SUPPORT + typedef HWND window_type; +#else + typedef Windows::UI::Core::CoreWindow^ window_type; +#endif // WINSTORE_SUPPORT +#endif // _WIN32 + + inline window_type& GetWindow() + { + static window_type window; + return window; + } + inline bool IsWindowActive() + { +#ifdef _WIN32 +#ifndef WINSTORE_SUPPORT + return GetForegroundWindow() == GetWindow(); +#else + return true; +#endif // WINSTORE_SUPPORT +#else + return true; +#endif // _WIN32 + } +} diff --git a/WickedEngine/wiRawInput.cpp b/WickedEngine/wiRawInput.cpp index f4734e9ee..1a9fb5af5 100644 --- a/WickedEngine/wiRawInput.cpp +++ b/WickedEngine/wiRawInput.cpp @@ -7,7 +7,7 @@ #include #include -#define NOMINMAX +#define WIN32_LEAN_AND_MEAN #include #include diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 5a2737873..0eb4ae2e6 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -3,7 +3,7 @@ #include "wiEmittedParticle.h" #include "wiResourceManager.h" #include "wiSprite.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiIntersect.h" #include "wiHelper.h" #include "wiMath.h" @@ -35,7 +35,7 @@ using namespace std; using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; using namespace wiECS; using namespace wiAllocators; @@ -44,12 +44,12 @@ namespace wiRenderer GraphicsDevice* graphicsDevice = nullptr; -const VertexShader* vertexShaders[VSTYPE_LAST] = {}; -const PixelShader* pixelShaders[PSTYPE_LAST] = {}; -const GeometryShader* geometryShaders[GSTYPE_LAST] = {}; -const HullShader* hullShaders[HSTYPE_LAST] = {}; -const DomainShader* domainShaders[DSTYPE_LAST] = {}; -const ComputeShader* computeShaders[CSTYPE_LAST] = {}; +VertexShader vertexShaders[VSTYPE_LAST]; +PixelShader pixelShaders[PSTYPE_LAST]; +GeometryShader geometryShaders[GSTYPE_LAST]; +HullShader hullShaders[HSTYPE_LAST]; +DomainShader domainShaders[DSTYPE_LAST]; +ComputeShader computeShaders[CSTYPE_LAST]; Texture textures[TEXTYPE_LAST]; VertexLayout vertexLayouts[VLTYPE_LAST]; RasterizerState rasterizers[RSTYPE_LAST]; @@ -59,7 +59,7 @@ GPUBuffer constantBuffers[CBTYPE_LAST]; GPUBuffer resourceBuffers[RBTYPE_LAST]; Sampler samplers[SSLOT_COUNT]; -string SHADERPATH = "shaders/"; +string SHADERPATH = "../WickedEngine/shaders/"; LinearAllocator updateFrameAllocator; // can be used by an update thread LinearAllocator renderFrameAllocators[COMMANDLIST_COUNT]; // can be used by graphics threads @@ -119,7 +119,6 @@ uint32_t entityArrayOffset_ForceFields = 0; uint32_t entityArrayCount_ForceFields = 0; uint32_t entityArrayOffset_EnvProbes = 0; uint32_t entityArrayCount_EnvProbes = 0; -Texture* enviroMap = nullptr; float GameSpeed = 1; bool debugLightCulling = false; bool occlusionCulling = false; @@ -393,27 +392,27 @@ const Sampler* GetSampler(int slot) } const VertexShader* GetVertexShader(VSTYPES id) { - return vertexShaders[id]; + return &vertexShaders[id]; } const HullShader* GetHullShader(VSTYPES id) { - return hullShaders[id]; + return &hullShaders[id]; } const DomainShader* GetDomainShader(VSTYPES id) { - return domainShaders[id]; + return &domainShaders[id]; } const GeometryShader* GetGeometryShader(VSTYPES id) { - return geometryShaders[id]; + return &geometryShaders[id]; } const PixelShader* GetPixelShader(PSTYPES id) { - return pixelShaders[id]; + return &pixelShaders[id]; } const ComputeShader* GetComputeShader(VSTYPES id) { - return computeShaders[id]; + return &computeShaders[id]; } const VertexLayout* GetVertexLayout(VLTYPES id) { @@ -1051,9 +1050,64 @@ enum TILEDLIGHTING_DEBUG TILEDLIGHTING_DEBUG_ENABLED, TILEDLIGHTING_DEBUG_COUNT }; -const ComputeShader* tiledLightingCS[TILEDLIGHTING_TYPE_COUNT][TILEDLIGHTING_CULLING_COUNT][TILEDLIGHTING_DEBUG_COUNT] = {}; +ComputeShader tiledLightingCS[TILEDLIGHTING_TYPE_COUNT][TILEDLIGHTING_CULLING_COUNT][TILEDLIGHTING_DEBUG_COUNT]; +bool LoadVertexShader(wiGraphics::VertexShader& shader, const std::string& filename) +{ + vector buffer; + if (wiHelper::readByteData(SHADERPATH + filename, buffer)) + { + return GetDevice()->CreateVertexShader(buffer.data(), buffer.size(), &shader); + } + return false; +} +bool LoadHullShader(wiGraphics::HullShader& shader, const std::string& filename) +{ + vector buffer; + if (wiHelper::readByteData(SHADERPATH + filename, buffer)) + { + return GetDevice()->CreateHullShader(buffer.data(), buffer.size(), &shader); + } + return false; +} +bool LoadDomainShader(wiGraphics::DomainShader& shader, const std::string& filename) +{ + vector buffer; + if (wiHelper::readByteData(SHADERPATH + filename, buffer)) + { + return GetDevice()->CreateDomainShader(buffer.data(), buffer.size(), &shader); + } + return false; +} +bool LoadGeometryShader(wiGraphics::GeometryShader& shader, const std::string& filename) +{ + vector buffer; + if (wiHelper::readByteData(SHADERPATH + filename, buffer)) + { + return GetDevice()->CreateGeometryShader(buffer.data(), buffer.size(), &shader); + } + return false; +} +bool LoadPixelShader(wiGraphics::PixelShader& shader, const std::string& filename) +{ + vector buffer; + if (wiHelper::readByteData(SHADERPATH + filename, buffer)) + { + return GetDevice()->CreatePixelShader(buffer.data(), buffer.size(), &shader); + } + return false; +} +bool LoadComputeShader(wiGraphics::ComputeShader& shader, const std::string& filename) +{ + vector buffer; + if (wiHelper::readByteData(SHADERPATH + filename, buffer)) + { + return GetDevice()->CreateComputeShader(buffer.data(), buffer.size(), &shader); + } + return false; +} + void LoadShaders() { @@ -1064,8 +1118,8 @@ void LoadShaders() { { "POSITION_NORMAL_SUBSETINDEX", 0, MeshComponent::Vertex_POS::FORMAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, }; - vertexShaders[VSTYPE_OBJECT_DEBUG] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_debug.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_DEBUG]->code, &vertexLayouts[VLTYPE_OBJECT_DEBUG]); + LoadVertexShader(vertexShaders[VSTYPE_OBJECT_DEBUG], "objectVS_debug.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_DEBUG].code, &vertexLayouts[VLTYPE_OBJECT_DEBUG]); } { VertexLayoutDesc layout[] = @@ -1086,8 +1140,8 @@ void LoadShaders() { "INSTANCEMATRIXPREV", 2, FORMAT_R32G32B32A32_FLOAT, 6, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, { "INSTANCEATLAS", 0, FORMAT_R32G32B32A32_FLOAT, 6, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, }; - vertexShaders[VSTYPE_OBJECT_COMMON] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_common.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_COMMON]->code, &vertexLayouts[VLTYPE_OBJECT_ALL]); + LoadVertexShader(vertexShaders[VSTYPE_OBJECT_COMMON], "objectVS_common.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_COMMON].code, &vertexLayouts[VLTYPE_OBJECT_ALL]); } { @@ -1100,8 +1154,8 @@ void LoadShaders() { "INSTANCEMATRIX", 2, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, { "INSTANCECOLOR", 0, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, }; - vertexShaders[VSTYPE_OBJECT_POSITIONSTREAM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_positionstream.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_POSITIONSTREAM]->code, &vertexLayouts[VLTYPE_OBJECT_POS]); + LoadVertexShader(vertexShaders[VSTYPE_OBJECT_POSITIONSTREAM], "objectVS_positionstream.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_POSITIONSTREAM].code, &vertexLayouts[VLTYPE_OBJECT_POS]); } { @@ -1116,8 +1170,8 @@ void LoadShaders() { "INSTANCEMATRIX", 2, FORMAT_R32G32B32A32_FLOAT, 3, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, { "INSTANCECOLOR", 0, FORMAT_R32G32B32A32_FLOAT, 3, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, }; - vertexShaders[VSTYPE_OBJECT_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_simple.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_SIMPLE]->code, &vertexLayouts[VLTYPE_OBJECT_POS_TEX]); + LoadVertexShader(vertexShaders[VSTYPE_OBJECT_SIMPLE], "objectVS_simple.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_OBJECT_SIMPLE].code, &vertexLayouts[VLTYPE_OBJECT_POS_TEX]); } { @@ -1130,8 +1184,8 @@ void LoadShaders() { "INSTANCEMATRIX", 2, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, { "INSTANCECOLOR", 0, FORMAT_R32G32B32A32_FLOAT, 1, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, }; - vertexShaders[VSTYPE_SHADOW] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_SHADOW]->code, &vertexLayouts[VLTYPE_SHADOW_POS]); + LoadVertexShader(vertexShaders[VSTYPE_SHADOW], "shadowVS.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_SHADOW].code, &vertexLayouts[VLTYPE_SHADOW_POS]); } { @@ -1146,11 +1200,11 @@ void LoadShaders() { "INSTANCEMATRIX", 2, FORMAT_R32G32B32A32_FLOAT, 3, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, { "INSTANCECOLOR", 0, FORMAT_R32G32B32A32_FLOAT, 3, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, }; - vertexShaders[VSTYPE_SHADOW_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS_alphatest.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_SHADOW_ALPHATEST]->code, &vertexLayouts[VLTYPE_SHADOW_POS_TEX]); + LoadVertexShader(vertexShaders[VSTYPE_SHADOW_ALPHATEST], "shadowVS_alphatest.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_SHADOW_ALPHATEST].code, &vertexLayouts[VLTYPE_SHADOW_POS_TEX]); - vertexShaders[VSTYPE_SHADOW_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowVS_transparent.cso", wiResourceManager::VERTEXSHADER)); + LoadVertexShader(vertexShaders[VSTYPE_SHADOW_TRANSPARENT], "shadowVS_transparent.cso"); } @@ -1160,8 +1214,8 @@ void LoadShaders() { "POSITION", 0, FORMAT_R32G32B32A32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, FORMAT_R32G32B32A32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, }; - vertexShaders[VSTYPE_LINE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "linesVS.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_LINE]->code, &vertexLayouts[VLTYPE_LINE]); + LoadVertexShader(vertexShaders[VSTYPE_LINE], "linesVS.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_LINE].code, &vertexLayouts[VLTYPE_LINE]); } @@ -1172,8 +1226,8 @@ void LoadShaders() { "TEXCOORD", 0, FORMAT_R32G32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 1, FORMAT_R32G32B32A32_FLOAT, 0, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_VERTEX_DATA, 0 }, }; - vertexShaders[VSTYPE_TRAIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "trailVS.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_TRAIL]->code, &vertexLayouts[VLTYPE_TRAIL]); + LoadVertexShader(vertexShaders[VSTYPE_TRAIL], "trailVS.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_TRAIL].code, &vertexLayouts[VLTYPE_TRAIL]); } @@ -1187,201 +1241,200 @@ void LoadShaders() { "INSTANCEMATRIXPREV", 1, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, { "INSTANCEMATRIXPREV", 2, FORMAT_R32G32B32A32_FLOAT, 2, VertexLayoutDesc::APPEND_ALIGNED_ELEMENT, INPUT_PER_INSTANCE_DATA, 1 }, }; - vertexShaders[VSTYPE_RENDERLIGHTMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapVS.cso", wiResourceManager::VERTEXSHADER)); - device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_RENDERLIGHTMAP]->code, &vertexLayouts[VLTYPE_RENDERLIGHTMAP]); + LoadVertexShader(vertexShaders[VSTYPE_RENDERLIGHTMAP], "renderlightmapVS.cso"); + device->CreateInputLayout(layout, arraysize(layout), &vertexShaders[VSTYPE_RENDERLIGHTMAP].code, &vertexLayouts[VLTYPE_RENDERLIGHTMAP]); } - vertexShaders[VSTYPE_OBJECT_COMMON_TESSELLATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_common_tessellation.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_OBJECT_SIMPLE_TESSELLATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_simple_tessellation.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_IMPOSTOR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_DIRLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "dirLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "pointLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "spotLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_LIGHTVISUALIZER_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vSpotLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_LIGHTVISUALIZER_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vPointLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_LIGHTVISUALIZER_SPHERELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vSphereLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_LIGHTVISUALIZER_DISCLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vDiscLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_LIGHTVISUALIZER_RECTANGLELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vRectangleLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_LIGHTVISUALIZER_TUBELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "vTubeLightVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_DECAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "decalVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_ENVMAP_SKY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_SPHERE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sphereVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_CUBE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowVS_alphatest.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_SKY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "waterVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectVS_voxelizer.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_POINT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "forceFieldPointVisualizerVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_PLANE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "forceFieldPlaneVisualizerVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_RAYTRACE_SCREEN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_screenVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_SCREEN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "screenVS.cso", wiResourceManager::VERTEXSHADER)); - vertexShaders[VSTYPE_LENSFLARE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lensFlareVS.cso", wiResourceManager::VERTEXSHADER)); + LoadVertexShader(vertexShaders[VSTYPE_OBJECT_COMMON_TESSELLATION], "objectVS_common_tessellation.cso"); + LoadVertexShader(vertexShaders[VSTYPE_OBJECT_SIMPLE_TESSELLATION], "objectVS_simple_tessellation.cso"); + LoadVertexShader(vertexShaders[VSTYPE_IMPOSTOR], "impostorVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_DIRLIGHT], "dirLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_POINTLIGHT], "pointLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_SPOTLIGHT], "spotLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_LIGHTVISUALIZER_SPOTLIGHT], "vSpotLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_LIGHTVISUALIZER_POINTLIGHT], "vPointLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_LIGHTVISUALIZER_SPHERELIGHT], "vSphereLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_LIGHTVISUALIZER_DISCLIGHT], "vDiscLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_LIGHTVISUALIZER_RECTANGLELIGHT], "vRectangleLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_LIGHTVISUALIZER_TUBELIGHT], "vTubeLightVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_DECAL], "decalVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_ENVMAP], "envMapVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_ENVMAP_SKY], "envMap_skyVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_SPHERE], "sphereVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_CUBE], "cubeVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_SHADOWCUBEMAPRENDER], "cubeShadowVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST], "cubeShadowVS_alphatest.cso"); + LoadVertexShader(vertexShaders[VSTYPE_SKY], "skyVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_WATER], "waterVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_VOXELIZER], "objectVS_voxelizer.cso"); + LoadVertexShader(vertexShaders[VSTYPE_VOXEL], "voxelVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_POINT], "forceFieldPointVisualizerVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_PLANE], "forceFieldPlaneVisualizerVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_RAYTRACE_SCREEN], "raytrace_screenVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_SCREEN], "screenVS.cso"); + LoadVertexShader(vertexShaders[VSTYPE_LENSFLARE], "lensFlareVS.cso"); - pixelShaders[PSTYPE_OBJECT_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_deferred_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_DEFERRED] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_deferred.cso", wiResourceManager::PIXELSHADER)); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_DEFERRED], "objectPS_deferred.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP], "objectPS_deferred_normalmap.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_DEFERRED_POM], "objectPS_deferred_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_DEFERRED_PLANARREFLECTION], "objectPS_deferred_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_POM], "objectPS_deferred_normalmap_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP_PLANARREFLECTION], "objectPS_deferred_normalmap_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_IMPOSTOR_DEFERRED], "impostorPS_deferred.cso"); - pixelShaders[PSTYPE_OBJECT_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_transparent_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_FORWARD_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_forward_water.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_FORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_forward.cso", wiResourceManager::PIXELSHADER)); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD], "objectPS_forward.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP], "objectPS_forward_normalmap.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT], "objectPS_forward_transparent.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP], "objectPS_forward_transparent_normalmap.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_PLANARREFLECTION], "objectPS_forward_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_PLANARREFLECTION], "objectPS_forward_normalmap_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_PLANARREFLECTION], "objectPS_forward_transparent_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION], "objectPS_forward_transparent_normalmap_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_POM], "objectPS_forward_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_NORMALMAP_POM], "objectPS_forward_normalmap_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_POM], "objectPS_forward_transparent_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_TRANSPARENT_NORMALMAP_POM], "objectPS_forward_transparent_normalmap_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_FORWARD_WATER], "objectPS_forward_water.cso"); + LoadPixelShader(pixelShaders[PSTYPE_IMPOSTOR_FORWARD], "impostorPS_forward.cso"); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap_planarreflection.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_POM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_transparent_normalmap_pom.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_tiledforward_water.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_TILEDFORWARD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_tiledforward.cso", wiResourceManager::PIXELSHADER)); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD], "objectPS_tiledforward.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP], "objectPS_tiledforward_normalmap.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT], "objectPS_tiledforward_transparent.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP], "objectPS_tiledforward_transparent_normalmap.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_PLANARREFLECTION], "objectPS_tiledforward_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_PLANARREFLECTION], "objectPS_tiledforward_normalmap_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_PLANARREFLECTION], "objectPS_tiledforward_transparent_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_PLANARREFLECTION], "objectPS_tiledforward_transparent_normalmap_planarreflection.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_POM], "objectPS_tiledforward_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_NORMALMAP_POM], "objectPS_tiledforward_normalmap_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_POM], "objectPS_tiledforward_transparent_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_TRANSPARENT_NORMALMAP_POM], "objectPS_tiledforward_transparent_normalmap_pom.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_WATER], "objectPS_tiledforward_water.cso"); + LoadPixelShader(pixelShaders[PSTYPE_IMPOSTOR_TILEDFORWARD], "impostorPS_tiledforward.cso"); - pixelShaders[PSTYPE_OBJECT_HOLOGRAM] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_hologram.cso", wiResourceManager::PIXELSHADER)); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_HOLOGRAM], "objectPS_hologram.cso"); + + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_DEBUG], "objectPS_debug.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_SIMPLEST], "objectPS_simplest.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_BLACKOUT], "objectPS_blackout.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_TEXTUREONLY], "objectPS_textureonly.cso"); + LoadPixelShader(pixelShaders[PSTYPE_OBJECT_ALPHATESTONLY], "objectPS_alphatestonly.cso"); + LoadPixelShader(pixelShaders[PSTYPE_IMPOSTOR_ALPHATESTONLY], "impostorPS_alphatestonly.cso"); + LoadPixelShader(pixelShaders[PSTYPE_IMPOSTOR_SIMPLE], "impostorPS_simple.cso"); + LoadPixelShader(pixelShaders[PSTYPE_IMPOSTOR_WIRE], "impostorPS_wire.cso"); + LoadPixelShader(pixelShaders[PSTYPE_ENVIRONMENTALLIGHT], "environmentalLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_DIRLIGHT], "dirLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_POINTLIGHT], "pointLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SPOTLIGHT], "spotLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SPHERELIGHT], "sphereLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_DISCLIGHT], "discLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_RECTANGLELIGHT], "rectangleLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_TUBELIGHT], "tubeLightPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_LIGHTVISUALIZER], "lightVisualizerPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_VOLUMETRICLIGHT_DIRECTIONAL], "volumetricLight_DirectionalPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_VOLUMETRICLIGHT_POINT], "volumetricLight_PointPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_VOLUMETRICLIGHT_SPOT], "volumetricLight_SpotPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_DECAL], "decalPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_ENVMAP], "envMapPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_ENVMAP_SKY_STATIC], "envMap_skyPS_static.cso"); + LoadPixelShader(pixelShaders[PSTYPE_ENVMAP_SKY_DYNAMIC], "envMap_skyPS_dynamic.cso"); + LoadPixelShader(pixelShaders[PSTYPE_CAPTUREIMPOSTOR_ALBEDO], "captureImpostorPS_albedo.cso"); + LoadPixelShader(pixelShaders[PSTYPE_CAPTUREIMPOSTOR_NORMAL], "captureImpostorPS_normal.cso"); + LoadPixelShader(pixelShaders[PSTYPE_CAPTUREIMPOSTOR_SURFACE], "captureImpostorPS_surface.cso"); + LoadPixelShader(pixelShaders[PSTYPE_CUBEMAP], "cubemapPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_LINE], "linesPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SKY_STATIC], "skyPS_static.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SKY_DYNAMIC], "skyPS_dynamic.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SUN], "sunPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SHADOW_ALPHATEST], "shadowPS_alphatest.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SHADOW_TRANSPARENT], "shadowPS_transparent.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SHADOW_WATER], "shadowPS_water.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER], "cubeShadowPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST], "cubeShadowPS_alphatest.cso"); + LoadPixelShader(pixelShaders[PSTYPE_TRAIL], "trailPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_VOXELIZER], "objectPS_voxelizer.cso"); + LoadPixelShader(pixelShaders[PSTYPE_VOXEL], "voxelPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_FORCEFIELDVISUALIZER], "forceFieldVisualizerPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_RENDERLIGHTMAP], "renderlightmapPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_RAYTRACE_DEBUGBVH], "raytrace_debugbvhPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_DOWNSAMPLEDEPTHBUFFER], "downsampleDepthBuffer4xPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_DEFERREDCOMPOSITION], "deferredPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_POSTPROCESS_SSS], "sssPS.cso"); + LoadPixelShader(pixelShaders[PSTYPE_LENSFLARE], "lensFlarePS.cso"); + + LoadGeometryShader(geometryShaders[GSTYPE_ENVMAP], "envMapGS.cso"); + LoadGeometryShader(geometryShaders[GSTYPE_ENVMAP_SKY], "envMap_skyGS.cso"); + LoadGeometryShader(geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER], "cubeShadowGS.cso"); + LoadGeometryShader(geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST], "cubeShadowGS_alphatest.cso"); + LoadGeometryShader(geometryShaders[GSTYPE_VOXELIZER], "objectGS_voxelizer.cso"); + LoadGeometryShader(geometryShaders[GSTYPE_VOXEL], "voxelGS.cso"); + LoadGeometryShader(geometryShaders[GSTYPE_LENSFLARE], "lensFlareGS.cso"); - pixelShaders[PSTYPE_OBJECT_DEBUG] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_debug.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_SIMPLEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_simplest.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_BLACKOUT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_blackout.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_TEXTUREONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_textureonly.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_OBJECT_ALPHATESTONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_alphatestonly.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_ALPHATESTONLY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_alphatestonly.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_SIMPLE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_simple.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_IMPOSTOR_WIRE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "impostorPS_wire.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVIRONMENTALLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "environmentalLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DIRLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "dirLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_POINTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "pointLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SPOTLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "spotLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SPHERELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sphereLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DISCLIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "discLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_RECTANGLELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "rectangleLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_TUBELIGHT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "tubeLightPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_LIGHTVISUALIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lightVisualizerPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOLUMETRICLIGHT_DIRECTIONAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_DirectionalPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOLUMETRICLIGHT_POINT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_PointPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOLUMETRICLIGHT_SPOT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "volumetricLight_SpotPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DECAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "decalPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVMAP_SKY_STATIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyPS_static.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_ENVMAP_SKY_DYNAMIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyPS_dynamic.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CAPTUREIMPOSTOR_ALBEDO] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_albedo.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CAPTUREIMPOSTOR_NORMAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_normal.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CAPTUREIMPOSTOR_SURFACE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "captureImpostorPS_surface.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_CUBEMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubemapPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_LINE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "linesPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SKY_STATIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyPS_static.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SKY_DYNAMIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skyPS_dynamic.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SUN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sunPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOW_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_alphatest.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOW_TRANSPARENT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_transparent.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOW_WATER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "shadowPS_water.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowPS_alphatest.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_TRAIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "trailPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectPS_voxelizer.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_FORCEFIELDVISUALIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "forceFieldVisualizerPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_RENDERLIGHTMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "renderlightmapPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_RAYTRACE_DEBUGBVH] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_debugbvhPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DOWNSAMPLEDEPTHBUFFER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "downsampleDepthBuffer4xPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_DEFERREDCOMPOSITION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "deferredPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_POSTPROCESS_SSS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sssPS.cso", wiResourceManager::PIXELSHADER)); - pixelShaders[PSTYPE_LENSFLARE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lensFlarePS.cso", wiResourceManager::PIXELSHADER)); + LoadComputeShader(computeShaders[CSTYPE_LUMINANCE_PASS1], "luminancePass1CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_LUMINANCE_PASS2], "luminancePass2CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_TILEFRUSTUMS], "tileFrustumsCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_RESOLVEMSAADEPTHSTENCIL], "resolveMSAADepthStencilCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_VOXELSCENECOPYCLEAR], "voxelSceneCopyClearCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_VOXELSCENECOPYCLEAR_TEMPORALSMOOTHING], "voxelSceneCopyClear_TemporalSmoothing.cso"); + LoadComputeShader(computeShaders[CSTYPE_VOXELRADIANCESECONDARYBOUNCE], "voxelRadianceSecondaryBounceCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_VOXELCLEARONLYNORMAL], "voxelClearOnlyNormalCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER], "generateMIPChain2D_unorm4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER], "generateMIPChain2D_float4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_GAUSSIAN], "generateMIPChain2D_unorm4_GaussianCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_GAUSSIAN], "generateMIPChain2D_float4_GaussianCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_BICUBIC], "generateMIPChain2D_unorm4_BicubicCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_BICUBIC], "generateMIPChain2D_float4_BicubicCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER], "generateMIPChain3D_unorm4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER], "generateMIPChain3D_float4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER], "generateMIPChainCube_unorm4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER], "generateMIPChainCube_float4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER], "generateMIPChainCubeArray_unorm4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER], "generateMIPChainCubeArray_float4_SimpleFilterCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_FILTERENVMAP], "filterEnvMapCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4], "copytexture2D_unorm4CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4], "copytexture2D_float4CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4_BORDEREXPAND], "copytexture2D_unorm4_borderexpandCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4_BORDEREXPAND], "copytexture2D_float4_borderexpandCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_SKINNING], "skinningCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_SKINNING_LDS], "skinningCS_LDS.cso"); + LoadComputeShader(computeShaders[CSTYPE_RAYTRACE_LAUNCH], "raytrace_launchCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_RAYTRACE_KICKJOBS], "raytrace_kickjobsCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_RAYTRACE_CLOSESTHIT], "raytrace_closesthitCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_RAYTRACE_SHADE], "raytrace_shadeCS.cso"); - geometryShaders[GSTYPE_ENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMapGS.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_ENVMAP_SKY] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "envMap_skyGS.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowGS.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_SHADOWCUBEMAPRENDER_ALPHATEST] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "cubeShadowGS_alphatest.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_VOXELIZER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectGS_voxelizer.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_VOXEL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelGS.cso", wiResourceManager::GEOMETRYSHADER)); - geometryShaders[GSTYPE_LENSFLARE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lensFlareGS.cso", wiResourceManager::GEOMETRYSHADER)); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_FLOAT1], "blur_gaussian_float1CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_FLOAT4], "blur_gaussian_float4CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_UNORM1], "blur_gaussian_unorm1CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_UNORM4], "blur_gaussian_unorm4CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_FLOAT1], "blur_bilateral_float1CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_FLOAT4], "blur_bilateral_float4CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_UNORM1], "blur_bilateral_unorm1CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_UNORM4], "blur_bilateral_unorm4CS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_SSAO], "ssaoCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_SSR], "ssrCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_LIGHTSHAFTS], "lightshaftsCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_DEPTHOFFIELD], "depthoffieldCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_OUTLINE_FLOAT4], "outlineCS_float4.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_OUTLINE_UNORM4], "outlineCS_unorm4.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_MOTIONBLUR], "motionblurCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLOOMSEPARATE], "bloomseparateCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_FXAA], "fxaaCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_TEMPORALAA], "temporalaaCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_COLORGRADE], "colorgradeCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_LINEARDEPTH], "lineardepthCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_SHARPEN], "sharpenCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_TONEMAP], "tonemapCS.cso"); + LoadComputeShader(computeShaders[CSTYPE_POSTPROCESS_CHROMATIC_ABERRATION], "chromatic_aberrationCS.cso"); - computeShaders[CSTYPE_LUMINANCE_PASS1] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "luminancePass1CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_LUMINANCE_PASS2] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "luminancePass2CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_TILEFRUSTUMS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "tileFrustumsCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RESOLVEMSAADEPTHSTENCIL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "resolveMSAADepthStencilCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELSCENECOPYCLEAR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelSceneCopyClearCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELSCENECOPYCLEAR_TEMPORALSMOOTHING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelSceneCopyClear_TemporalSmoothing.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELRADIANCESECONDARYBOUNCE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelRadianceSecondaryBounceCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_VOXELCLEARONLYNORMAL] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "voxelClearOnlyNormalCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_GAUSSIAN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_GaussianCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_UNORM4_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_unorm4_BicubicCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_BICUBIC] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain2D_float4_BicubicCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChain3D_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCube_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCube_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCubeArray_unorm4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "generateMIPChainCubeArray_float4_SimpleFilterCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_FILTERENVMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "filterEnvMapCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_unorm4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_float4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4_BORDEREXPAND] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_unorm4_borderexpandCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4_BORDEREXPAND] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "copytexture2D_float4_borderexpandCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_SKINNING] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skinningCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_SKINNING_LDS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "skinningCS_LDS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_LAUNCH] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_launchCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_KICKJOBS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_kickjobsCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_CLOSESTHIT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_closesthitCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_RAYTRACE_SHADE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "raytrace_shadeCS.cso", wiResourceManager::COMPUTESHADER)); + LoadHullShader(hullShaders[HSTYPE_OBJECT], "objectHS.cso"); - computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_FLOAT1] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_gaussian_float1CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_FLOAT4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_gaussian_float4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_UNORM1] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_gaussian_unorm1CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLUR_GAUSSIAN_UNORM4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_gaussian_unorm4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_FLOAT1] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_bilateral_float1CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_FLOAT4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_bilateral_float4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_UNORM1] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_bilateral_unorm1CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLUR_BILATERAL_UNORM4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "blur_bilateral_unorm4CS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_SSAO] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "ssaoCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_SSR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "ssrCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_LIGHTSHAFTS] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lightshaftsCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_DEPTHOFFIELD] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "depthoffieldCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_OUTLINE_FLOAT4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "outlineCS_float4.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_OUTLINE_UNORM4] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "outlineCS_unorm4.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_MOTIONBLUR] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "motionblurCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_BLOOMSEPARATE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "bloomseparateCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_FXAA] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "fxaaCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_TEMPORALAA] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "temporalaaCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_COLORGRADE] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "colorgradeCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_LINEARDEPTH] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "lineardepthCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_SHARPEN] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "sharpenCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_TONEMAP] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "tonemapCS.cso", wiResourceManager::COMPUTESHADER)); - computeShaders[CSTYPE_POSTPROCESS_CHROMATIC_ABERRATION] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "chromatic_aberrationCS.cso", wiResourceManager::COMPUTESHADER)); + LoadDomainShader(domainShaders[DSTYPE_OBJECT], "objectDS.cso"); - hullShaders[HSTYPE_OBJECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectHS.cso", wiResourceManager::HULLSHADER)); - - - domainShaders[DSTYPE_OBJECT] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + "objectDS.cso", wiResourceManager::DOMAINSHADER)); - wiJobSystem::context ctx; // default objectshaders: @@ -1416,12 +1469,12 @@ void LoadShaders() } PipelineStateDesc desc; - desc.vs = vertexShaders[realVS]; + desc.vs = &vertexShaders[realVS]; desc.il = &vertexLayouts[realVL]; - desc.hs = hullShaders[realHS]; - desc.ds = domainShaders[realDS]; - desc.gs = geometryShaders[realGS]; - desc.ps = pixelShaders[realPS]; + desc.hs = &hullShaders[realHS]; + desc.ds = &domainShaders[realDS]; + desc.gs = &geometryShaders[realGS]; + desc.ps = &pixelShaders[realPS]; switch (blendMode) { @@ -1531,9 +1584,9 @@ void LoadShaders() VLTYPES realVL = GetVLTYPE(RENDERPASS_FORWARD, false, false, true); PipelineStateDesc desc; - desc.vs = vertexShaders[realVS]; + desc.vs = &vertexShaders[realVS]; desc.il = &vertexLayouts[realVL]; - desc.ps = pixelShaders[PSTYPE_OBJECT_HOLOGRAM]; + desc.ps = &pixelShaders[PSTYPE_OBJECT_HOLOGRAM]; desc.bs = &blendStates[BSTYPE_ADDITIVE]; desc.rs = &rasterizers[DSSTYPE_DEFAULT]; @@ -1552,30 +1605,30 @@ void LoadShaders() wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_WATER]; + desc.vs = &vertexShaders[VSTYPE_WATER]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; desc.bs = &blendStates[BSTYPE_TRANSPARENT]; desc.dss = &depthStencils[DSSTYPE_DEFAULT]; desc.il = &vertexLayouts[VLTYPE_OBJECT_POS_TEX]; - desc.ps = pixelShaders[PSTYPE_OBJECT_FORWARD_WATER]; + desc.ps = &pixelShaders[PSTYPE_OBJECT_FORWARD_WATER]; device->CreatePipelineState(&desc, &PSO_object_water[RENDERPASS_FORWARD]); - desc.ps = pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_WATER]; + desc.ps = &pixelShaders[PSTYPE_OBJECT_TILEDFORWARD_WATER]; device->CreatePipelineState(&desc, &PSO_object_water[RENDERPASS_TILEDFORWARD]); desc.dss = &depthStencils[DSSTYPE_DEPTHREAD]; desc.rs = &rasterizers[RSTYPE_SHADOW]; desc.bs = &blendStates[BSTYPE_TRANSPARENTSHADOWMAP]; - desc.vs = vertexShaders[VSTYPE_SHADOW_TRANSPARENT]; - desc.ps = pixelShaders[PSTYPE_SHADOW_WATER]; + desc.vs = &vertexShaders[VSTYPE_SHADOW_TRANSPARENT]; + desc.ps = &pixelShaders[PSTYPE_SHADOW_WATER]; device->CreatePipelineState(&desc, &PSO_object_water[RENDERPASS_SHADOW]); }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_OBJECT_SIMPLE]; - desc.ps = pixelShaders[PSTYPE_OBJECT_SIMPLEST]; + desc.vs = &vertexShaders[VSTYPE_OBJECT_SIMPLE]; + desc.ps = &pixelShaders[PSTYPE_OBJECT_SIMPLEST]; desc.rs = &rasterizers[RSTYPE_WIRE]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.dss = &depthStencils[DSSTYPE_DEFAULT]; @@ -1585,8 +1638,8 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_DECAL]; - desc.ps = pixelShaders[PSTYPE_DECAL]; + desc.vs = &vertexShaders[VSTYPE_DECAL]; + desc.ps = &pixelShaders[PSTYPE_DECAL]; desc.rs = &rasterizers[RSTYPE_FRONT]; desc.bs = &blendStates[BSTYPE_DECAL]; desc.dss = &depthStencils[DSSTYPE_DEFERREDLIGHT]; @@ -1596,7 +1649,7 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_CUBE]; + desc.vs = &vertexShaders[VSTYPE_CUBE]; desc.rs = &rasterizers[RSTYPE_OCCLUDEE]; desc.bs = &blendStates[BSTYPE_COLORWRITEDISABLE]; desc.dss = &depthStencils[DSSTYPE_DEPTHREAD]; @@ -1624,24 +1677,24 @@ void LoadShaders() switch (args.jobIndex) { case RENDERPASS_DEFERRED: - desc.vs = vertexShaders[VSTYPE_IMPOSTOR]; - desc.ps = pixelShaders[PSTYPE_IMPOSTOR_DEFERRED]; + desc.vs = &vertexShaders[VSTYPE_IMPOSTOR]; + desc.ps = &pixelShaders[PSTYPE_IMPOSTOR_DEFERRED]; break; case RENDERPASS_FORWARD: - desc.vs = vertexShaders[VSTYPE_IMPOSTOR]; - desc.ps = pixelShaders[PSTYPE_IMPOSTOR_FORWARD]; + desc.vs = &vertexShaders[VSTYPE_IMPOSTOR]; + desc.ps = &pixelShaders[PSTYPE_IMPOSTOR_FORWARD]; break; case RENDERPASS_TILEDFORWARD: - desc.vs = vertexShaders[VSTYPE_IMPOSTOR]; - desc.ps = pixelShaders[PSTYPE_IMPOSTOR_TILEDFORWARD]; + desc.vs = &vertexShaders[VSTYPE_IMPOSTOR]; + desc.ps = &pixelShaders[PSTYPE_IMPOSTOR_TILEDFORWARD]; break; case RENDERPASS_DEPTHONLY: - desc.vs = vertexShaders[VSTYPE_IMPOSTOR]; - desc.ps = pixelShaders[PSTYPE_IMPOSTOR_ALPHATESTONLY]; + desc.vs = &vertexShaders[VSTYPE_IMPOSTOR]; + desc.ps = &pixelShaders[PSTYPE_IMPOSTOR_ALPHATESTONLY]; break; default: - desc.vs = vertexShaders[VSTYPE_IMPOSTOR]; - desc.ps = pixelShaders[PSTYPE_IMPOSTOR_SIMPLE]; + desc.vs = &vertexShaders[VSTYPE_IMPOSTOR]; + desc.ps = &pixelShaders[PSTYPE_IMPOSTOR_SIMPLE]; break; } @@ -1649,8 +1702,8 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_IMPOSTOR]; - desc.ps = pixelShaders[PSTYPE_IMPOSTOR_WIRE]; + desc.vs = &vertexShaders[VSTYPE_IMPOSTOR]; + desc.ps = &pixelShaders[PSTYPE_IMPOSTOR_WIRE]; desc.rs = &rasterizers[RSTYPE_WIRE]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.dss = &depthStencils[DSSTYPE_DEFAULT]; @@ -1660,19 +1713,19 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_OBJECT_COMMON]; + desc.vs = &vertexShaders[VSTYPE_OBJECT_COMMON]; desc.rs = &rasterizers[RSTYPE_FRONT]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.dss = &depthStencils[DSSTYPE_CAPTUREIMPOSTOR]; desc.il = &vertexLayouts[VLTYPE_OBJECT_ALL]; - desc.ps = pixelShaders[PSTYPE_CAPTUREIMPOSTOR_ALBEDO]; + desc.ps = &pixelShaders[PSTYPE_CAPTUREIMPOSTOR_ALBEDO]; device->CreatePipelineState(&desc, &PSO_captureimpostor_albedo); - desc.ps = pixelShaders[PSTYPE_CAPTUREIMPOSTOR_NORMAL]; + desc.ps = &pixelShaders[PSTYPE_CAPTUREIMPOSTOR_NORMAL]; device->CreatePipelineState(&desc, &PSO_captureimpostor_normal); - desc.ps = pixelShaders[PSTYPE_CAPTUREIMPOSTOR_SURFACE]; + desc.ps = &pixelShaders[PSTYPE_CAPTUREIMPOSTOR_SURFACE]; device->CreatePipelineState(&desc, &PSO_captureimpostor_surface); }); @@ -1689,32 +1742,32 @@ void LoadShaders() switch (args.jobIndex) { case LightComponent::DIRECTIONAL: - desc.vs = vertexShaders[VSTYPE_DIRLIGHT]; - desc.ps = pixelShaders[PSTYPE_DIRLIGHT]; + desc.vs = &vertexShaders[VSTYPE_DIRLIGHT]; + desc.ps = &pixelShaders[PSTYPE_DIRLIGHT]; break; case LightComponent::POINT: - desc.vs = vertexShaders[VSTYPE_POINTLIGHT]; - desc.ps = pixelShaders[PSTYPE_POINTLIGHT]; + desc.vs = &vertexShaders[VSTYPE_POINTLIGHT]; + desc.ps = &pixelShaders[PSTYPE_POINTLIGHT]; break; case LightComponent::SPOT: - desc.vs = vertexShaders[VSTYPE_SPOTLIGHT]; - desc.ps = pixelShaders[PSTYPE_SPOTLIGHT]; + desc.vs = &vertexShaders[VSTYPE_SPOTLIGHT]; + desc.ps = &pixelShaders[PSTYPE_SPOTLIGHT]; break; case LightComponent::SPHERE: - desc.vs = vertexShaders[VSTYPE_DIRLIGHT]; - desc.ps = pixelShaders[PSTYPE_SPHERELIGHT]; + desc.vs = &vertexShaders[VSTYPE_DIRLIGHT]; + desc.ps = &pixelShaders[PSTYPE_SPHERELIGHT]; break; case LightComponent::DISC: - desc.vs = vertexShaders[VSTYPE_DIRLIGHT]; - desc.ps = pixelShaders[PSTYPE_DISCLIGHT]; + desc.vs = &vertexShaders[VSTYPE_DIRLIGHT]; + desc.ps = &pixelShaders[PSTYPE_DISCLIGHT]; break; case LightComponent::RECTANGLE: - desc.vs = vertexShaders[VSTYPE_DIRLIGHT]; - desc.ps = pixelShaders[PSTYPE_RECTANGLELIGHT]; + desc.vs = &vertexShaders[VSTYPE_DIRLIGHT]; + desc.ps = &pixelShaders[PSTYPE_RECTANGLELIGHT]; break; case LightComponent::TUBE: - desc.vs = vertexShaders[VSTYPE_DIRLIGHT]; - desc.ps = pixelShaders[PSTYPE_TUBELIGHT]; + desc.vs = &vertexShaders[VSTYPE_DIRLIGHT]; + desc.ps = &pixelShaders[PSTYPE_TUBELIGHT]; break; } @@ -1727,38 +1780,38 @@ void LoadShaders() { desc.dss = &depthStencils[DSSTYPE_DEPTHREAD]; - desc.ps = pixelShaders[PSTYPE_LIGHTVISUALIZER]; + desc.ps = &pixelShaders[PSTYPE_LIGHTVISUALIZER]; switch (args.jobIndex) { case LightComponent::POINT: desc.bs = &blendStates[BSTYPE_ADDITIVE]; - desc.vs = vertexShaders[VSTYPE_LIGHTVISUALIZER_POINTLIGHT]; + desc.vs = &vertexShaders[VSTYPE_LIGHTVISUALIZER_POINTLIGHT]; desc.rs = &rasterizers[RSTYPE_FRONT]; break; case LightComponent::SPOT: desc.bs = &blendStates[BSTYPE_ADDITIVE]; - desc.vs = vertexShaders[VSTYPE_LIGHTVISUALIZER_SPOTLIGHT]; + desc.vs = &vertexShaders[VSTYPE_LIGHTVISUALIZER_SPOTLIGHT]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; break; case LightComponent::SPHERE: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_LIGHTVISUALIZER_SPHERELIGHT]; + desc.vs = &vertexShaders[VSTYPE_LIGHTVISUALIZER_SPHERELIGHT]; desc.rs = &rasterizers[RSTYPE_FRONT]; break; case LightComponent::DISC: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_LIGHTVISUALIZER_DISCLIGHT]; + desc.vs = &vertexShaders[VSTYPE_LIGHTVISUALIZER_DISCLIGHT]; desc.rs = &rasterizers[RSTYPE_FRONT]; break; case LightComponent::RECTANGLE: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_LIGHTVISUALIZER_RECTANGLELIGHT]; + desc.vs = &vertexShaders[VSTYPE_LIGHTVISUALIZER_RECTANGLELIGHT]; desc.rs = &rasterizers[RSTYPE_BACK]; break; case LightComponent::TUBE: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_LIGHTVISUALIZER_TUBELIGHT]; + desc.vs = &vertexShaders[VSTYPE_LIGHTVISUALIZER_TUBELIGHT]; desc.rs = &rasterizers[RSTYPE_FRONT]; break; } @@ -1777,16 +1830,16 @@ void LoadShaders() switch (args.jobIndex) { case LightComponent::DIRECTIONAL: - desc.vs = vertexShaders[VSTYPE_DIRLIGHT]; - desc.ps = pixelShaders[PSTYPE_VOLUMETRICLIGHT_DIRECTIONAL]; + desc.vs = &vertexShaders[VSTYPE_DIRLIGHT]; + desc.ps = &pixelShaders[PSTYPE_VOLUMETRICLIGHT_DIRECTIONAL]; break; case LightComponent::POINT: - desc.vs = vertexShaders[VSTYPE_POINTLIGHT]; - desc.ps = pixelShaders[PSTYPE_VOLUMETRICLIGHT_POINT]; + desc.vs = &vertexShaders[VSTYPE_POINTLIGHT]; + desc.ps = &pixelShaders[PSTYPE_VOLUMETRICLIGHT_POINT]; break; case LightComponent::SPOT: - desc.vs = vertexShaders[VSTYPE_SPOTLIGHT]; - desc.ps = pixelShaders[PSTYPE_VOLUMETRICLIGHT_SPOT]; + desc.vs = &vertexShaders[VSTYPE_SPOTLIGHT]; + desc.ps = &pixelShaders[PSTYPE_VOLUMETRICLIGHT_SPOT]; break; } @@ -1797,8 +1850,8 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_DIRLIGHT]; - desc.ps = pixelShaders[PSTYPE_ENVIRONMENTALLIGHT]; + desc.vs = &vertexShaders[VSTYPE_DIRLIGHT]; + desc.ps = &pixelShaders[PSTYPE_ENVIRONMENTALLIGHT]; desc.rs = &rasterizers[RSTYPE_BACK]; desc.bs = &blendStates[BSTYPE_ENVIRONMENTALLIGHT]; desc.dss = &depthStencils[DSSTYPE_DEFERREDLIGHT]; @@ -1808,8 +1861,8 @@ void LoadShaders() wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; desc.il = &vertexLayouts[VLTYPE_RENDERLIGHTMAP]; - desc.vs = vertexShaders[VSTYPE_RENDERLIGHTMAP]; - desc.ps = pixelShaders[PSTYPE_RENDERLIGHTMAP]; + desc.vs = &vertexShaders[VSTYPE_RENDERLIGHTMAP]; + desc.ps = &pixelShaders[PSTYPE_RENDERLIGHTMAP]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; desc.bs = &blendStates[BSTYPE_TRANSPARENT]; desc.dss = &depthStencils[DSSTYPE_XRAY]; @@ -1818,8 +1871,8 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_SCREEN]; - desc.ps = pixelShaders[PSTYPE_DOWNSAMPLEDEPTHBUFFER]; + desc.vs = &vertexShaders[VSTYPE_SCREEN]; + desc.ps = &pixelShaders[PSTYPE_DOWNSAMPLEDEPTHBUFFER]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.dss = &depthStencils[DSSTYPE_WRITEONLY]; @@ -1828,8 +1881,8 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_SCREEN]; - desc.ps = pixelShaders[PSTYPE_DEFERREDCOMPOSITION]; + desc.vs = &vertexShaders[VSTYPE_SCREEN]; + desc.ps = &pixelShaders[PSTYPE_DEFERREDCOMPOSITION]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.dss = &depthStencils[DSSTYPE_DEFERREDCOMPOSITION]; @@ -1838,8 +1891,8 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_SCREEN]; - desc.ps = pixelShaders[PSTYPE_POSTPROCESS_SSS]; + desc.vs = &vertexShaders[VSTYPE_SCREEN]; + desc.ps = &pixelShaders[PSTYPE_POSTPROCESS_SSS]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.dss = &depthStencils[DSSTYPE_SSS]; @@ -1848,9 +1901,9 @@ void LoadShaders() }); wiJobSystem::Execute(ctx, [device] { PipelineStateDesc desc; - desc.vs = vertexShaders[VSTYPE_LENSFLARE]; - desc.ps = pixelShaders[PSTYPE_LENSFLARE]; - desc.gs = geometryShaders[GSTYPE_LENSFLARE]; + desc.vs = &vertexShaders[VSTYPE_LENSFLARE]; + desc.ps = &pixelShaders[PSTYPE_LENSFLARE]; + desc.gs = &geometryShaders[GSTYPE_LENSFLARE]; desc.bs = &blendStates[BSTYPE_ADDITIVE]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; desc.dss = &depthStencils[DSSTYPE_XRAY]; @@ -1867,30 +1920,30 @@ void LoadShaders() { case SKYRENDERING_STATIC: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_SKY]; - desc.ps = pixelShaders[PSTYPE_SKY_STATIC]; + desc.vs = &vertexShaders[VSTYPE_SKY]; + desc.ps = &pixelShaders[PSTYPE_SKY_STATIC]; break; case SKYRENDERING_DYNAMIC: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_SKY]; - desc.ps = pixelShaders[PSTYPE_SKY_DYNAMIC]; + desc.vs = &vertexShaders[VSTYPE_SKY]; + desc.ps = &pixelShaders[PSTYPE_SKY_DYNAMIC]; break; case SKYRENDERING_SUN: desc.bs = &blendStates[BSTYPE_ADDITIVE]; - desc.vs = vertexShaders[VSTYPE_SKY]; - desc.ps = pixelShaders[PSTYPE_SUN]; + desc.vs = &vertexShaders[VSTYPE_SKY]; + desc.ps = &pixelShaders[PSTYPE_SUN]; break; case SKYRENDERING_ENVMAPCAPTURE_STATIC: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_ENVMAP_SKY]; - desc.ps = pixelShaders[PSTYPE_ENVMAP_SKY_STATIC]; - desc.gs = geometryShaders[GSTYPE_ENVMAP_SKY]; + desc.vs = &vertexShaders[VSTYPE_ENVMAP_SKY]; + desc.ps = &pixelShaders[PSTYPE_ENVMAP_SKY_STATIC]; + desc.gs = &geometryShaders[GSTYPE_ENVMAP_SKY]; break; case SKYRENDERING_ENVMAPCAPTURE_DYNAMIC: desc.bs = &blendStates[BSTYPE_OPAQUE]; - desc.vs = vertexShaders[VSTYPE_ENVMAP_SKY]; - desc.ps = pixelShaders[PSTYPE_ENVMAP_SKY_DYNAMIC]; - desc.gs = geometryShaders[GSTYPE_ENVMAP_SKY]; + desc.vs = &vertexShaders[VSTYPE_ENVMAP_SKY]; + desc.ps = &pixelShaders[PSTYPE_ENVMAP_SKY_DYNAMIC]; + desc.gs = &geometryShaders[GSTYPE_ENVMAP_SKY]; break; } @@ -1902,16 +1955,16 @@ void LoadShaders() switch (args.jobIndex) { case DEBUGRENDERING_ENVPROBE: - desc.vs = vertexShaders[VSTYPE_SPHERE]; - desc.ps = pixelShaders[PSTYPE_CUBEMAP]; + desc.vs = &vertexShaders[VSTYPE_SPHERE]; + desc.ps = &pixelShaders[PSTYPE_CUBEMAP]; desc.dss = &depthStencils[DSSTYPE_DEFAULT]; desc.rs = &rasterizers[RSTYPE_FRONT]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.pt = TRIANGLELIST; break; case DEBUGRENDERING_GRID: - desc.vs = vertexShaders[VSTYPE_LINE]; - desc.ps = pixelShaders[PSTYPE_LINE]; + desc.vs = &vertexShaders[VSTYPE_LINE]; + desc.ps = &pixelShaders[PSTYPE_LINE]; desc.il = &vertexLayouts[VLTYPE_LINE]; desc.dss = &depthStencils[DSSTYPE_DEPTHREAD]; desc.rs = &rasterizers[RSTYPE_WIRE_DOUBLESIDED_SMOOTH]; @@ -1919,8 +1972,8 @@ void LoadShaders() desc.pt = LINELIST; break; case DEBUGRENDERING_CUBE: - desc.vs = vertexShaders[VSTYPE_LINE]; - desc.ps = pixelShaders[PSTYPE_LINE]; + desc.vs = &vertexShaders[VSTYPE_LINE]; + desc.ps = &pixelShaders[PSTYPE_LINE]; desc.il = &vertexLayouts[VLTYPE_LINE]; desc.dss = &depthStencils[DSSTYPE_DEPTHREAD]; desc.rs = &rasterizers[RSTYPE_WIRE_DOUBLESIDED_SMOOTH]; @@ -1928,8 +1981,8 @@ void LoadShaders() desc.pt = LINELIST; break; case DEBUGRENDERING_LINES: - desc.vs = vertexShaders[VSTYPE_LINE]; - desc.ps = pixelShaders[PSTYPE_LINE]; + desc.vs = &vertexShaders[VSTYPE_LINE]; + desc.ps = &pixelShaders[PSTYPE_LINE]; desc.il = &vertexLayouts[VLTYPE_LINE]; desc.dss = &depthStencils[DSSTYPE_XRAY]; desc.rs = &rasterizers[RSTYPE_WIRE_DOUBLESIDED_SMOOTH]; @@ -1937,8 +1990,8 @@ void LoadShaders() desc.pt = LINELIST; break; case DEBUGRENDERING_EMITTER: - desc.vs = vertexShaders[VSTYPE_OBJECT_DEBUG]; - desc.ps = pixelShaders[PSTYPE_OBJECT_DEBUG]; + desc.vs = &vertexShaders[VSTYPE_OBJECT_DEBUG]; + desc.ps = &pixelShaders[PSTYPE_OBJECT_DEBUG]; desc.il = &vertexLayouts[VLTYPE_OBJECT_DEBUG]; desc.dss = &depthStencils[DSSTYPE_DEPTHREAD]; desc.rs = &rasterizers[RSTYPE_WIRE_DOUBLESIDED_SMOOTH]; @@ -1946,33 +1999,33 @@ void LoadShaders() desc.pt = TRIANGLELIST; break; case DEBUGRENDERING_VOXEL: - desc.vs = vertexShaders[VSTYPE_VOXEL]; - desc.ps = pixelShaders[PSTYPE_VOXEL]; - desc.gs = geometryShaders[GSTYPE_VOXEL]; + desc.vs = &vertexShaders[VSTYPE_VOXEL]; + desc.ps = &pixelShaders[PSTYPE_VOXEL]; + desc.gs = &geometryShaders[GSTYPE_VOXEL]; desc.dss = &depthStencils[DSSTYPE_DEFAULT]; desc.rs = &rasterizers[RSTYPE_BACK]; desc.bs = &blendStates[BSTYPE_OPAQUE]; desc.pt = POINTLIST; break; case DEBUGRENDERING_FORCEFIELD_POINT: - desc.vs = vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_POINT]; - desc.ps = pixelShaders[PSTYPE_FORCEFIELDVISUALIZER]; + desc.vs = &vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_POINT]; + desc.ps = &pixelShaders[PSTYPE_FORCEFIELDVISUALIZER]; desc.dss = &depthStencils[DSSTYPE_XRAY]; desc.rs = &rasterizers[RSTYPE_BACK]; desc.bs = &blendStates[BSTYPE_TRANSPARENT]; desc.pt = TRIANGLELIST; break; case DEBUGRENDERING_FORCEFIELD_PLANE: - desc.vs = vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_PLANE]; - desc.ps = pixelShaders[PSTYPE_FORCEFIELDVISUALIZER]; + desc.vs = &vertexShaders[VSTYPE_FORCEFIELDVISUALIZER_PLANE]; + desc.ps = &pixelShaders[PSTYPE_FORCEFIELDVISUALIZER]; desc.dss = &depthStencils[DSSTYPE_XRAY]; desc.rs = &rasterizers[RSTYPE_FRONT]; desc.bs = &blendStates[BSTYPE_TRANSPARENT]; desc.pt = TRIANGLESTRIP; break; case DEBUGRENDERING_RAYTRACE_BVH: - desc.vs = vertexShaders[VSTYPE_RAYTRACE_SCREEN]; - desc.ps = pixelShaders[PSTYPE_RAYTRACE_DEBUGBVH]; + desc.vs = &vertexShaders[VSTYPE_RAYTRACE_SCREEN]; + desc.ps = &pixelShaders[PSTYPE_RAYTRACE_DEBUGBVH]; desc.dss = &depthStencils[DSSTYPE_XRAY]; desc.rs = &rasterizers[RSTYPE_DOUBLESIDED]; desc.bs = &blendStates[BSTYPE_TRANSPARENT]; @@ -2006,7 +2059,7 @@ void LoadShaders() } name += ".cso"; - tiledLightingCS[i][j][k] = static_cast(wiResourceManager::GetShaderManager().add(SHADERPATH + name, wiResourceManager::COMPUTESHADER)); + LoadComputeShader(tiledLightingCS[i][j][k], name); }); } } @@ -2588,20 +2641,18 @@ void ModifySampler(const SamplerDesc& desc, int slot) GetDevice()->CreateSamplerState(&desc, &samplers[slot]); } -std::string& GetShaderPath() +const std::string& GetShaderPath() { return SHADERPATH; } -void ReloadShaders(const std::string& path) +void SetShaderPath(const std::string& path) +{ + SHADERPATH = path; +} +void ReloadShaders() { - if (!path.empty()) - { - GetShaderPath() = path; - } - GetDevice()->ClearPipelineStateCache(); - wiResourceManager::GetShaderManager().Clear(); LoadShaders(); wiHairParticle::LoadShaders(); wiEmittedParticle::LoadShaders(); @@ -2654,8 +2705,6 @@ void ClearWorld() { GetDevice()->WaitForGPU(); - enviroMap = nullptr; - for (wiSprite* x : waterRipples) { delete x; @@ -2896,9 +2945,9 @@ void BindEnvironmentTextures(SHADERSTAGE stage, CommandList cmd) device->BindResource(stage, &textures[TEXTYPE_CUBEARRAY_ENVMAPARRAY], TEXSLOT_ENVMAPARRAY, cmd); device->BindResource(stage, GetVoxelRadianceSecondaryBounceEnabled() ? &textures[TEXTYPE_3D_VOXELRADIANCE_HELPER] : &textures[TEXTYPE_3D_VOXELRADIANCE], TEXSLOT_VOXELRADIANCE, cmd); - if (enviroMap != nullptr) + if (GetScene().weather.skyMap != nullptr) { - device->BindResource(stage, enviroMap, TEXSLOT_GLOBALENVMAP, cmd); + device->BindResource(stage, GetScene().weather.skyMap->texture, TEXSLOT_GLOBALENVMAP, cmd); } } @@ -4024,7 +4073,7 @@ void UpdateRenderData(CommandList cmd) 0,0,0,0,0,0,0,0 }; device->BindVertexBuffers(vbs, 0, arraysize(vbs), strides, nullptr, cmd); - device->BindComputeShader(computeShaders[CSTYPE_SKINNING_LDS], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_SKINNING_LDS], cmd); } CSTYPES targetCS = CSTYPE_SKINNING_LDS; @@ -4038,7 +4087,7 @@ void UpdateRenderData(CommandList cmd) if (targetCS != lastCS) { lastCS = targetCS; - device->BindComputeShader(computeShaders[targetCS], cmd); + device->BindComputeShader(&computeShaders[targetCS], cmd); } // Upload bones for skinning to shader @@ -4751,12 +4800,12 @@ void DrawLensFlares( device->BindConstantBuffer(GS, &constantBuffers[CBTYPE_LENSFLARE], CB_GETBINDSLOT(LensFlareCB), cmd); uint32_t i = 0; - for (const Texture* x : light.lensFlareRimTextures) + for (auto& x : light.lensFlareRimTextures) { if (x != nullptr) { - device->BindResource(PS, x, TEXSLOT_ONDEMAND0 + i, cmd); - device->BindResource(GS, x, TEXSLOT_ONDEMAND0 + i, cmd); + device->BindResource(PS, x->texture, TEXSLOT_ONDEMAND0 + i, cmd); + device->BindResource(GS, x->texture, TEXSLOT_ONDEMAND0 + i, cmd); i++; if (i == 7) { @@ -5976,10 +6025,10 @@ void DrawSky(CommandList cmd) device->EventBegin("DrawSky", cmd); - if (enviroMap != nullptr) + if (scene.weather.skyMap != nullptr) { device->BindPipelineState(&PSO_sky[SKYRENDERING_STATIC], cmd); - device->BindResource(PS, enviroMap, TEXSLOT_GLOBALENVMAP, cmd); + device->BindResource(PS, scene.weather.skyMap->texture, TEXSLOT_GLOBALENVMAP, cmd); } else { @@ -6001,11 +6050,6 @@ void DrawSun(CommandList cmd) device->BindPipelineState(&PSO_sky[SKYRENDERING_SUN], cmd); - if (enviroMap != nullptr) - { - device->BindResource(PS, wiTextureHelper::getBlack(), TEXSLOT_ONDEMAND0, cmd); - } - BindConstantBuffers(VS, cmd); BindConstantBuffers(PS, cmd); @@ -6294,10 +6338,10 @@ void RefreshEnvProbes(CommandList cmd) // sky { - if (enviroMap != nullptr) + if (scene.weather.skyMap != nullptr) { device->BindPipelineState(&PSO_sky[SKYRENDERING_ENVMAPCAPTURE_STATIC], cmd); - device->BindResource(PS, enviroMap, TEXSLOT_ONDEMAND0, cmd); + device->BindResource(PS, scene.weather.skyMap->texture, TEXSLOT_ONDEMAND0, cmd); } else { @@ -6319,7 +6363,7 @@ void RefreshEnvProbes(CommandList cmd) TextureDesc desc = textures[TEXTYPE_CUBEARRAY_ENVMAPARRAY].GetDesc(); int arrayIndex = probe.textureIndex; - device->BindComputeShader(computeShaders[CSTYPE_FILTERENVMAP], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_FILTERENVMAP], cmd); desc.Width = 1; desc.Height = 1; @@ -6686,11 +6730,11 @@ void VoxelRadiance(CommandList cmd) static bool smooth_copy = true; if (smooth_copy) { - device->BindComputeShader(computeShaders[CSTYPE_VOXELSCENECOPYCLEAR_TEMPORALSMOOTHING], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_VOXELSCENECOPYCLEAR_TEMPORALSMOOTHING], cmd); } else { - device->BindComputeShader(computeShaders[CSTYPE_VOXELSCENECOPYCLEAR], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_VOXELSCENECOPYCLEAR], cmd); } device->Dispatch((uint32_t)(voxelSceneData.res * voxelSceneData.res * voxelSceneData.res / 256), 1, 1, cmd); device->EventEnd(cmd); @@ -6704,14 +6748,14 @@ void VoxelRadiance(CommandList cmd) device->BindUAV(CS, &textures[TEXTYPE_3D_VOXELRADIANCE_HELPER], 0, cmd); device->BindResource(CS, &textures[TEXTYPE_3D_VOXELRADIANCE], 0, cmd); device->BindResource(CS, &resourceBuffers[RBTYPE_VOXELSCENE], 1, cmd); - device->BindComputeShader(computeShaders[CSTYPE_VOXELRADIANCESECONDARYBOUNCE], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_VOXELRADIANCESECONDARYBOUNCE], cmd); device->Dispatch((uint32_t)(voxelSceneData.res * voxelSceneData.res * voxelSceneData.res / 64), 1, 1, cmd); device->EventEnd(cmd); device->EventBegin("Voxel Scene Clear Normals", cmd); device->UnbindResources(1, 1, cmd); device->BindUAV(CS, &resourceBuffers[RBTYPE_VOXELSCENE], 0, cmd); - device->BindComputeShader(computeShaders[CSTYPE_VOXELCLEARONLYNORMAL], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_VOXELCLEARONLYNORMAL], cmd); device->Dispatch((uint32_t)(voxelSceneData.res * voxelSceneData.res * voxelSceneData.res / 256), 1, 1, cmd); device->EventEnd(cmd); @@ -6820,7 +6864,7 @@ void ComputeTiledLightCulling( GPUResource* uavs[] = { frustumBuffer }; device->BindUAVs(CS, uavs, 0, arraysize(uavs), cmd); - device->BindComputeShader(computeShaders[CSTYPE_TILEFRUSTUMS], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_TILEFRUSTUMS], cmd); DispatchParamsCB dispatchParams; dispatchParams.xDispatchParams_numThreads.x = tileCount.x; @@ -6862,7 +6906,7 @@ void ComputeTiledLightCulling( device->BindResource(CS, frustumBuffer, SBSLOT_TILEFRUSTUMS, cmd); - device->BindComputeShader(tiledLightingCS[deferred][GetAdvancedLightCulling()][GetDebugLightCulling()], cmd); + device->BindComputeShader(&tiledLightingCS[deferred][GetAdvancedLightCulling()][GetDebugLightCulling()], cmd); if (GetDebugLightCulling()) { @@ -6940,7 +6984,7 @@ void ResolveMSAADepthBuffer(const Texture& dst, const Texture& src, CommandList const TextureDesc& desc = src.GetDesc(); - device->BindComputeShader(computeShaders[CSTYPE_RESOLVEMSAADEPTHSTENCIL], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_RESOLVEMSAADEPTHSTENCIL], cmd); device->Dispatch((desc.Width + 7) / 8, (desc.Height + 7) / 8, 1, cmd); @@ -6998,12 +7042,12 @@ void GenerateMipChain(const Texture& texture, MIPGENFILTER filter, CommandList c { case MIPGENFILTER_POINT: device->EventBegin("GenerateMipChain CubeArray - PointFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_POINT_CLAMP], SSLOT_ONDEMAND0, cmd); break; case MIPGENFILTER_LINEAR: device->EventBegin("GenerateMipChain CubeArray - LinearFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBEARRAY_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBEARRAY_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_LINEAR_CLAMP], SSLOT_ONDEMAND0, cmd); break; default: @@ -7043,12 +7087,12 @@ void GenerateMipChain(const Texture& texture, MIPGENFILTER filter, CommandList c { case MIPGENFILTER_POINT: device->EventBegin("GenerateMipChain Cube - PointFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_POINT_CLAMP], SSLOT_ONDEMAND0, cmd); break; case MIPGENFILTER_LINEAR: device->EventBegin("GenerateMipChain Cube - LinearFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAINCUBE_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAINCUBE_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_LINEAR_CLAMP], SSLOT_ONDEMAND0, cmd); break; default: @@ -7090,21 +7134,21 @@ void GenerateMipChain(const Texture& texture, MIPGENFILTER filter, CommandList c { case MIPGENFILTER_POINT: device->EventBegin("GenerateMipChain 2D - PointFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_POINT_CLAMP], SSLOT_ONDEMAND0, cmd); break; case MIPGENFILTER_LINEAR: device->EventBegin("GenerateMipChain 2D - LinearFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_LINEAR_CLAMP], SSLOT_ONDEMAND0, cmd); break; case MIPGENFILTER_GAUSSIAN: device->EventBegin("GenerateMipChain 2D - GaussianFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_GAUSSIAN : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_GAUSSIAN], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_GAUSSIAN : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_GAUSSIAN], cmd); break; case MIPGENFILTER_BICUBIC: device->EventBegin("GenerateMipChain 2D - BicubicFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_BICUBIC : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_BICUBIC], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN2D_FLOAT4_BICUBIC : CSTYPE_GENERATEMIPCHAIN2D_UNORM4_BICUBIC], cmd); break; default: assert(0); @@ -7148,12 +7192,12 @@ void GenerateMipChain(const Texture& texture, MIPGENFILTER filter, CommandList c { case MIPGENFILTER_POINT: device->EventBegin("GenerateMipChain 3D - PointFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_POINT_CLAMP], SSLOT_ONDEMAND0, cmd); break; case MIPGENFILTER_LINEAR: device->EventBegin("GenerateMipChain 3D - LinearFilter", cmd); - device->BindComputeShader(computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER], cmd); + device->BindComputeShader(&computeShaders[hdr ? CSTYPE_GENERATEMIPCHAIN3D_FLOAT4_SIMPLEFILTER : CSTYPE_GENERATEMIPCHAIN3D_UNORM4_SIMPLEFILTER], cmd); device->BindSampler(CS, &samplers[SSLOT_LINEAR_CLAMP], SSLOT_ONDEMAND0, cmd); break; default: @@ -7217,12 +7261,12 @@ void CopyTexture2D(const Texture& dst, uint32_t DstMIP, uint32_t DstX, uint32_t if (hdr) { device->EventBegin("CopyTexture_FLOAT4", cmd); - device->BindComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4], cmd); } else { device->EventBegin("CopyTexture_UNORM4", cmd); - device->BindComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4], cmd); } } else @@ -7230,12 +7274,12 @@ void CopyTexture2D(const Texture& dst, uint32_t DstMIP, uint32_t DstX, uint32_t if (hdr) { device->EventBegin("CopyTexture_BORDEREXPAND_FLOAT4", cmd); - device->BindComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4_BORDEREXPAND], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_COPYTEXTURE2D_FLOAT4_BORDEREXPAND], cmd); } else { device->EventBegin("CopyTexture_BORDEREXPAND_UNORM4", cmd); - device->BindComputeShader(computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4_BORDEREXPAND], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_COPYTEXTURE2D_UNORM4_BORDEREXPAND], cmd); } } @@ -7337,7 +7381,7 @@ RayBuffers* GenerateScreenRayBuffers(const CameraComponent& camera, CommandList device->EventBegin("Launch Screen Rays", cmd); { - device->BindComputeShader(computeShaders[CSTYPE_RAYTRACE_LAUNCH], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_RAYTRACE_LAUNCH], cmd); const XMFLOAT4& halton = wiMath::GetHaltonSequence((int)GetDevice()->GetFrameCount()); RaytracingCB cb; @@ -7407,9 +7451,9 @@ void RayTraceScene( // Set up tracing resources: sceneBVH.Bind(CS, cmd); - if (enviroMap != nullptr) + if (scene.weather.skyMap != nullptr) { - device->BindResource(CS, enviroMap, TEXSLOT_GLOBALENVMAP, cmd); + device->BindResource(CS, scene.weather.skyMap->texture, TEXSLOT_GLOBALENVMAP, cmd); } const XMFLOAT4& halton = wiMath::GetHaltonSequence((int)GetDevice()->GetFrameCount()); @@ -7437,7 +7481,7 @@ void RayTraceScene( device->EventBegin("Kick Raytrace Jobs", cmd); { // Prepare indirect dispatch based on counter buffer value: - device->BindComputeShader(computeShaders[CSTYPE_RAYTRACE_KICKJOBS], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_RAYTRACE_KICKJOBS], cmd); const GPUResource* res[] = { &rayBuffers->rayCountBuffer[__readBufferID], @@ -7475,7 +7519,7 @@ void RayTraceScene( range = wiProfiler::BeginRangeGPU("RayTrace - Shade", cmd); } - device->BindComputeShader(computeShaders[CSTYPE_RAYTRACE_SHADE], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_RAYTRACE_SHADE], cmd); const GPUResource* res[] = { &rayBuffers->rayCountBuffer[__readBufferID], @@ -7516,7 +7560,7 @@ void RayTraceScene( range = wiProfiler::BeginRangeGPU("RayTrace - First Bounce", cmd); } - device->BindComputeShader(computeShaders[CSTYPE_RAYTRACE_CLOSESTHIT], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_RAYTRACE_CLOSESTHIT], cmd); const GPUResource* res[] = { &rayBuffers->rayCountBuffer[__readBufferID], @@ -8096,9 +8140,9 @@ void UpdateFrameCB(CommandList cmd) cb.g_xFrame_WindWaveSize = scene.weather.windWaveSize; cb.g_xFrame_WindDirection = scene.weather.windDirection; cb.g_xFrame_StaticSkyGamma = 0.0f; - if (enviroMap != nullptr) + if (scene.weather.skyMap != nullptr) { - bool hdr = !GetDevice()->IsFormatUnorm(enviroMap->GetDesc().Format); + bool hdr = !GetDevice()->IsFormatUnorm(scene.weather.skyMap->texture->GetDesc().Format); cb.g_xFrame_StaticSkyGamma = hdr ? 1.0f : cb.g_xFrame_Gamma; } cb.g_xFrame_FrameCount = (uint)GetDevice()->GetFrameCount(); @@ -8258,7 +8302,7 @@ const Texture* ComputeLuminance(const Texture& sourceImage, CommandList cmd) // Pass 1 : Create luminance map from scene tex TextureDesc luminance_map_desc = luminance_map->GetDesc(); - device->BindComputeShader(computeShaders[CSTYPE_LUMINANCE_PASS1], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_LUMINANCE_PASS1], cmd); device->BindResource(CS, &sourceImage, TEXSLOT_ONDEMAND0, cmd); device->BindUAV(CS, luminance_map.get(), 0, cmd); device->Dispatch(luminance_map_desc.Width/16, luminance_map_desc.Height/16, 1, cmd); @@ -8268,7 +8312,7 @@ const Texture* ComputeLuminance(const Texture& sourceImage, CommandList cmd) for (size_t i = 0; i < luminance_avg.size(); ++i) { luminance_avg_desc = luminance_avg[i]->GetDesc(); - device->BindComputeShader(computeShaders[CSTYPE_LUMINANCE_PASS2], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_LUMINANCE_PASS2], cmd); const GPUResource* uavs[] = { luminance_avg[i] @@ -8365,7 +8409,7 @@ void Postprocess_Blur_Gaussian( assert(0); // implement format! break; } - device->BindComputeShader(computeShaders[cs], cmd); + device->BindComputeShader(&computeShaders[cs], cmd); device->BindConstantBuffer(CS, &constantBuffers[CBTYPE_POSTPROCESS], CB_GETBINDSLOT(PostProcessCB), cmd); // Horizontal: @@ -8473,7 +8517,7 @@ void Postprocess_Blur_Bilateral( assert(0); // implement format! break; } - device->BindComputeShader(computeShaders[cs], cmd); + device->BindComputeShader(&computeShaders[cs], cmd); device->BindConstantBuffer(CS, &constantBuffers[CBTYPE_POSTPROCESS], CB_GETBINDSLOT(PostProcessCB), cmd); // Horizontal: @@ -8562,7 +8606,7 @@ void Postprocess_SSAO( device->UnbindResources(TEXSLOT_RENDERPATH_SSAO, 1, cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_SSAO], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_SSAO], cmd); device->BindResource(CS, &depthbuffer, TEXSLOT_DEPTH, cmd); device->BindResource(CS, &lineardepth, TEXSLOT_LINEARDEPTH, cmd); @@ -8615,7 +8659,7 @@ void Postprocess_SSR( device->UnbindResources(TEXSLOT_RENDERPATH_SSR, 1, cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_SSR], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_SSR], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); device->BindResource(CS, &depthbuffer, TEXSLOT_DEPTH, cmd); @@ -8752,7 +8796,7 @@ void Postprocess_LightShafts( device->EventBegin("Postprocess_LightShafts", cmd); auto range = wiProfiler::BeginRangeGPU("LightShafts", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_LIGHTSHAFTS], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_LIGHTSHAFTS], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); @@ -8805,7 +8849,7 @@ void Postprocess_DepthOfField( device->EventBegin("Postprocess_DepthOfField", cmd); auto range = wiProfiler::BeginRangeGPU("Depth of Field", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_DEPTHOFFIELD], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_DEPTHOFFIELD], cmd); device->BindResource(CS, &input_sharp, TEXSLOT_ONDEMAND0, cmd); device->BindResource(CS, &input_blurred, TEXSLOT_ONDEMAND1, cmd); @@ -8859,11 +8903,11 @@ void Postprocess_Outline( if (device->IsFormatUnorm(desc.Format)) { - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_OUTLINE_UNORM4], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_OUTLINE_UNORM4], cmd); } else { - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_OUTLINE_FLOAT4], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_OUTLINE_FLOAT4], cmd); } device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); @@ -8913,7 +8957,7 @@ void Postprocess_MotionBlur( device->EventBegin("Postprocess_MotionBlur", cmd); auto range = wiProfiler::BeginRangeGPU("MotionBlur", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_MOTIONBLUR], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_MOTIONBLUR], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); device->BindResource(CS, &velocity, TEXSLOT_GBUFFER1, cmd); @@ -8958,7 +9002,7 @@ void Postprocess_BloomSeparate( device->EventBegin("Postprocess_BloomSeparate", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_BLOOMSEPARATE], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_BLOOMSEPARATE], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); @@ -9002,7 +9046,7 @@ void Postprocess_FXAA( device->EventBegin("Postprocess_FXAA", cmd); auto range = wiProfiler::BeginRangeGPU("FXAA", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_FXAA], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_FXAA], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); @@ -9048,7 +9092,7 @@ void Postprocess_TemporalAA( device->EventBegin("Postprocess_TemporalAA", cmd); auto range = wiProfiler::BeginRangeGPU("Temporal AA Resolve", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_TEMPORALAA], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_TEMPORALAA], cmd); device->BindResource(CS, &input_current, TEXSLOT_ONDEMAND0, cmd); device->BindResource(CS, &input_history, TEXSLOT_ONDEMAND1, cmd); @@ -9094,7 +9138,7 @@ void Postprocess_Colorgrade( device->EventBegin("Postprocess_Colorgrade", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_COLORGRADE], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_COLORGRADE], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); device->BindResource(CS, &lookuptable, TEXSLOT_ONDEMAND1, cmd); @@ -9137,7 +9181,7 @@ void Postprocess_Lineardepth( device->EventBegin("Postprocess_Lineardepth", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_LINEARDEPTH], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_LINEARDEPTH], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); @@ -9180,7 +9224,7 @@ void Postprocess_Sharpen( device->EventBegin("Postprocess_Sharpen", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_SHARPEN], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_SHARPEN], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); @@ -9226,7 +9270,7 @@ void Postprocess_Tonemap( device->EventBegin("Postprocess_Tonemap", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_TONEMAP], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_TONEMAP], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); device->BindResource(CS, &input_luminance, TEXSLOT_ONDEMAND1, cmd); @@ -9272,7 +9316,7 @@ void Postprocess_Chromatic_Aberration( device->EventBegin("Postprocess_Chromatic_Aberration", cmd); - device->BindComputeShader(computeShaders[CSTYPE_POSTPROCESS_CHROMATIC_ABERRATION], cmd); + device->BindComputeShader(&computeShaders[CSTYPE_POSTPROCESS_CHROMATIC_ABERRATION], cmd); device->BindResource(CS, &input, TEXSLOT_ONDEMAND0, cmd); @@ -9441,8 +9485,6 @@ float GetSpecularAAParam() { return SPECULARAA; } void SetAdvancedRefractionsEnabled(bool value) { advancedRefractions = value; } bool GetAdvancedRefractionsEnabled() { return advancedRefractions; } bool IsRequestedReflectionRendering() { return requestReflectionRendering; } -void SetEnvironmentMap(wiGraphics::Texture* tex) { enviroMap = tex; } -const Texture* GetEnvironmentMap() { return enviroMap; } void SetGameSpeed(float value) { GameSpeed = std::max(0.0f, value); } float GetGameSpeed() { return GameSpeed; } void SetOceanEnabled(bool enabled) diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index 04f9567a2..edc1382cf 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -2,7 +2,7 @@ #include "CommonInclude.h" #include "wiEnums.h" #include "wiGraphicsDevice.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" #include "wiECS.h" struct RAY; @@ -41,17 +41,26 @@ namespace wiRenderer // Retrieve the main graphics device: wiGraphics::GraphicsDevice* GetDevice(); - // Returns the shader path that you can also modify - std::string& GetShaderPath(); - // Reload shaders, use the argument to modify the shader path. If the argument is empty, the shader path will not be modified - void ReloadShaders(const std::string& path = ""); + // Returns the shader loading directory + const std::string& GetShaderPath(); + // Sets the shader loading directory + void SetShaderPath(const std::string& path); + // Reload shaders + void ReloadShaders(); + + bool LoadVertexShader(wiGraphics::VertexShader& shader, const std::string& filename); + bool LoadHullShader(wiGraphics::HullShader& shader, const std::string& filename); + bool LoadDomainShader(wiGraphics::DomainShader& shader, const std::string& filename); + bool LoadGeometryShader(wiGraphics::GeometryShader& shader, const std::string& filename); + bool LoadPixelShader(wiGraphics::PixelShader& shader, const std::string& filename); + bool LoadComputeShader(wiGraphics::ComputeShader& shader, const std::string& filename); // Returns the main camera that is currently being used in rendering (and also for post processing) - wiSceneSystem::CameraComponent& GetCamera(); + wiScene::CameraComponent& GetCamera(); // Returns the previous frame's camera that is currently being used in rendering to reproject - wiSceneSystem::CameraComponent& GetPrevCamera(); + wiScene::CameraComponent& GetPrevCamera(); // Returns the planar reflection camera that is currently being used in rendering - wiSceneSystem::CameraComponent& GetRefCamera(); + wiScene::CameraComponent& GetRefCamera(); // Attach camera to entity for the current frame void AttachCamera(wiECS::Entity entity); @@ -65,7 +74,7 @@ namespace wiRenderer // Updates the per frame constant buffer (need to call at least once per frame) void UpdateFrameCB(wiGraphics::CommandList cmd); // Updates the per camera constant buffer need to call for each different camera that is used when calling DrawScene() and the like - void UpdateCameraCB(const wiSceneSystem::CameraComponent& camera, wiGraphics::CommandList cmd); + void UpdateCameraCB(const wiScene::CameraComponent& camera, wiGraphics::CommandList cmd); // Set a global clipping plane state that is available to use in any shader (access as float4 g_xClipPlane) void SetClipPlane(const XMFLOAT4& clipPlane, wiGraphics::CommandList cmd); // Set a global alpha reference value that can be used by any shaders to perform alpha-testing (access as float g_xAlphaRef) @@ -73,28 +82,28 @@ namespace wiRenderer // Resets the global shader alpha reference value to float g_xAlphaRef = 0.75f inline void ResetAlphaRef(wiGraphics::CommandList cmd) { SetAlphaRef(0.75f, cmd); } - // Draw skydome centered to camera. Its color will be either dynamically computed, or the global environment map will be used if you called SetEnvironmentMap() + // Draw skydome centered to camera. void DrawSky(wiGraphics::CommandList cmd); // A black skydome will be draw with only the sun being visible on it void DrawSun(wiGraphics::CommandList cmd); // Draw the world from a camera. You must call UpdateCameraCB() at least once in this frame prior to this - void DrawScene(const wiSceneSystem::CameraComponent& camera, bool tessellation, wiGraphics::CommandList cmd, RENDERPASS renderPass, bool grass, bool occlusionCulling); + void DrawScene(const wiScene::CameraComponent& camera, bool tessellation, wiGraphics::CommandList cmd, RENDERPASS renderPass, bool grass, bool occlusionCulling); // Draw the transparent world from a camera. You must call UpdateCameraCB() at least once in this frame prior to this - void DrawScene_Transparent(const wiSceneSystem::CameraComponent& camera, const wiGraphics::Texture& lineardepth, RENDERPASS renderPass, wiGraphics::CommandList cmd, bool grass, bool occlusionCulling); + void DrawScene_Transparent(const wiScene::CameraComponent& camera, const wiGraphics::Texture& lineardepth, RENDERPASS renderPass, wiGraphics::CommandList cmd, bool grass, bool occlusionCulling); // Draw shadow maps for each visible light that has associated shadow maps - void DrawShadowmaps(const wiSceneSystem::CameraComponent& camera, wiGraphics::CommandList cmd, uint32_t layerMask = ~0); + void DrawShadowmaps(const wiScene::CameraComponent& camera, wiGraphics::CommandList cmd, uint32_t layerMask = ~0); // Draw debug world. You must also enable what parts to draw, eg. SetToDrawGridHelper, etc, see implementation for details what can be enabled. - void DrawDebugWorld(const wiSceneSystem::CameraComponent& camera, wiGraphics::CommandList cmd); + void DrawDebugWorld(const wiScene::CameraComponent& camera, wiGraphics::CommandList cmd); // Draw Soft offscreen particles. Linear depth should be already readable (see BindDepthTextures()) void DrawSoftParticles( - const wiSceneSystem::CameraComponent& camera, + const wiScene::CameraComponent& camera, const wiGraphics::Texture& lineardepth, bool distortion, wiGraphics::CommandList cmd ); // Draw deferred lights. Gbuffer and depth textures should already be readable (see BindGBufferTextures(), BindDepthTextures()) void DrawDeferredLights( - const wiSceneSystem::CameraComponent& camera, + const wiScene::CameraComponent& camera, const wiGraphics::Texture& depthbuffer, const wiGraphics::Texture& gbuffer0, const wiGraphics::Texture& gbuffer1, @@ -103,24 +112,24 @@ namespace wiRenderer ); // Draw simple light visualizer geometries void DrawLightVisualizers( - const wiSceneSystem::CameraComponent& camera, + const wiScene::CameraComponent& camera, wiGraphics::CommandList cmd ); // Draw volumetric light scattering effects void DrawVolumeLights( - const wiSceneSystem::CameraComponent& camera, + const wiScene::CameraComponent& camera, const wiGraphics::Texture& depthbuffer, wiGraphics::CommandList cmd ); // Draw Lens Flares for lights that have them enabled void DrawLensFlares( - const wiSceneSystem::CameraComponent& camera, + const wiScene::CameraComponent& camera, const wiGraphics::Texture& depthbuffer, wiGraphics::CommandList cmd ); // Draw deferred decals void DrawDeferredDecals( - const wiSceneSystem::CameraComponent& camera, + const wiScene::CameraComponent& camera, const wiGraphics::Texture& depthbuffer, wiGraphics::CommandList cmd ); @@ -299,7 +308,7 @@ namespace wiRenderer void Create(wiGraphics::GraphicsDevice* device, uint32_t newRayCapacity); }; // Generate rays for every pixel of the internal resolution - RayBuffers* GenerateScreenRayBuffers(const wiSceneSystem::CameraComponent& camera, wiGraphics::CommandList cmd); + RayBuffers* GenerateScreenRayBuffers(const wiScene::CameraComponent& camera, wiGraphics::CommandList cmd); // Render the scene with ray tracing. You provide the ray buffer, where each ray maps to one pixel of the result testure void RayTraceScene( const RayBuffers* rayBuffers, @@ -428,8 +437,6 @@ namespace wiRenderer void SetAdvancedRefractionsEnabled(bool value); bool GetAdvancedRefractionsEnabled(); bool IsRequestedReflectionRendering(); - void SetEnvironmentMap(wiGraphics::Texture* tex); - const wiGraphics::Texture* GetEnvironmentMap(); const XMFLOAT4& GetWaterPlane(); void SetGameSpeed(float value); float GetGameSpeed(); diff --git a/WickedEngine/wiRenderer_BindLua.cpp b/WickedEngine/wiRenderer_BindLua.cpp index abcc3d546..a079be36f 100644 --- a/WickedEngine/wiRenderer_BindLua.cpp +++ b/WickedEngine/wiRenderer_BindLua.cpp @@ -1,8 +1,8 @@ #include "wiRenderer_BindLua.h" #include "wiRenderer.h" #include "wiHelper.h" -#include "wiSceneSystem.h" -#include "wiSceneSystem_BindLua.h" +#include "wiScene.h" +#include "wiScene_BindLua.h" #include "Vector_BindLua.h" #include "Matrix_BindLua.h" #include "Texture_BindLua.h" @@ -12,8 +12,8 @@ using namespace std; using namespace wiECS; using namespace wiGraphics; -using namespace wiSceneSystem; -using namespace wiSceneSystem_BindLua; +using namespace wiScene; +using namespace wiScene_BindLua; namespace wiRenderer_BindLua { @@ -93,23 +93,6 @@ namespace wiRenderer_BindLua return 0; } - int SetEnvironmentMap(lua_State* L) - { - int argc = wiLua::SGetArgCount(L); - if (argc > 0) - { - Texture_BindLua* tex = Luna::lightcheck(L, 1); - if (tex != nullptr) - { - wiRenderer::SetEnvironmentMap(tex->texture); - } - else - wiLua::SError(L, "SetEnvironmentMap(Texture cubemap) argument is not a texture!"); - } - else - wiLua::SError(L, "SetEnvironmentMap(Texture cubemap) not enough arguments!"); - return 0; - } int SetAlphaCompositionEnabled(lua_State* L) { int argc = wiLua::SGetArgCount(L); @@ -352,14 +335,7 @@ namespace wiRenderer_BindLua } int ReloadShaders(lua_State* L) { - if (wiLua::SGetArgCount(L) > 0) - { - wiRenderer::ReloadShaders(wiLua::SGetString(L, 1)); - } - else - { - wiRenderer::ReloadShaders(); - } + wiRenderer::ReloadShaders(); return 0; } @@ -381,7 +357,6 @@ namespace wiRenderer_BindLua wiLua::GetGlobal()->RegisterFunc("GetCamera", GetCamera); wiLua::GetGlobal()->RegisterFunc("AttachCamera", AttachCamera); - wiLua::GetGlobal()->RegisterFunc("SetEnvironmentMap", SetEnvironmentMap); wiLua::GetGlobal()->RegisterFunc("SetAlphaCompositionEnabled", SetAlphaCompositionEnabled); wiLua::GetGlobal()->RegisterFunc("SetShadowProps2D", SetShadowProps2D); wiLua::GetGlobal()->RegisterFunc("SetShadowPropsCube", SetShadowPropsCube); diff --git a/WickedEngine/wiResourceManager.cpp b/WickedEngine/wiResourceManager.cpp index b52275b7d..314d8c4fc 100644 --- a/WickedEngine/wiResourceManager.cpp +++ b/WickedEngine/wiResourceManager.cpp @@ -1,6 +1,5 @@ #include "wiResourceManager.h" #include "wiRenderer.h" -#include "wiAudio.h" #include "wiHelper.h" #include "wiTextureHelper.h" @@ -9,71 +8,72 @@ #include -using namespace std; using namespace wiGraphics; -static const std::unordered_map types = { - make_pair("JPG", wiResourceManager::IMAGE), - make_pair("PNG", wiResourceManager::IMAGE), - make_pair("DDS", wiResourceManager::IMAGE), - make_pair("TGA", wiResourceManager::IMAGE), - make_pair("WAV", wiResourceManager::SOUND) -}; - - -wiResourceManager& wiResourceManager::GetGlobal() +wiResource::~wiResource() { - static wiResourceManager globalResources; - return globalResources; -} -wiResourceManager& wiResourceManager::GetShaderManager() -{ - static wiResourceManager shaderManager; - return shaderManager; -} - - -wiResourceManager::Resource wiResourceManager::get(const wiHashString& name, bool incRefCount) -{ - lock.lock(); - auto& it = resources.find(name); - if (it != resources.end()) + if (data != nullptr) { - if(incRefCount) - it->second.refCount++; - lock.unlock(); - return it->second; + switch (type) + { + case wiResource::IMAGE: + SAFE_DELETE(texture); + break; + case wiResource::SOUND: + SAFE_DELETE(sound); + break; + }; } - - lock.unlock(); - return Resource(); } -const void* wiResourceManager::add(const wiHashString& name, Data_Type newType) +namespace wiResourceManager { - Resource res = get(name,true); - if(res.type == EMPTY) + std::mutex locker; + std::unordered_map> resources; + + static const std::unordered_map types = { + std::make_pair("JPG", wiResource::IMAGE), + std::make_pair("PNG", wiResource::IMAGE), + std::make_pair("DDS", wiResource::IMAGE), + std::make_pair("TGA", wiResource::IMAGE), + std::make_pair("WAV", wiResource::SOUND) + }; + + std::shared_ptr Load(const wiHashString& name) { - string nameStr = name.GetString(); - string ext = wiHelper::toUpper(nameStr.substr(nameStr.length() - 3, nameStr.length())); - Data_Type type; + locker.lock(); + auto it = resources.find(name); + bool found = it != resources.end() && !it->second.expired(); + locker.unlock(); + + if (found) + { + return it->second.lock(); + } + + + std::string nameStr = name.GetString(); + std::string ext = wiHelper::toUpper(nameStr.substr(nameStr.length() - 3, nameStr.length())); + wiResource::DATA_TYPE type; // dynamic type selection: - if(newType==Data_Type::DYNAMIC){ + { auto& it = types.find(ext); - if(it!=types.end()) + if (it != types.end()) + { type = it->second; - else + } + else + { return nullptr; + } } - else - type = newType; void* success = nullptr; - switch(type) + switch (type) { - case Data_Type::IMAGE: + case wiResource::IMAGE: { if (!ext.compare(std::string("DDS"))) { @@ -272,7 +272,7 @@ const void* wiResourceManager::add(const wiHashString& name, Data_Type newType) } } break; - case Data_Type::SOUND: + case wiResource::SOUND: { wiAudio::Sound* sound = new wiAudio::Sound; if (wiAudio::CreateSound(name.GetString(), sound)) @@ -281,186 +281,53 @@ const void* wiResourceManager::add(const wiHashString& name, Data_Type newType) } } break; - case Data_Type::VERTEXSHADER: - { - vector buffer; - if (wiHelper::readByteData(nameStr, buffer)) { - VertexShader* shader = new VertexShader; - wiRenderer::GetDevice()->CreateVertexShader(buffer.data(), buffer.size(), shader); - success = shader; - } - } - break; - case Data_Type::PIXELSHADER: - { - vector buffer; - if (wiHelper::readByteData(nameStr, buffer)){ - PixelShader* shader = new PixelShader; - wiRenderer::GetDevice()->CreatePixelShader(buffer.data(), buffer.size(), shader); - success = shader; - } - } - break; - case Data_Type::GEOMETRYSHADER: - { - vector buffer; - if (wiHelper::readByteData(nameStr, buffer)){ - GeometryShader* shader = new GeometryShader; - wiRenderer::GetDevice()->CreateGeometryShader(buffer.data(), buffer.size(), shader); - success = shader; - } - } - break; - case Data_Type::HULLSHADER: - { - vector buffer; - if (wiHelper::readByteData(nameStr, buffer)){ - HullShader* shader = new HullShader; - wiRenderer::GetDevice()->CreateHullShader(buffer.data(), buffer.size(), shader); - success = shader; - } - } - break; - case Data_Type::DOMAINSHADER: - { - vector buffer; - if (wiHelper::readByteData(nameStr, buffer)){ - DomainShader* shader = new DomainShader; - wiRenderer::GetDevice()->CreateDomainShader(buffer.data(), buffer.size(), shader); - success = shader; - } - } - break; - case Data_Type::COMPUTESHADER: - { - vector buffer; - if (wiHelper::readByteData(nameStr, buffer)) { - ComputeShader* shader = new ComputeShader; - wiRenderer::GetDevice()->CreateComputeShader(buffer.data(), buffer.size(), shader); - success = shader; - } - } - break; - default: - break; }; if (success != nullptr) { - lock.lock(); - Resource resource; - resource.data = success; - resource.type = type; - resource.refCount = 1; + locker.lock(); + std::shared_ptr resource = std::make_shared(); + resource->data = success; + resource->type = type; resources.insert(make_pair(name, resource)); - lock.unlock(); + locker.unlock(); + return resource; } - return success; + return nullptr; } - return res.data; -} - -bool wiResourceManager::del(const wiHashString& name, bool forceDelete) -{ - lock.lock(); - Resource res; - auto& it = resources.find(name); - if (it != resources.end()) - res = it->second; - else + bool Contains(const wiHashString& name) { - lock.unlock(); - return false; - } - lock.unlock(); - - if (res.data != nullptr && (res.refCount <= 1 || forceDelete)) - { - lock.lock(); - bool success = true; - - switch (res.type) + bool result = false; + locker.lock(); + auto it = resources.find(name); + if (it != resources.end()) { - case Data_Type::IMAGE: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - case Data_Type::VERTEXSHADER: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - case Data_Type::PIXELSHADER: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - case Data_Type::GEOMETRYSHADER: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - case Data_Type::HULLSHADER: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - case Data_Type::DOMAINSHADER: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - case Data_Type::COMPUTESHADER: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - case Data_Type::SOUND: - SAFE_DELETE(reinterpret_cast(res.data)); - break; - default: - success = false; - break; - }; - - resources.erase(name); - - lock.unlock(); - - return success; + result = it->second.lock()->data != nullptr; + } + locker.unlock(); + return result; } - else if (res.data != nullptr) + + void Register(const wiHashString& name, void* data, wiResource::DATA_TYPE data_type) { - lock.lock(); - resources[name].refCount--; - lock.unlock(); + locker.lock(); + if (resources.find(name) == resources.end()) + { + std::shared_ptr res = std::make_shared(); + res->data = data; + res->type = data_type; + resources.insert(make_pair(name, res)); + } + locker.unlock(); } - return false; -} - -bool wiResourceManager::Register(const wiHashString& name, void* resource, Data_Type newType) -{ - lock.lock(); - if (resources.find(name) == resources.end()) - { - Resource res; - res.data = resource; - res.type = newType; - res.refCount = 1; - resources.insert(make_pair(name, res)); - lock.unlock(); - return true; - } - lock.unlock(); - - return false; -} - -bool wiResourceManager::Clear() -{ - wiRenderer::GetDevice()->WaitForGPU(); - - std::vector resNames; - resNames.reserve(resources.size()); - for (auto& x : resources) - { - resNames.push_back(x.first); - } - for (auto& x : resNames) - { - del(x); - } - lock.lock(); - resources.clear(); - lock.unlock(); - return true; + + void Clear() + { + locker.lock(); + resources.clear(); + locker.unlock(); + } + } diff --git a/WickedEngine/wiResourceManager.h b/WickedEngine/wiResourceManager.h index a84a18dfd..d79ea3a65 100644 --- a/WickedEngine/wiResourceManager.h +++ b/WickedEngine/wiResourceManager.h @@ -1,48 +1,40 @@ #pragma once #include "CommonInclude.h" #include "wiGraphicsDevice.h" +#include "wiAudio.h" #include "wiHashString.h" +#include #include #include -class wiResourceManager +struct wiResource { -private: - std::mutex lock; -public: - enum Data_Type{ - DYNAMIC, - IMAGE, - SOUND, - VERTEXSHADER, - PIXELSHADER, - GEOMETRYSHADER, - HULLSHADER, - DOMAINSHADER, - COMPUTESHADER, - EMPTY, - }; - - struct Resource + union { const void* data = nullptr; - Data_Type type = EMPTY; - long refCount = 0; + const wiGraphics::Texture* texture; + const wiAudio::Sound* sound; }; - std::unordered_map resources; + enum DATA_TYPE + { + EMPTY, + IMAGE, + SOUND, + } type = EMPTY; -public: - ~wiResourceManager() { Clear(); } - static wiResourceManager& GetGlobal(); - static wiResourceManager& GetShaderManager(); - - Resource get(const wiHashString& name, bool IncRefCount = false); - //specify datatype for shaders - const void* add(const wiHashString& name, Data_Type newType = Data_Type::DYNAMIC); - bool del(const wiHashString& name, bool forceDelete = false); - bool Register(const wiHashString& name, void* resource, Data_Type newType); - bool Clear(); + ~wiResource(); }; +namespace wiResourceManager +{ + // Load a resource + std::shared_ptr Load(const wiHashString& name); + // Check if a resource is currently loaded + bool Contains(const wiHashString& name); + // Register a pre-created resource + void Register(const wiHashString& name, void* data, wiResource::DATA_TYPE data_type); + // Invalidate all resources + void Clear(); +}; diff --git a/WickedEngine/wiResourceManager_BindLua.cpp b/WickedEngine/wiResourceManager_BindLua.cpp deleted file mode 100644 index 641aa0dcf..000000000 --- a/WickedEngine/wiResourceManager_BindLua.cpp +++ /dev/null @@ -1,145 +0,0 @@ -#include "wiResourceManager_BindLua.h" -#include "wiHelper.h" -#include "Texture_BindLua.h" -#include "wiAudio_BindLua.h" -#include "wiRenderer.h" - -#include - -using namespace std; -using namespace wiGraphics; - -const char wiResourceManager_BindLua::className[] = "Resource"; - -Luna::FunctionType wiResourceManager_BindLua::methods[] = { - lunamethod(wiResourceManager_BindLua, Get), - lunamethod(wiResourceManager_BindLua, Add), - lunamethod(wiResourceManager_BindLua, Del), - lunamethod(wiResourceManager_BindLua, List), - { NULL, NULL } -}; -Luna::PropertyType wiResourceManager_BindLua::properties[] = { - { NULL, NULL } -}; - -wiResourceManager_BindLua::wiResourceManager_BindLua(wiResourceManager* resources) :resources(resources) -{ -} -wiResourceManager_BindLua::wiResourceManager_BindLua(lua_State *L) -{ - resources = nullptr; -} -wiResourceManager_BindLua::~wiResourceManager_BindLua() -{ -} - -int wiResourceManager_BindLua::Get(lua_State *L) -{ - if (resources == nullptr) - { - wiLua::SError(L, "Get(string name) resources is empty!"); - return 0; - } - int argc = wiLua::SGetArgCount(L); - if (argc > 0) - { - string name = wiLua::SGetString(L, 1); - wiResourceManager::Resource data = resources->get(name); - if (data.data != nullptr) - { - switch (data.type) - { - case wiResourceManager::Data_Type::IMAGE: - Luna::push(L, new Texture_BindLua((Texture*)data.data)); - return 1; - break; - case wiResourceManager::Data_Type::SOUND: - Luna::push(L, new wiSound_BindLua((wiAudio::Sound*)data.data)); - return 1; - break; - default: - wiLua::SError(L, "Get(string name) resource type not supported in scripts!"); - break; - } - } - else - { - wiLua::SError(L, "Get(string name) resource not found!"); - } - return 0; - } - else - { - wiLua::SError(L, "Get(string name) not enough arguments!"); - } - return 0; -} -int wiResourceManager_BindLua::Add(lua_State *L) -{ - if (resources == nullptr) - { - wiLua::SError(L, "Add(string name) resources is empty!"); - return 0; - } - int argc = wiLua::SGetArgCount(L); - if (argc > 0) - { - string name = wiLua::SGetString(L, 1); - const void* data = resources->add(name); - wiLua::SSetString(L, (data != nullptr ? "ok" : "not found")); - return 1; - } - else - { - wiLua::SError(L, "Resource:Add(string name) not enough arguments!"); - } - return 0; -} -int wiResourceManager_BindLua::Del(lua_State *L) -{ - if (resources == nullptr) - { - wiLua::SError(L, "Del(string name) resources is empty!"); - return 0; - } - int argc = wiLua::SGetArgCount(L); - if (argc > 0) - { - string name = wiLua::SGetString(L, 1); - wiLua::SSetString(L, (resources->del(name) ? "ok" : "not found")); - return 1; - } - else - { - wiLua::SError(L, "Del(string name) not enough arguments!"); - } - return 0; -} -int wiResourceManager_BindLua::List(lua_State *L) -{ - if (resources == nullptr) - { - wiLua::SError(L, "List(string name) resources is empty!"); - return 0; - } - stringstream ss(""); - for (auto x : resources->resources) - { - ss << x.first.GetString() << endl; - } - wiLua::SSetString(L, ss.str()); - return 1; -} - -void wiResourceManager_BindLua::Bind() -{ - static bool initialized = false; - if (!initialized) - { - Texture_BindLua::Bind(); - Luna::Register(wiLua::GetGlobal()->GetLuaState()); - wiLua::GetGlobal()->RegisterObject(className, "globalResources", new wiResourceManager_BindLua(&wiResourceManager::GetGlobal())); - initialized = true; - } -} - diff --git a/WickedEngine/wiResourceManager_BindLua.h b/WickedEngine/wiResourceManager_BindLua.h deleted file mode 100644 index 83cd1c052..000000000 --- a/WickedEngine/wiResourceManager_BindLua.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once -#include "wiLua.h" -#include "wiLuna.h" -#include "wiResourceManager.h" - -//extends the resourcemanager to be accessed by lua scripts using the Luna wrapper - -class wiResourceManager_BindLua : public wiResourceManager -{ -private: - wiResourceManager* resources; -public: - static const char className[]; - static Luna::FunctionType methods[]; - static Luna::PropertyType properties[]; - - wiResourceManager_BindLua(wiResourceManager* resources = nullptr); - wiResourceManager_BindLua(lua_State *L); - ~wiResourceManager_BindLua(); - - int Get(lua_State *L); - int Add(lua_State *L); - int Del(lua_State *L); - int List(lua_State *L); - - static void Bind(); -}; - diff --git a/WickedEngine/wiSceneSystem.cpp b/WickedEngine/wiScene.cpp similarity index 99% rename from WickedEngine/wiSceneSystem.cpp rename to WickedEngine/wiScene.cpp index a0d82a82c..2a5e17f8a 100644 --- a/WickedEngine/wiSceneSystem.cpp +++ b/WickedEngine/wiScene.cpp @@ -1,4 +1,4 @@ -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiMath.h" #include "wiTextureHelper.h" #include "wiResourceManager.h" @@ -16,7 +16,7 @@ using namespace wiECS; using namespace wiGraphics; -namespace wiSceneSystem +namespace wiScene { XMFLOAT3 TransformComponent::GetPosition() const @@ -230,24 +230,23 @@ namespace wiSceneSystem { if (baseColorMap != nullptr) { - return baseColorMap; + return baseColorMap->texture; } return wiTextureHelper::getWhite(); } const Texture* MaterialComponent::GetNormalMap() const { - return normalMap; - //if (normalMap != nullptr) - //{ - // return normalMap; - //} - //return wiTextureHelper::getNormalMapDefault(); + if (normalMap != nullptr) + { + return normalMap->texture; + } + return nullptr; } const Texture* MaterialComponent::GetSurfaceMap() const { if (surfaceMap != nullptr) { - return surfaceMap; + return surfaceMap->texture; } return wiTextureHelper::getWhite(); } @@ -255,7 +254,7 @@ namespace wiSceneSystem { if (displacementMap != nullptr) { - return displacementMap; + return displacementMap->texture; } return wiTextureHelper::getWhite(); } @@ -263,7 +262,7 @@ namespace wiSceneSystem { if (emissiveMap != nullptr) { - return emissiveMap; + return emissiveMap->texture; } return wiTextureHelper::getWhite(); } @@ -271,7 +270,7 @@ namespace wiSceneSystem { if (occlusionMap != nullptr) { - return occlusionMap; + return occlusionMap->texture; } return wiTextureHelper::getWhite(); } @@ -1318,12 +1317,12 @@ namespace wiSceneSystem if (!textureName.empty()) { material.baseColorMapName = textureName; - material.baseColorMap = (Texture*)wiResourceManager::GetGlobal().add(material.baseColorMapName); + material.baseColorMap = wiResourceManager::Load(material.baseColorMapName); } if (!normalMapName.empty()) { material.normalMapName = normalMapName; - material.normalMap = (Texture*)wiResourceManager::GetGlobal().add(material.normalMapName); + material.normalMap = wiResourceManager::Load(material.normalMapName); } return entity; @@ -1396,8 +1395,8 @@ namespace wiSceneSystem SoundComponent& sound = sounds.Create(entity); sound.filename = filename; - sound.sound = (wiAudio::Sound*)wiResourceManager::GetGlobal().add(filename); - wiAudio::CreateSoundInstance(sound.sound, &sound.soundinstance); + sound.soundResource = wiResourceManager::Load(filename); + wiAudio::CreateSoundInstance(sound.soundResource->sound, &sound.soundinstance); TransformComponent& transform = transforms.Create(entity); transform.Translate(position); diff --git a/WickedEngine/wiSceneSystem.h b/WickedEngine/wiScene.h similarity index 98% rename from WickedEngine/wiSceneSystem.h rename to WickedEngine/wiScene.h index 69ac25aad..56fbb895f 100644 --- a/WickedEngine/wiSceneSystem.h +++ b/WickedEngine/wiScene.h @@ -8,16 +8,18 @@ #include "wiJobSystem.h" #include "wiAudio.h" #include "wiRenderer.h" +#include "wiResourceManager.h" #include "wiECS.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" #include #include +#include class wiArchive; -namespace wiSceneSystem +namespace wiScene { struct NameComponent { @@ -151,12 +153,12 @@ namespace wiSceneSystem uint32_t uvset_occlusionMap = 0; // Non-serialized attributes: - const wiGraphics::Texture* baseColorMap = nullptr; - const wiGraphics::Texture* surfaceMap = nullptr; - const wiGraphics::Texture* normalMap = nullptr; - const wiGraphics::Texture* displacementMap = nullptr; - const wiGraphics::Texture* emissiveMap = nullptr; - const wiGraphics::Texture* occlusionMap = nullptr; + std::shared_ptr baseColorMap; + std::shared_ptr surfaceMap; + std::shared_ptr normalMap; + std::shared_ptr displacementMap; + std::shared_ptr emissiveMap; + std::shared_ptr occlusionMap; std::unique_ptr constantBuffer; int customShaderID = -1; // for now, this is not serialized; need to consider actual proper use case first @@ -688,7 +690,7 @@ namespace wiSceneSystem XMFLOAT3 right; int shadowMap_index = -1; - std::vector lensFlareRimTextures; + std::vector> lensFlareRimTextures; inline void SetCastShadow(bool value) { if (value) { _flags |= CAST_SHADOW; } else { _flags &= ~CAST_SHADOW; } } inline void SetVolumetricsEnabled(bool value) { if (value) { _flags |= VOLUMETRICS; } else { _flags &= ~VOLUMETRICS; } } @@ -964,6 +966,9 @@ namespace wiSceneSystem }; OceanParameters oceanParameters; + std::string skyMapName; + std::shared_ptr skyMap; + void Serialize(wiArchive& archive, uint32_t seed = 0); }; @@ -978,7 +983,7 @@ namespace wiSceneSystem uint32_t _flags = LOOPED; std::string filename; - wiAudio::Sound* sound = nullptr; + std::shared_ptr soundResource; wiAudio::SoundInstance soundinstance; float volume = 1; diff --git a/WickedEngine/wiSceneSystem_BindLua.cpp b/WickedEngine/wiScene_BindLua.cpp similarity index 98% rename from WickedEngine/wiSceneSystem_BindLua.cpp rename to WickedEngine/wiScene_BindLua.cpp index 05f39041e..09d2aab2a 100644 --- a/WickedEngine/wiSceneSystem_BindLua.cpp +++ b/WickedEngine/wiScene_BindLua.cpp @@ -1,5 +1,5 @@ -#include "wiSceneSystem_BindLua.h" -#include "wiSceneSystem.h" +#include "wiScene_BindLua.h" +#include "wiScene.h" #include "Vector_BindLua.h" #include "Matrix_BindLua.h" #include "wiEmittedParticle.h" @@ -8,10 +8,10 @@ using namespace std; using namespace wiECS; -using namespace wiSceneSystem; +using namespace wiScene; using namespace wiIntersect_BindLua; -namespace wiSceneSystem_BindLua +namespace wiScene_BindLua { int CreateEntity_BindLua(lua_State* L) @@ -23,7 +23,7 @@ int CreateEntity_BindLua(lua_State* L) int GetScene(lua_State* L) { - Luna::push(L, new Scene_BindLua(&wiSceneSystem::GetScene())); + Luna::push(L, new Scene_BindLua(&wiScene::GetScene())); return 1; } int LoadModel(lua_State* L) @@ -51,7 +51,7 @@ int LoadModel(lua_State* L) wiLua::SError(L, "LoadModel(Scene scene, string fileName, opt Matrix transform) argument is not a matrix!"); } } - Entity root = wiSceneSystem::LoadModel(*custom_scene->scene, fileName, transform, true); + Entity root = wiScene::LoadModel(*custom_scene->scene, fileName, transform, true); wiLua::SSetInt(L, int(root)); return 1; } @@ -78,7 +78,7 @@ int LoadModel(lua_State* L) wiLua::SError(L, "LoadModel(string fileName, opt Matrix transform) argument is not a matrix!"); } } - Entity root = wiSceneSystem::LoadModel(fileName, transform, true); + Entity root = wiScene::LoadModel(fileName, transform, true); wiLua::SSetInt(L, int(root)); return 1; } @@ -99,7 +99,7 @@ int Pick(lua_State* L) { uint32_t renderTypeMask = RENDERTYPE_OPAQUE; uint32_t layerMask = 0xFFFFFFFF; - Scene* scene = &wiSceneSystem::GetScene(); + Scene* scene = &wiScene::GetScene(); if (argc > 1) { renderTypeMask = (uint32_t)wiLua::SGetInt(L, 2); @@ -122,7 +122,7 @@ int Pick(lua_State* L) } } } - auto& pick = wiSceneSystem::Pick(ray->ray, renderTypeMask, layerMask, *scene); + auto& pick = wiScene::Pick(ray->ray, renderTypeMask, layerMask, *scene); wiLua::SSetInt(L, (int)pick.entity); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.position))); Luna::push(L, new Vector_BindLua(XMLoadFloat3(&pick.normal))); diff --git a/WickedEngine/wiSceneSystem_BindLua.h b/WickedEngine/wiScene_BindLua.h similarity index 83% rename from WickedEngine/wiSceneSystem_BindLua.h rename to WickedEngine/wiScene_BindLua.h index c0ee8776e..2361e809a 100644 --- a/WickedEngine/wiSceneSystem_BindLua.h +++ b/WickedEngine/wiScene_BindLua.h @@ -1,9 +1,9 @@ #pragma once #include "wiLua.h" #include "wiLuna.h" -#include "wiSceneSystem_Decl.h" +#include "wiScene_Decl.h" -namespace wiSceneSystem_BindLua +namespace wiScene_BindLua { void Bind(); @@ -11,13 +11,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::Scene* scene = nullptr; + wiScene::Scene* scene = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - Scene_BindLua(wiSceneSystem::Scene* scene) :scene(scene) {} + Scene_BindLua(wiScene::Scene* scene) :scene(scene) {} Scene_BindLua(lua_State *L); ~Scene_BindLua(); @@ -74,13 +74,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::NameComponent* component = nullptr; + wiScene::NameComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - NameComponent_BindLua(wiSceneSystem::NameComponent* component) :component(component) {} + NameComponent_BindLua(wiScene::NameComponent* component) :component(component) {} NameComponent_BindLua(lua_State *L); ~NameComponent_BindLua(); @@ -92,13 +92,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::LayerComponent* component = nullptr; + wiScene::LayerComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - LayerComponent_BindLua(wiSceneSystem::LayerComponent* component) :component(component) {} + LayerComponent_BindLua(wiScene::LayerComponent* component) :component(component) {} LayerComponent_BindLua(lua_State *L); ~LayerComponent_BindLua(); @@ -110,13 +110,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::TransformComponent* component = nullptr; + wiScene::TransformComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - TransformComponent_BindLua(wiSceneSystem::TransformComponent* component) :component(component) {} + TransformComponent_BindLua(wiScene::TransformComponent* component) :component(component) {} TransformComponent_BindLua(lua_State *L); ~TransformComponent_BindLua(); @@ -138,13 +138,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::CameraComponent* component = nullptr; + wiScene::CameraComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - CameraComponent_BindLua(wiSceneSystem::CameraComponent* component) :component(component) {} + CameraComponent_BindLua(wiScene::CameraComponent* component) :component(component) {} CameraComponent_BindLua(lua_State *L); ~CameraComponent_BindLua(); @@ -168,13 +168,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::AnimationComponent* component = nullptr; + wiScene::AnimationComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - AnimationComponent_BindLua(wiSceneSystem::AnimationComponent* component) :component(component) {} + AnimationComponent_BindLua(wiScene::AnimationComponent* component) :component(component) {} AnimationComponent_BindLua(lua_State *L); ~AnimationComponent_BindLua(); @@ -191,13 +191,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::MaterialComponent* component = nullptr; + wiScene::MaterialComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - MaterialComponent_BindLua(wiSceneSystem::MaterialComponent* component) :component(component) {} + MaterialComponent_BindLua(wiScene::MaterialComponent* component) :component(component) {} MaterialComponent_BindLua(lua_State *L); ~MaterialComponent_BindLua(); @@ -212,13 +212,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::wiEmittedParticle* component = nullptr; + wiScene::wiEmittedParticle* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - EmitterComponent_BindLua(wiSceneSystem::wiEmittedParticle* component) :component(component) {} + EmitterComponent_BindLua(wiScene::wiEmittedParticle* component) :component(component) {} EmitterComponent_BindLua(lua_State *L); ~EmitterComponent_BindLua(); @@ -239,13 +239,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::LightComponent* component = nullptr; + wiScene::LightComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - LightComponent_BindLua(wiSceneSystem::LightComponent* component) :component(component) {} + LightComponent_BindLua(wiScene::LightComponent* component) :component(component) {} LightComponent_BindLua(lua_State *L); ~LightComponent_BindLua(); @@ -260,13 +260,13 @@ namespace wiSceneSystem_BindLua { public: bool owning = false; - wiSceneSystem::ObjectComponent* component = nullptr; + wiScene::ObjectComponent* component = nullptr; static const char className[]; static Luna::FunctionType methods[]; static Luna::PropertyType properties[]; - ObjectComponent_BindLua(wiSceneSystem::ObjectComponent* component) :component(component) {} + ObjectComponent_BindLua(wiScene::ObjectComponent* component) :component(component) {} ObjectComponent_BindLua(lua_State* L); ~ObjectComponent_BindLua(); diff --git a/WickedEngine/wiSceneSystem_Decl.h b/WickedEngine/wiScene_Decl.h similarity index 96% rename from WickedEngine/wiSceneSystem_Decl.h rename to WickedEngine/wiScene_Decl.h index f40574495..93cc54d49 100644 --- a/WickedEngine/wiSceneSystem_Decl.h +++ b/WickedEngine/wiScene_Decl.h @@ -1,7 +1,7 @@ #pragma once -namespace wiSceneSystem +namespace wiScene { struct NameComponent; struct LayerComponent; diff --git a/WickedEngine/wiSceneSystem_Serializers.cpp b/WickedEngine/wiScene_Serializers.cpp similarity index 96% rename from WickedEngine/wiSceneSystem_Serializers.cpp rename to WickedEngine/wiScene_Serializers.cpp index e8a5ed837..4627df4fa 100644 --- a/WickedEngine/wiSceneSystem_Serializers.cpp +++ b/WickedEngine/wiScene_Serializers.cpp @@ -1,4 +1,4 @@ -#include "wiSceneSystem.h" +#include "wiScene.h" #include "wiResourceManager.h" #include "wiArchive.h" #include "wiRandom.h" @@ -6,7 +6,7 @@ using namespace wiECS; -namespace wiSceneSystem +namespace wiScene { void NameComponent::Serialize(wiArchive& archive, uint32_t seed) @@ -131,27 +131,27 @@ namespace wiSceneSystem if (!baseColorMapName.empty()) { - baseColorMap = (wiGraphics::Texture*)wiResourceManager::GetGlobal().add(dir + baseColorMapName); + baseColorMap = wiResourceManager::Load(dir + baseColorMapName); } if (!surfaceMapName.empty()) { - surfaceMap = (wiGraphics::Texture*)wiResourceManager::GetGlobal().add(dir + surfaceMapName); + surfaceMap = wiResourceManager::Load(dir + surfaceMapName); } if (!normalMapName.empty()) { - normalMap = (wiGraphics::Texture*)wiResourceManager::GetGlobal().add(dir + normalMapName); + normalMap = wiResourceManager::Load(dir + normalMapName); } if (!displacementMapName.empty()) { - displacementMap = (wiGraphics::Texture*)wiResourceManager::GetGlobal().add(dir + displacementMapName); + displacementMap = wiResourceManager::Load(dir + displacementMapName); } if (!emissiveMapName.empty()) { - emissiveMap = (wiGraphics::Texture*)wiResourceManager::GetGlobal().add(dir + emissiveMapName); + emissiveMap = wiResourceManager::Load(dir + emissiveMapName); } if (!occlusionMapName.empty()) { - occlusionMap = (wiGraphics::Texture*)wiResourceManager::GetGlobal().add(dir + occlusionMapName); + occlusionMap = wiResourceManager::Load(dir + occlusionMapName); } } @@ -489,7 +489,7 @@ namespace wiSceneSystem { if (!lensFlareNames[i].empty()) { - lensFlareRimTextures[i] = (wiGraphics::Texture*)wiResourceManager::GetGlobal().add(dir + lensFlareNames[i]); + lensFlareRimTextures[i] = wiResourceManager::Load(dir + lensFlareNames[i]); } } } @@ -645,6 +645,8 @@ namespace wiSceneSystem } void WeatherComponent::Serialize(wiArchive& archive, uint32_t seed) { + std::string dir = archive.GetSourceDirectory(); + if (archive.IsReadMode()) { archive >> _flags; @@ -675,6 +677,13 @@ namespace wiSceneSystem archive >> oceanParameters.waterHeight; archive >> oceanParameters.surfaceDetail; archive >> oceanParameters.surfaceDisplacementTolerance; + + if (archive.GetVersion() >= 32) + { + archive >> skyMapName; + skyMap = wiResourceManager::Load(dir + skyMapName); + } + } else { @@ -706,6 +715,21 @@ namespace wiSceneSystem archive << oceanParameters.waterHeight; archive << oceanParameters.surfaceDetail; archive << oceanParameters.surfaceDisplacementTolerance; + + if (archive.GetVersion() >= 32) + { + // If detecting an absolute path in textures, remove it and convert to relative: + if (!dir.empty()) + { + size_t found = skyMapName.rfind(dir); + if (found != std::string::npos) + { + skyMapName = skyMapName.substr(found + dir.length()); + } + } + archive << skyMapName; + } + } } void SoundComponent::Serialize(wiArchive& archive, uint32_t seed) @@ -721,8 +745,8 @@ namespace wiSceneSystem if (!filename.empty()) { - sound = (wiAudio::Sound*)wiResourceManager::GetGlobal().add(dir + filename); - wiAudio::CreateSoundInstance(sound, &soundinstance); + soundResource = wiResourceManager::Load(dir + filename); + wiAudio::CreateSoundInstance(soundResource->sound, &soundinstance); } } diff --git a/WickedEngine/wiSprite.cpp b/WickedEngine/wiSprite.cpp index 25e79c177..c958f8b9b 100644 --- a/WickedEngine/wiSprite.cpp +++ b/WickedEngine/wiSprite.cpp @@ -1,37 +1,28 @@ #include "wiSprite.h" -#include "wiResourceManager.h" #include "wiImage.h" #include "wiRenderer.h" #include "wiRandom.h" using namespace wiGraphics; - wiSprite::wiSprite(const std::string& newTexture, const std::string& newMask) { if (!newTexture.empty()) { - texture = newTexture; - texturePointer = (Texture*)wiResourceManager::GetGlobal().add(newTexture); + textureName = newTexture; + textureResource = wiResourceManager::Load(newTexture); } if (!newMask.empty()) { - maskPointer = (Texture*)wiResourceManager::GetGlobal().add(newMask); - params.setMaskMap(maskPointer); - mask = newMask; + maskName = newMask; + maskResource = wiResourceManager::Load(newMask); + params.setMaskMap(maskResource->texture); } } -void wiSprite::Destroy() -{ - wiResourceManager::GetGlobal().del(texture); - wiResourceManager::GetGlobal().del(mask); - texturePointer = nullptr; - maskPointer = nullptr; -} void wiSprite::Draw(CommandList cmd) const { - wiImage::Draw(texturePointer, params, cmd); + wiImage::Draw(textureResource->texture, params, cmd); } void wiSprite::DrawNormal(CommandList cmd) const { @@ -40,7 +31,7 @@ void wiSprite::DrawNormal(CommandList cmd) const wiImageParams effectsMod(params); effectsMod.blendFlag = BLENDMODE_ADDITIVE; effectsMod.enableExtractNormalMap(); - wiImage::Draw(texturePointer, effectsMod, cmd); + wiImage::Draw(textureResource->texture, effectsMod, cmd); } } diff --git a/WickedEngine/wiSprite.h b/WickedEngine/wiSprite.h index 75b2692aa..d1f5a0c78 100644 --- a/WickedEngine/wiSprite.h +++ b/WickedEngine/wiSprite.h @@ -1,19 +1,19 @@ #pragma once #include "wiImage.h" #include "wiGraphicsDevice.h" +#include "wiResourceManager.h" #include "wiRandom.h" -class wiResourceManager; +#include class wiSprite { private: - std::string texture, mask; - const wiGraphics::Texture* texturePointer = nullptr; - const wiGraphics::Texture* maskPointer = nullptr; + std::string textureName, maskName; + std::shared_ptr textureResource; + std::shared_ptr maskResource; public: wiSprite(const std::string& newTexture = "", const std::string& newMask = ""); - void Destroy(); virtual void FixedUpdate(float speed); virtual void Update(float dt); @@ -80,7 +80,12 @@ public: }; Anim anim; - const wiGraphics::Texture* getTexture() { return texturePointer; } - void setTexture(const wiGraphics::Texture* value) { texturePointer = value; } + const wiGraphics::Texture* getTexture() { return textureResource->texture; } + void setTexture(const wiGraphics::Texture* texture) + { + textureResource = std::make_shared(); + textureResource->texture = texture; + textureResource->type = wiResource::IMAGE; + } }; diff --git a/WickedEngine/wiSprite_BindLua.cpp b/WickedEngine/wiSprite_BindLua.cpp index fb42f1c2c..36f3a9b37 100644 --- a/WickedEngine/wiSprite_BindLua.cpp +++ b/WickedEngine/wiSprite_BindLua.cpp @@ -112,7 +112,6 @@ int wiSprite_BindLua::Destroy(lua_State* L) { if (sprite != nullptr) { - sprite->Destroy(); delete sprite; sprite = nullptr; } diff --git a/WickedEngine/wiTimer.cpp b/WickedEngine/wiTimer.cpp index 37deb7027..19ebfe7d5 100644 --- a/WickedEngine/wiTimer.cpp +++ b/WickedEngine/wiTimer.cpp @@ -1,6 +1,6 @@ #include "wiTimer.h" #include "wiHelper.h" -#include "Platform.h" +#include "wiPlatform.h" double wiTimer::PCFreq = 0; __int64 wiTimer::CounterStart = 0; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index e239d839c..5eae6be0a 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 - const int minor = 35; + const int minor = 36; // minor bug fixes, alterations, refactors, updates - const int revision = 21; + const int revision = 0; long GetVersion() diff --git a/WickedEngine/wiWidget.cpp b/WickedEngine/wiWidget.cpp index c5867fbc2..39ba433f1 100644 --- a/WickedEngine/wiWidget.cpp +++ b/WickedEngine/wiWidget.cpp @@ -15,7 +15,7 @@ using namespace std; using namespace wiGraphics; -using namespace wiSceneSystem; +using namespace wiScene; static wiGraphics::PipelineState PSO_colorpicker; diff --git a/WickedEngine/wiWidget.h b/WickedEngine/wiWidget.h index 7da28fadc..ec00c6dd6 100644 --- a/WickedEngine/wiWidget.h +++ b/WickedEngine/wiWidget.h @@ -4,7 +4,7 @@ #include "wiColor.h" #include "wiGraphicsDevice.h" #include "wiIntersect.h" -#include "wiSceneSystem.h" +#include "wiScene.h" #include #include @@ -25,7 +25,7 @@ struct wiEventArgs std::string sValue; }; -class wiWidget : public wiSceneSystem::TransformComponent +class wiWidget : public wiScene::TransformComponent { friend class wiGUI; public: @@ -92,9 +92,9 @@ public: Hitbox2D hitBox; - wiSceneSystem::TransformComponent* parent = nullptr; + wiScene::TransformComponent* parent = nullptr; XMFLOAT4X4 world_parent_bind = IDENTITYMATRIX; - void AttachTo(wiSceneSystem::TransformComponent* parent); + void AttachTo(wiScene::TransformComponent* parent); void Detach(); static void LoadShaders(); diff --git a/WickedEngine/wiWindowRegistration.cpp b/WickedEngine/wiWindowRegistration.cpp deleted file mode 100644 index e8b0a0356..000000000 --- a/WickedEngine/wiWindowRegistration.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "wiWindowRegistration.h" - -namespace wiWindowRegistration -{ - window_type window = nullptr; - instance_type instance = nullptr; - - window_type GetRegisteredWindow() { - return window; - } - instance_type GetRegisteredInstance() { - return instance; - } - void RegisterWindow(window_type wnd) { - window = wnd; - } - void RegisterInstance(instance_type inst) { - instance = inst; - } - bool IsWindowActive() { -#ifndef WINSTORE_SUPPORT - HWND fgw = GetForegroundWindow(); - return fgw == window; -#else - return true; -#endif - } -} diff --git a/WickedEngine/wiWindowRegistration.h b/WickedEngine/wiWindowRegistration.h deleted file mode 100644 index 6508d8933..000000000 --- a/WickedEngine/wiWindowRegistration.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once -#include "CommonInclude.h" -#include "Platform.h" - -namespace wiWindowRegistration -{ -#ifndef WINSTORE_SUPPORT - typedef HWND window_type; - typedef HINSTANCE instance_type; -#else - typedef Windows::UI::Core::CoreWindow^ window_type; - typedef void* instance_type; -#endif - - instance_type GetRegisteredInstance(); - window_type GetRegisteredWindow(); - void RegisterInstance(instance_type wnd); - void RegisterWindow(window_type wnd); - bool IsWindowActive(); -}; diff --git a/WickedEngine/wiXInput.cpp b/WickedEngine/wiXInput.cpp index 9f027f271..f2b293239 100644 --- a/WickedEngine/wiXInput.cpp +++ b/WickedEngine/wiXInput.cpp @@ -2,7 +2,7 @@ #if __has_include("xinput.h") -#define NOMINMAX +#define WIN32_LEAN_AND_MEAN #include #include