diff --git a/WickedEngine/AnimationWindow.cpp b/WickedEngine/AnimationWindow.cpp index 26d233157..d5eabae52 100644 --- a/WickedEngine/AnimationWindow.cpp +++ b/WickedEngine/AnimationWindow.cpp @@ -208,20 +208,10 @@ AnimationWindow::AnimationWindow(wiGUI* gui) :GUI(gui) AnimationWindow::~AnimationWindow() { + animWindow->RemoveWidgets(true); + + GUI->RemoveWidget(animWindow); SAFE_DELETE(animWindow); - SAFE_DELETE(actionsComboBox); - SAFE_DELETE(blendSlider); - SAFE_DELETE(loopedCheckBox); - - SAFE_DELETE(actionsComboBox1); - SAFE_DELETE(weightSlider1); - SAFE_DELETE(blendSlider1); - SAFE_DELETE(loopedCheckBox1); - - SAFE_DELETE(actionsComboBox2); - SAFE_DELETE(weightSlider2); - SAFE_DELETE(blendSlider2); - SAFE_DELETE(loopedCheckBox2); } void AnimationWindow::SetArmature(Armature* armature) diff --git a/WickedEngine/CameraWindow.cpp b/WickedEngine/CameraWindow.cpp index b8602153c..77d1afa1e 100644 --- a/WickedEngine/CameraWindow.cpp +++ b/WickedEngine/CameraWindow.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #include "CameraWindow.h" -void ResetCam() +void CameraWindow::ResetCam() { wiRenderer::getCamera()->Clear(); wiRenderer::getCamera()->Translate(XMFLOAT3(0, 2, -10)); @@ -73,17 +73,15 @@ CameraWindow::CameraWindow(wiGUI* gui) :GUI(gui) cameraWindow->Translate(XMFLOAT3(30, 30, 0)); cameraWindow->SetVisible(false); - - ResetCam(); } CameraWindow::~CameraWindow() { + SAFE_DELETE(orbitalCamTarget); + cameraWindow->RemoveWidgets(true); + GUI->RemoveWidget(cameraWindow); SAFE_DELETE(cameraWindow); - SAFE_DELETE(farPlaneSlider); - SAFE_DELETE(nearPlaneSlider); - SAFE_DELETE(fovSlider); } diff --git a/WickedEngine/CameraWindow.h b/WickedEngine/CameraWindow.h index b68ab7e7f..822008b90 100644 --- a/WickedEngine/CameraWindow.h +++ b/WickedEngine/CameraWindow.h @@ -13,6 +13,8 @@ public: CameraWindow(wiGUI* gui); ~CameraWindow(); + void ResetCam(); + bool fpscamera; Transform* orbitalCamTarget; diff --git a/WickedEngine/DecalWindow.cpp b/WickedEngine/DecalWindow.cpp index 894757c28..e5ba762c5 100644 --- a/WickedEngine/DecalWindow.cpp +++ b/WickedEngine/DecalWindow.cpp @@ -49,9 +49,9 @@ DecalWindow::DecalWindow(wiGUI* gui) : GUI(gui) DecalWindow::~DecalWindow() { + decalWindow->RemoveWidgets(true); + GUI->RemoveWidget(decalWindow); SAFE_DELETE(decalWindow); - SAFE_DELETE(opacitySlider); - SAFE_DELETE(emissiveSlider); } void DecalWindow::SetDecal(Decal* decal) diff --git a/WickedEngine/Editor.cpp b/WickedEngine/Editor.cpp index 1b97b6934..c0efd53cf 100644 --- a/WickedEngine/Editor.cpp +++ b/WickedEngine/Editor.cpp @@ -211,20 +211,70 @@ void ResetHistory(); string AdvanceHistory(); void ConsumeHistoryOperation(bool undo); +void EditorComponent::ChangeRenderPath(RENDERPATH path) +{ + SAFE_DELETE(renderPath); + + switch (path) + { + case EditorComponent::RENDERPATH_FORWARD: + renderPath = new ForwardRenderableComponent; + break; + case EditorComponent::RENDERPATH_DEFERRED: + renderPath = new DeferredRenderableComponent; + break; + case EditorComponent::RENDERPATH_TILEDFORWARD: + renderPath = new TiledForwardRenderableComponent; + break; + default: + assert(0); + break; + } + + renderPath->setShadowsEnabled(true); + renderPath->setReflectionsEnabled(true); + renderPath->setSSAOEnabled(false); + renderPath->setSSREnabled(false); + renderPath->setMotionBlurEnabled(false); + renderPath->setColorGradingEnabled(false); + renderPath->setEyeAdaptionEnabled(false); + renderPath->setFXAAEnabled(false); + renderPath->setDepthOfFieldEnabled(false); + renderPath->setLightShaftsEnabled(false); + + + renderPath->Initialize(); + renderPath->Load(); + + DeleteWindows(); + + materialWnd = new MaterialWindow(&GetGUI()); + postprocessWnd = new PostprocessWindow(&GetGUI(), renderPath); + worldWnd = new WorldWindow(&GetGUI()); + objectWnd = new ObjectWindow(&GetGUI()); + meshWnd = new MeshWindow(&GetGUI()); + cameraWnd = new CameraWindow(&GetGUI()); + rendererWnd = new RendererWindow(&GetGUI(), renderPath); + envProbeWnd = new EnvProbeWindow(&GetGUI()); + decalWnd = new DecalWindow(&GetGUI()); + lightWnd = new LightWindow(&GetGUI()); + animWnd = new AnimationWindow(&GetGUI()); +} +void EditorComponent::DeleteWindows() +{ + SAFE_DELETE(materialWnd); + SAFE_DELETE(postprocessWnd); + SAFE_DELETE(worldWnd); + SAFE_DELETE(objectWnd); + SAFE_DELETE(meshWnd); + SAFE_DELETE(cameraWnd); + SAFE_DELETE(decalWnd); + SAFE_DELETE(lightWnd); + SAFE_DELETE(animWnd); +} void EditorComponent::Initialize() { - setShadowsEnabled(true); - setReflectionsEnabled(true); - setSSAOEnabled(false); - setSSREnabled(false); - setMotionBlurEnabled(false); - setColorGradingEnabled(false); - setEyeAdaptionEnabled(false); - setFXAAEnabled(false); - setDepthOfFieldEnabled(false); - setLightShaftsEnabled(false); - SAFE_INIT(materialWnd); SAFE_INIT(postprocessWnd); SAFE_INIT(worldWnd); @@ -232,6 +282,14 @@ void EditorComponent::Initialize() SAFE_INIT(meshWnd); SAFE_INIT(cameraWnd); SAFE_INIT(rendererWnd); + SAFE_INIT(decalWnd); + SAFE_INIT(lightWnd); + SAFE_INIT(animWnd); + + + SAFE_INIT(loader); + SAFE_INIT(renderPath); + __super::Initialize(); } @@ -242,17 +300,6 @@ void EditorComponent::Load() translator = new wiTranslator; translator->enabled = false; - materialWnd = new MaterialWindow(&GetGUI()); - postprocessWnd = new PostprocessWindow(this); - worldWnd = new WorldWindow(&GetGUI()); - objectWnd = new ObjectWindow(&GetGUI()); - meshWnd = new MeshWindow(&GetGUI()); - cameraWnd = new CameraWindow(&GetGUI()); - rendererWnd = new RendererWindow(this); - envProbeWnd = new EnvProbeWindow(&GetGUI()); - decalWnd = new DecalWindow(&GetGUI()); - lightWnd = new LightWindow(&GetGUI()); - animWnd = new AnimationWindow(&GetGUI()); float screenW = (float)wiRenderer::GetDevice()->GetScreenWidth(); float screenH = (float)wiRenderer::GetDevice()->GetScreenHeight(); @@ -362,6 +409,32 @@ void EditorComponent::Load() //////////////////////////////////////////////////////////////////////////////////// + wiComboBox* renderPathComboBox = new wiComboBox("Render Path: "); + renderPathComboBox->SetSize(XMFLOAT2(100, 20)); + renderPathComboBox->SetPos(XMFLOAT2(screenW - 125, 50)); + renderPathComboBox->AddItem("Forward"); + renderPathComboBox->AddItem("Deferred"); + renderPathComboBox->AddItem("Tiled Forward"); + renderPathComboBox->OnSelect([&](wiEventArgs args) { + switch (args.iValue) + { + case 0: + ChangeRenderPath(RENDERPATH_FORWARD); + break; + case 1: + ChangeRenderPath(RENDERPATH_DEFERRED); + break; + case 2: + ChangeRenderPath(RENDERPATH_TILEDFORWARD); + break; + default: + break; + } + }); + renderPathComboBox->SetSelected(2); + renderPathComboBox->SetEnabled(true); + renderPathComboBox->SetTooltip("Choose a render path..."); + GetGUI().AddWidget(renderPathComboBox); wiCheckBox* translatorCheckBox = new wiCheckBox("Translator: "); translatorCheckBox->SetTooltip("Enable the translator tool"); @@ -730,6 +803,7 @@ void EditorComponent::Load() GetGUI().AddWidget(exitButton); + cameraWnd->ResetCam(); @@ -742,6 +816,10 @@ void EditorComponent::Start() { __super::Start(); } +void EditorComponent::FixedUpdate() +{ + renderPath->FixedUpdate(); +} void EditorComponent::Update(float dt) { if (!wiBackLog::isActive() && !GetGUI().HasFocus()) @@ -1118,6 +1196,8 @@ void EditorComponent::Update(float dt) } __super::Update(dt); + + renderPath->Update(dt); } void EditorComponent::Render() { @@ -1175,10 +1255,14 @@ void EditorComponent::Render() wiRenderer::AddRenderableBox(selectionBox, XMFLOAT4(1, 1, 1, 1)); } + renderPath->Render(); + __super::Render(); } void EditorComponent::Compose() { + renderPath->Compose(); + __super::Compose(); if (rendererWnd->GetPickType() & PICK_LIGHT) @@ -1228,21 +1312,12 @@ void EditorComponent::Compose() } } - //wiImage::Draw(GetDepthBuffer()->GetTexture(), wiImageEffects(0, 0, 400, 200), GRAPHICSTHREAD_IMMEDIATE); - } void EditorComponent::Unload() { - // ... - SAFE_DELETE(materialWnd); - SAFE_DELETE(postprocessWnd); - SAFE_DELETE(worldWnd); - SAFE_DELETE(objectWnd); - SAFE_DELETE(meshWnd); - SAFE_DELETE(cameraWnd); - SAFE_DELETE(decalWnd); - SAFE_DELETE(lightWnd); - SAFE_DELETE(animWnd); + renderPath->Unload(); + + DeleteWindows(); SAFE_DELETE(translator); diff --git a/WickedEngine/Editor.h b/WickedEngine/Editor.h index 1b4277667..f92f5d448 100644 --- a/WickedEngine/Editor.h +++ b/WickedEngine/Editor.h @@ -24,10 +24,7 @@ public: }; class Editor; -class EditorComponent - : public DeferredRenderableComponent - //: public ForwardRenderableComponent - //: public TiledForwardRenderableComponent +class EditorComponent : public Renderable2DComponent { private: wiGraphicsTypes::Texture2D pointLightTex, spotLightTex, dirLightTex, areaLightTex; @@ -45,11 +42,22 @@ public: AnimationWindow* animWnd; Editor* main; + EditorLoadingScreen* loader; + Renderable3DComponent* renderPath; + enum RENDERPATH + { + RENDERPATH_FORWARD, + RENDERPATH_DEFERRED, + RENDERPATH_TILEDFORWARD, + }; + void ChangeRenderPath(RENDERPATH path); + void DeleteWindows(); void Initialize() override; void Load() override; void Start() override; + void FixedUpdate() override; void Update(float dt) override; void Render() override; void Compose() override; diff --git a/WickedEngine/EnvProbeWindow.cpp b/WickedEngine/EnvProbeWindow.cpp index 3839c39c6..cc1de10b6 100644 --- a/WickedEngine/EnvProbeWindow.cpp +++ b/WickedEngine/EnvProbeWindow.cpp @@ -68,11 +68,9 @@ EnvProbeWindow::EnvProbeWindow(wiGUI* gui) : GUI(gui) EnvProbeWindow::~EnvProbeWindow() { + envProbeWindow->RemoveWidgets(true); + GUI->RemoveWidget(envProbeWindow); SAFE_DELETE(envProbeWindow); - SAFE_DELETE(resolutionSlider); - SAFE_DELETE(realTimeCheckBox); - SAFE_DELETE(generateButton); - SAFE_DELETE(refreshButton); } void EnvProbeWindow::SetProbe(EnvironmentProbe* value) diff --git a/WickedEngine/LightWindow.cpp b/WickedEngine/LightWindow.cpp index 9f2af611c..40443dc3b 100644 --- a/WickedEngine/LightWindow.cpp +++ b/WickedEngine/LightWindow.cpp @@ -190,19 +190,9 @@ LightWindow::LightWindow(wiGUI* gui) : GUI(gui), light(nullptr) LightWindow::~LightWindow() { + lightWindow->RemoveWidgets(true); + GUI->RemoveWidget(lightWindow); SAFE_DELETE(lightWindow); - SAFE_DELETE(energySlider); - SAFE_DELETE(distanceSlider); - SAFE_DELETE(radiusSlider); - SAFE_DELETE(widthSlider); - SAFE_DELETE(heightSlider); - SAFE_DELETE(fovSlider); - SAFE_DELETE(biasSlider); - SAFE_DELETE(shadowCheckBox); - SAFE_DELETE(haloCheckBox); - SAFE_DELETE(addLightButton); - SAFE_DELETE(colorPicker); - SAFE_DELETE(typeSelectorComboBox); } void LightWindow::SetLight(Light* light) diff --git a/WickedEngine/MaterialWindow.cpp b/WickedEngine/MaterialWindow.cpp index 2300837aa..8fa8887db 100644 --- a/WickedEngine/MaterialWindow.cpp +++ b/WickedEngine/MaterialWindow.cpp @@ -375,34 +375,9 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) MaterialWindow::~MaterialWindow() { + materialWindow->RemoveWidgets(true); + GUI->RemoveWidget(materialWindow); SAFE_DELETE(materialWindow); - SAFE_DELETE(materialLabel); - SAFE_DELETE(waterCheckBox); - SAFE_DELETE(planarReflCheckBox); - SAFE_DELETE(shadowCasterCheckBox); - SAFE_DELETE(normalMapSlider); - SAFE_DELETE(roughnessSlider); - SAFE_DELETE(reflectanceSlider); - SAFE_DELETE(metalnessSlider); - SAFE_DELETE(alphaSlider); - SAFE_DELETE(refractionIndexSlider); - SAFE_DELETE(emissiveSlider); - SAFE_DELETE(sssSlider); - SAFE_DELETE(pomSlider); - SAFE_DELETE(movingTexSliderU); - SAFE_DELETE(movingTexSliderV); - SAFE_DELETE(texMulSliderX); - SAFE_DELETE(texMulSliderY); - SAFE_DELETE(colorPicker); - SAFE_DELETE(alphaRefSlider); - - SAFE_DELETE(texture_baseColor_Label); - SAFE_DELETE(texture_normal_Label); - SAFE_DELETE(texture_displacement_Label); - - SAFE_DELETE(texture_baseColor_Button); - SAFE_DELETE(texture_normal_Button); - SAFE_DELETE(texture_displacement_Button); } diff --git a/WickedEngine/MeshWindow.cpp b/WickedEngine/MeshWindow.cpp index 1c4b0192d..cadf779b9 100644 --- a/WickedEngine/MeshWindow.cpp +++ b/WickedEngine/MeshWindow.cpp @@ -101,13 +101,9 @@ MeshWindow::MeshWindow(wiGUI* gui) : GUI(gui) MeshWindow::~MeshWindow() { + meshWindow->RemoveWidgets(true); + GUI->RemoveWidget(meshWindow); SAFE_DELETE(meshWindow); - SAFE_DELETE(doubleSidedCheckBox); - SAFE_DELETE(massSlider); - SAFE_DELETE(frictionSlider); - SAFE_DELETE(impostorCreateButton); - SAFE_DELETE(impostorDistanceSlider); - SAFE_DELETE(tessellationFactorSlider); } void MeshWindow::SetMesh(Mesh* mesh) diff --git a/WickedEngine/ObjectWindow.cpp b/WickedEngine/ObjectWindow.cpp index 55316684d..3b87c0d99 100644 --- a/WickedEngine/ObjectWindow.cpp +++ b/WickedEngine/ObjectWindow.cpp @@ -213,14 +213,9 @@ ObjectWindow::ObjectWindow(wiGUI* gui) : GUI(gui) ObjectWindow::~ObjectWindow() { + objectWindow->RemoveWidgets(true); + GUI->RemoveWidget(objectWindow); SAFE_DELETE(objectWindow); - SAFE_DELETE(ditherSlider); - SAFE_DELETE(colorPicker); - SAFE_DELETE(physicsLabel); - SAFE_DELETE(simulationTypeComboBox); - SAFE_DELETE(kinematicCheckBox); - SAFE_DELETE(physicsTypeComboBox); - SAFE_DELETE(collisionShapeComboBox); } diff --git a/WickedEngine/PostprocessWindow.cpp b/WickedEngine/PostprocessWindow.cpp index ecb7f81a5..ee53c49ce 100644 --- a/WickedEngine/PostprocessWindow.cpp +++ b/WickedEngine/PostprocessWindow.cpp @@ -2,12 +2,9 @@ #include "PostprocessWindow.h" -PostprocessWindow::PostprocessWindow(Renderable3DComponent* comp) : component(comp) +PostprocessWindow::PostprocessWindow(wiGUI* gui, Renderable3DComponent* comp) : GUI(gui), component(comp) { assert(component && "PostprocessWnd invalid component!"); - - GUI = &component->GetGUI(); - assert(GUI && "Invalid GUI!"); float screenW = (float)wiRenderer::GetDevice()->GetScreenWidth(); @@ -191,21 +188,7 @@ PostprocessWindow::PostprocessWindow(Renderable3DComponent* comp) : component(co PostprocessWindow::~PostprocessWindow() { + ppWindow->RemoveWidgets(true); + GUI->RemoveWidget(ppWindow); SAFE_DELETE(ppWindow); - SAFE_DELETE(lensFlareCheckBox); - SAFE_DELETE(lightShaftsCheckBox); - SAFE_DELETE(ssaoCheckBox); - SAFE_DELETE(ssrCheckBox); - SAFE_DELETE(sssCheckBox); - SAFE_DELETE(eyeAdaptionCheckBox); - SAFE_DELETE(motionBlurCheckBox); - SAFE_DELETE(depthOfFieldCheckBox); - SAFE_DELETE(depthOfFieldFocusSlider); - SAFE_DELETE(depthOfFieldStrengthSlider); - SAFE_DELETE(bloomCheckBox); - SAFE_DELETE(fxaaCheckBox); - SAFE_DELETE(colorGradingCheckBox); - SAFE_DELETE(stereogramCheckBox); - SAFE_DELETE(sharpenFilterCheckBox); - SAFE_DELETE(sharpenFilterAmountSlider); } diff --git a/WickedEngine/PostprocessWindow.h b/WickedEngine/PostprocessWindow.h index 15e32a6ae..b6e6954df 100644 --- a/WickedEngine/PostprocessWindow.h +++ b/WickedEngine/PostprocessWindow.h @@ -11,7 +11,7 @@ class wiSlider; class PostprocessWindow { public: - PostprocessWindow(Renderable3DComponent* component); + PostprocessWindow(wiGUI* gui, Renderable3DComponent* component); ~PostprocessWindow(); wiGUI* GUI; diff --git a/WickedEngine/RendererWindow.cpp b/WickedEngine/RendererWindow.cpp index 08de36187..ea445c195 100644 --- a/WickedEngine/RendererWindow.cpp +++ b/WickedEngine/RendererWindow.cpp @@ -3,12 +3,10 @@ #include "Renderable3DComponent.h" -RendererWindow::RendererWindow(Renderable3DComponent* component) +RendererWindow::RendererWindow(wiGUI* gui, Renderable3DComponent* component) : GUI(gui) { assert(GUI && "Invalid GUI!"); - GUI = &component->GetGUI(); - float screenW = (float)wiRenderer::GetDevice()->GetScreenWidth(); float screenH = (float)wiRenderer::GetDevice()->GetScreenHeight(); @@ -450,40 +448,9 @@ RendererWindow::RendererWindow(Renderable3DComponent* component) RendererWindow::~RendererWindow() { + rendererWindow->RemoveWidgets(true); + GUI->RemoveWidget(rendererWindow); SAFE_DELETE(rendererWindow); - SAFE_DELETE(vsyncCheckBox); - SAFE_DELETE(vsyncCheckBox); - SAFE_DELETE(occlusionCullingCheckBox); - SAFE_DELETE(resolutionScaleSlider); - SAFE_DELETE(gammaSlider); - SAFE_DELETE(voxelRadianceCheckBox); - SAFE_DELETE(voxelRadianceDebugCheckBox); - SAFE_DELETE(voxelRadianceSecondaryBounceCheckBox); - SAFE_DELETE(voxelRadianceVoxelSizeSlider); - SAFE_DELETE(voxelRadianceConeTracingSlider); - SAFE_DELETE(voxelRadianceFalloffSlider); - SAFE_DELETE(specularAASlider); - SAFE_DELETE(partitionBoxesCheckBox); - SAFE_DELETE(boneLinesCheckBox); - SAFE_DELETE(debugEmittersCheckBox); - SAFE_DELETE(wireFrameCheckBox); - SAFE_DELETE(advancedLightCullingCheckBox); - SAFE_DELETE(debugLightCullingCheckBox); - SAFE_DELETE(tessellationCheckBox); - SAFE_DELETE(advancedRefractionsCheckBox); - SAFE_DELETE(envProbesCheckBox); - SAFE_DELETE(gridHelperCheckBox); - SAFE_DELETE(pickTypeObjectCheckBox); - SAFE_DELETE(pickTypeEnvProbeCheckBox); - SAFE_DELETE(pickTypeLightCheckBox); - SAFE_DELETE(pickTypeDecalCheckBox); - SAFE_DELETE(speedMultiplierSlider); - SAFE_DELETE(shadowProps2DComboBox); - SAFE_DELETE(shadowPropsCubeComboBox); - SAFE_DELETE(MSAAComboBox); - SAFE_DELETE(temporalAACheckBox); - SAFE_DELETE(textureQualityComboBox); - SAFE_DELETE(mipLodBiasSlider); } int RendererWindow::GetPickType() diff --git a/WickedEngine/RendererWindow.h b/WickedEngine/RendererWindow.h index b6800fc48..9f50bdf57 100644 --- a/WickedEngine/RendererWindow.h +++ b/WickedEngine/RendererWindow.h @@ -11,7 +11,7 @@ class wiComboBox; class RendererWindow { public: - RendererWindow(Renderable3DComponent* component); + RendererWindow(wiGUI* gui, Renderable3DComponent* component); ~RendererWindow(); wiGUI* GUI; diff --git a/WickedEngine/WorldWindow.cpp b/WickedEngine/WorldWindow.cpp index f611aaa20..70b8393c0 100644 --- a/WickedEngine/WorldWindow.cpp +++ b/WickedEngine/WorldWindow.cpp @@ -107,16 +107,9 @@ WorldWindow::WorldWindow(wiGUI* gui) : GUI(gui) WorldWindow::~WorldWindow() { + worldWindow->RemoveWidgets(true); + GUI->RemoveWidget(worldWindow); SAFE_DELETE(worldWindow); - SAFE_DELETE(fogStartSlider); - SAFE_DELETE(fogEndSlider); - SAFE_DELETE(fogHeightSlider); - SAFE_DELETE(ambientColorPickerToggleButton); - SAFE_DELETE(ambientColorPicker); - SAFE_DELETE(horizonColorPickerToggleButton); - SAFE_DELETE(horizonColorPicker); - SAFE_DELETE(zenithColorPickerToggleButton); - SAFE_DELETE(zenithColorPicker); } void WorldWindow::UpdateFromRenderer() diff --git a/WickedEngine/wiWidget.cpp b/WickedEngine/wiWidget.cpp index 5f9608318..5b2787866 100644 --- a/WickedEngine/wiWidget.cpp +++ b/WickedEngine/wiWidget.cpp @@ -1050,10 +1050,7 @@ wiWindow::wiWindow(wiGUI* gui, const std::string& name) :wiWidget() } wiWindow::~wiWindow() { - SAFE_DELETE(closeButton); - SAFE_DELETE(moveDragger); - SAFE_DELETE(resizeDragger_BottomRight); - SAFE_DELETE(resizeDragger_UpperLeft); + RemoveWidgets(true); } void wiWindow::AddWidget(wiWidget* widget) {