new editor feature: switch render paths in real time

This commit is contained in:
turanszkij
2017-06-29 01:07:20 +02:00
parent f9058e9610
commit 364d1de518
17 changed files with 153 additions and 186 deletions
+3 -13
View File
@@ -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)
+4 -6
View File
@@ -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);
}
+2
View File
@@ -13,6 +13,8 @@ public:
CameraWindow(wiGUI* gui);
~CameraWindow();
void ResetCam();
bool fpscamera;
Transform* orbitalCamTarget;
+2 -2
View File
@@ -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)
+109 -34
View File
@@ -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);
+12 -4
View File
@@ -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;
+2 -4
View File
@@ -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)
+2 -12
View File
@@ -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)
+2 -27
View File
@@ -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);
}
+2 -6
View File
@@ -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)
+2 -7
View File
@@ -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);
}
+3 -20
View File
@@ -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);
}
+1 -1
View File
@@ -11,7 +11,7 @@ class wiSlider;
class PostprocessWindow
{
public:
PostprocessWindow(Renderable3DComponent* component);
PostprocessWindow(wiGUI* gui, Renderable3DComponent* component);
~PostprocessWindow();
wiGUI* GUI;
+3 -36
View File
@@ -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()
+1 -1
View File
@@ -11,7 +11,7 @@ class wiComboBox;
class RendererWindow
{
public:
RendererWindow(Renderable3DComponent* component);
RendererWindow(wiGUI* gui, Renderable3DComponent* component);
~RendererWindow();
wiGUI* GUI;
+2 -9
View File
@@ -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()
+1 -4
View File
@@ -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)
{