diff --git a/Documentation/ScriptingAPI-Documentation.md b/Documentation/ScriptingAPI-Documentation.md index c4b74bfcf..39c5c081a 100644 --- a/Documentation/ScriptingAPI-Documentation.md +++ b/Documentation/ScriptingAPI-Documentation.md @@ -432,7 +432,6 @@ It inherits functions from RenderPath2D, so it can render a 2D overlay. - SetDepthOfFieldStrength(float value) - SetTessellationEnabled(bool value) - SetMSAASampleCount(int count) -- SetStereogramEnabled(bool value) - SetSharpenFilterEnabled(bool value) - SetSharpenFilterAmount(float value) - SetExposure(float value) diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index 67ca06d64..f5fe61448 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -118,6 +118,9 @@ void EditorComponent::ChangeRenderPath(RENDERPATH path) case EditorComponent::RENDERPATH_PATHTRACING: renderPath = new RenderPath3D_PathTracing; break; + case EditorComponent::RENDERPATH_STEREOGRAM: + renderPath = new RenderPath3D_Stereogram; + break; default: assert(0); break; @@ -649,6 +652,7 @@ void EditorComponent::Load() renderPathComboBox->AddItem("Tiled Forward"); renderPathComboBox->AddItem("Tiled Deferred"); renderPathComboBox->AddItem("Path Tracing"); + renderPathComboBox->AddItem("Stereogram"); renderPathComboBox->OnSelect([&](wiEventArgs args) { switch (args.iValue) { @@ -667,6 +671,9 @@ void EditorComponent::Load() case 4: ChangeRenderPath(RENDERPATH_PATHTRACING); break; + case 5: + ChangeRenderPath(RENDERPATH_STEREOGRAM); + break; default: break; } diff --git a/Editor/Editor.h b/Editor/Editor.h index 7dcd0e23d..1b2eb5db8 100644 --- a/Editor/Editor.h +++ b/Editor/Editor.h @@ -64,6 +64,7 @@ public: RENDERPATH_TILEDFORWARD, RENDERPATH_TILEDDEFERRED, RENDERPATH_PATHTRACING, + RENDERPATH_STEREOGRAM, }; void ChangeRenderPath(RENDERPATH path); diff --git a/Editor/PostprocessWindow.cpp b/Editor/PostprocessWindow.cpp index e08fff270..b898bb5c5 100644 --- a/Editor/PostprocessWindow.cpp +++ b/Editor/PostprocessWindow.cpp @@ -245,16 +245,6 @@ PostprocessWindow::PostprocessWindow(wiGUI* gui, RenderPath3D* comp) : GUI(gui), }); ppWindow->AddWidget(colorGradingButton); - stereogramCheckBox = new wiCheckBox("Stereogram: "); - stereogramCheckBox->SetTooltip("Compute a stereogram from the depth buffer. It produces a 3D silhouette image when viewed cross eyed."); - stereogramCheckBox->SetScriptTip("RenderPath3D::SetStereogramEnabled(bool value)"); - stereogramCheckBox->SetPos(XMFLOAT2(x, y += 35)); - stereogramCheckBox->SetCheck(component->getStereogramEnabled()); - stereogramCheckBox->OnClick([&](wiEventArgs args) { - component->setStereogramEnabled(args.bValue); - }); - ppWindow->AddWidget(stereogramCheckBox); - sharpenFilterCheckBox = new wiCheckBox("Sharpen Filter: "); sharpenFilterCheckBox->SetTooltip("Toggle sharpening post process of the final image."); sharpenFilterCheckBox->SetScriptTip("RenderPath3D::SetSharpenFilterEnabled(bool value)"); diff --git a/Editor/PostprocessWindow.h b/Editor/PostprocessWindow.h index 80ac88b44..72dadd856 100644 --- a/Editor/PostprocessWindow.h +++ b/Editor/PostprocessWindow.h @@ -35,7 +35,6 @@ public: wiCheckBox* bloomCheckBox; wiSlider* bloomStrengthSlider; wiCheckBox* fxaaCheckBox; - wiCheckBox* stereogramCheckBox; wiCheckBox* colorGradingCheckBox; wiButton* colorGradingButton; wiCheckBox* sharpenFilterCheckBox; diff --git a/WickedEngine/RenderPath3D.cpp b/WickedEngine/RenderPath3D.cpp index 1495f9655..5317a48ed 100644 --- a/WickedEngine/RenderPath3D.cpp +++ b/WickedEngine/RenderPath3D.cpp @@ -210,17 +210,6 @@ void RenderPath3D::Compose() const fx.blendFlag = BLENDMODE_PREMULTIPLIED; fx.quality = QUALITY_LINEAR; - if (getStereogramEnabled()) - { - device->EventBegin("Stereogram", GRAPHICSTHREAD_IMMEDIATE); - fx.disableFullScreen(); - fx.process.clear(); - fx.process.setStereogram(); - wiImage::Draw(wiTextureHelper::getRandom64x64(), fx, GRAPHICSTHREAD_IMMEDIATE); - device->EventEnd(GRAPHICSTHREAD_IMMEDIATE); - return; - } - if (getColorGradingEnabled()) { device->EventBegin("Color Graded Composition", GRAPHICSTHREAD_IMMEDIATE); @@ -278,16 +267,6 @@ void RenderPath3D::RenderFrameSetUp(GRAPHICSTHREAD threadID) const } void RenderPath3D::RenderReflections(GRAPHICSTHREAD threadID) const { - if (getStereogramEnabled()) - { - // We don't need the following for stereograms... - return; - } - - if (!getReflectionsEnabled() || getReflectionQuality() < 0.01f) - { - return; - } wiProfiler::BeginRange("Reflection rendering", wiProfiler::DOMAIN_GPU, threadID); if (wiRenderer::IsRequestedReflectionRendering()) @@ -331,12 +310,6 @@ void RenderPath3D::RenderReflections(GRAPHICSTHREAD threadID) const } void RenderPath3D::RenderShadows(GRAPHICSTHREAD threadID) const { - if (getStereogramEnabled()) - { - // We don't need the following for stereograms... - return; - } - if (getShadowsEnabled()) { wiRenderer::DrawForShadowMap(wiRenderer::GetCamera(), threadID, getLayerMask()); diff --git a/WickedEngine/RenderPath3D.h b/WickedEngine/RenderPath3D.h index ca5a81f13..b6a9e7c3b 100644 --- a/WickedEngine/RenderPath3D.h +++ b/WickedEngine/RenderPath3D.h @@ -39,7 +39,6 @@ private: bool motionBlurEnabled = false; bool sssEnabled = true; bool depthOfFieldEnabled = false; - bool stereogramEnabled = false; bool eyeAdaptionEnabled = false; bool tessellationEnabled = false; bool sharpenFilterEnabled = false; @@ -131,7 +130,6 @@ public: inline bool getMotionBlurEnabled() const { return motionBlurEnabled; } inline bool getSSSEnabled() const { return sssEnabled; } inline bool getDepthOfFieldEnabled() const { return depthOfFieldEnabled; } - inline bool getStereogramEnabled() const { return stereogramEnabled; } inline bool getEyeAdaptionEnabled() const { return eyeAdaptionEnabled; } inline bool getTessellationEnabled() const { return tessellationEnabled && wiRenderer::GetDevice()->CheckCapability(wiGraphics::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_TESSELLATION); } inline bool getSharpenFilterEnabled() const { return sharpenFilterEnabled && getSharpenFilterAmount() > 0; } @@ -173,7 +171,6 @@ public: inline void setMotionBlurEnabled(bool value){ motionBlurEnabled = value; } inline void setSSSEnabled(bool value){ sssEnabled = value; } inline void setDepthOfFieldEnabled(bool value){ depthOfFieldEnabled = value; } - inline void setStereogramEnabled(bool value) { stereogramEnabled = value; } inline void setEyeAdaptionEnabled(bool value) { eyeAdaptionEnabled = value; } inline void setTessellationEnabled(bool value) { tessellationEnabled = value; } inline void setSharpenFilterEnabled(bool value) { sharpenFilterEnabled = value; } diff --git a/WickedEngine/RenderPath3D_BindLua.cpp b/WickedEngine/RenderPath3D_BindLua.cpp index 78759b893..b8e5f222b 100644 --- a/WickedEngine/RenderPath3D_BindLua.cpp +++ b/WickedEngine/RenderPath3D_BindLua.cpp @@ -52,7 +52,6 @@ Luna::FunctionType RenderPath3D_BindLua::methods[] = { lunamethod(RenderPath3D_BindLua, SetMotionBlurEnabled), lunamethod(RenderPath3D_BindLua, SetSSSEnabled), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldEnabled), - lunamethod(RenderPath3D_BindLua, SetStereogramEnabled), lunamethod(RenderPath3D_BindLua, SetEyeAdaptionEnabled), lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetMSAASampleCount), @@ -311,21 +310,6 @@ int RenderPath3D_BindLua::SetDepthOfFieldEnabled(lua_State* L) wiLua::SError(L, "SetDepthOfFieldEnabled(bool value) not enough arguments!"); return 0; } -int RenderPath3D_BindLua::SetStereogramEnabled(lua_State* L) -{ - if (component == nullptr) - { - wiLua::SError(L, "SetStereogramEnabled(bool value) component is null!"); - return 0; - } - if (wiLua::SGetArgCount(L) > 0) - { - ((RenderPath3D*)component)->setStereogramEnabled(wiLua::SGetBool(L, 1)); - } - else - wiLua::SError(L, "SetStereogramEnabled(bool value) not enough arguments!"); - return 0; -} int RenderPath3D_BindLua::SetEyeAdaptionEnabled(lua_State* L) { if (component == nullptr) diff --git a/WickedEngine/RenderPath3D_BindLua.h b/WickedEngine/RenderPath3D_BindLua.h index 0282f8a26..6eeaebedd 100644 --- a/WickedEngine/RenderPath3D_BindLua.h +++ b/WickedEngine/RenderPath3D_BindLua.h @@ -32,7 +32,6 @@ public: int SetMotionBlurEnabled(lua_State* L); int SetSSSEnabled(lua_State* L); int SetDepthOfFieldEnabled(lua_State* L); - int SetStereogramEnabled(lua_State* L); int SetEyeAdaptionEnabled(lua_State* L); int SetTessellationEnabled(lua_State* L); int SetMSAASampleCount(lua_State* L); diff --git a/WickedEngine/RenderPath3D_Deferred.cpp b/WickedEngine/RenderPath3D_Deferred.cpp index 7f9b7b4a5..83723fc6e 100644 --- a/WickedEngine/RenderPath3D_Deferred.cpp +++ b/WickedEngine/RenderPath3D_Deferred.cpp @@ -74,8 +74,6 @@ void RenderPath3D_Deferred::Render() const wiRenderer::UpdateCameraCB(wiRenderer::GetCamera(), threadID); - wiImageParams fx((float)wiRenderer::GetInternalResolution().x, (float)wiRenderer::GetInternalResolution().y); - const GPUResource* dsv[] = { &depthBuffer }; device->TransitionBarrier(dsv, ARRAYSIZE(dsv), RESOURCE_STATE_DEPTH_READ, RESOURCE_STATE_DEPTH_WRITE, threadID); @@ -115,12 +113,6 @@ void RenderPath3D_Deferred::Render() const wiRenderer::BindDepthTextures(&depthCopy, &rtLinearDepth, threadID); - if (getStereogramEnabled()) - { - // We don't need the following for stereograms... - return; - } - RenderDecals(threadID); wiRenderer::BindGBufferTextures(&rtGBuffer[0], &rtGBuffer[1], &rtGBuffer[2], threadID); @@ -155,47 +147,44 @@ void RenderPath3D_Deferred::Render() const wiRenderer::UpdateCameraCB(wiRenderer::GetCamera(), GRAPHICSTHREAD_IMMEDIATE); - if (!getStereogramEnabled()) + RenderOutline(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); + + RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); + + RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); + + RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); + + RenderRefractionSource(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + RenderTransparents(rtDeferred, RENDERPASS_FORWARD, GRAPHICSTHREAD_IMMEDIATE); + + RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); + + TemporalAAResolve(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); + + RenderBloom(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + RenderMotionBlur(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); + + ToneMapping(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + const Texture2D* rt0 = &rtFinal[0]; + const Texture2D* rt1 = &rtFinal[1]; + + SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + + if (getSharpenFilterEnabled()) { - RenderOutline(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); - - RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); - - RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); - - RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); - - RenderRefractionSource(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - RenderTransparents(rtDeferred, RENDERPASS_FORWARD, GRAPHICSTHREAD_IMMEDIATE); - - RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); - - TemporalAAResolve(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); - - RenderBloom(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - RenderMotionBlur(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); - - ToneMapping(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - const Texture2D* rt0 = &rtFinal[0]; - const Texture2D* rt1 = &rtFinal[1]; - - SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); - - if (getSharpenFilterEnabled()) - { - SwapPtr(rt0, rt1); - } - - RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); - - RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + SwapPtr(rt0, rt1); } + RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); + + RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + RenderPath2D::Render(); } diff --git a/WickedEngine/RenderPath3D_Deferred_BindLua.cpp b/WickedEngine/RenderPath3D_Deferred_BindLua.cpp index 2db10235d..1aafd6230 100644 --- a/WickedEngine/RenderPath3D_Deferred_BindLua.cpp +++ b/WickedEngine/RenderPath3D_Deferred_BindLua.cpp @@ -50,7 +50,6 @@ Luna::FunctionType RenderPath3D_Deferred_BindLua: lunamethod(RenderPath3D_BindLua, SetMotionBlurEnabled), lunamethod(RenderPath3D_BindLua, SetSSSEnabled), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldEnabled), - lunamethod(RenderPath3D_BindLua, SetStereogramEnabled), lunamethod(RenderPath3D_BindLua, SetEyeAdaptionEnabled), lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), diff --git a/WickedEngine/RenderPath3D_Forward.cpp b/WickedEngine/RenderPath3D_Forward.cpp index 2e6ae1699..3d6d08ced 100644 --- a/WickedEngine/RenderPath3D_Forward.cpp +++ b/WickedEngine/RenderPath3D_Forward.cpp @@ -65,8 +65,6 @@ void RenderPath3D_Forward::Render() const const GPUResource* dsv[] = { &depthBuffer }; device->TransitionBarrier(dsv, ARRAYSIZE(dsv), RESOURCE_STATE_DEPTH_READ, RESOURCE_STATE_DEPTH_WRITE, threadID); - wiImageParams fx((float)wiRenderer::GetInternalResolution().x, (float)wiRenderer::GetInternalResolution().y); - // Opaque Scene: { wiProfiler::BeginRange("Opaque Scene", wiProfiler::DOMAIN_GPU, threadID); @@ -127,52 +125,48 @@ void RenderPath3D_Forward::Render() const wiRenderer::UpdateCameraCB(wiRenderer::GetCamera(), GRAPHICSTHREAD_IMMEDIATE); - if (!getStereogramEnabled()) + RenderOutline(rtMain[0], GRAPHICSTHREAD_IMMEDIATE); + + RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); + + RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); + + RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); + + RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); + + RenderRefractionSource(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); + + RenderTransparents(rtMain[0], RENDERPASS_FORWARD, GRAPHICSTHREAD_IMMEDIATE); + + if (getMSAASampleCount() > 1) { - RenderOutline(rtMain[0], GRAPHICSTHREAD_IMMEDIATE); - - RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); - - RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); - - RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); - - RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); - - RenderRefractionSource(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); - - RenderTransparents(rtMain[0], RENDERPASS_FORWARD, GRAPHICSTHREAD_IMMEDIATE); - - if (getMSAASampleCount() > 1) - { - device->MSAAResolve(scene_read[0], &rtMain[0], GRAPHICSTHREAD_IMMEDIATE); - } - - RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); - - TemporalAAResolve(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); - - RenderBloom(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); - - RenderMotionBlur(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); - - ToneMapping(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); - - const Texture2D* rt0 = &rtFinal[0]; - const Texture2D* rt1 = &rtFinal[1]; - - SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); - - if (getSharpenFilterEnabled()) - { - SwapPtr(rt0, rt1); - } - - RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); - - RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + device->MSAAResolve(scene_read[0], &rtMain[0], GRAPHICSTHREAD_IMMEDIATE); } + RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); + + TemporalAAResolve(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); + + RenderBloom(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); + + RenderMotionBlur(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); + + ToneMapping(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); + + const Texture2D* rt0 = &rtFinal[0]; + const Texture2D* rt1 = &rtFinal[1]; + + SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + + if (getSharpenFilterEnabled()) + { + SwapPtr(rt0, rt1); + } + + RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); + + RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + RenderPath2D::Render(); } - diff --git a/WickedEngine/RenderPath3D_Forward_BindLua.cpp b/WickedEngine/RenderPath3D_Forward_BindLua.cpp index 5d85ba661..b0e217d1a 100644 --- a/WickedEngine/RenderPath3D_Forward_BindLua.cpp +++ b/WickedEngine/RenderPath3D_Forward_BindLua.cpp @@ -50,7 +50,6 @@ Luna::FunctionType RenderPath3D_Forward_BindLua::m lunamethod(RenderPath3D_BindLua, SetMotionBlurEnabled), lunamethod(RenderPath3D_BindLua, SetSSSEnabled), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldEnabled), - lunamethod(RenderPath3D_BindLua, SetStereogramEnabled), lunamethod(RenderPath3D_BindLua, SetEyeAdaptionEnabled), lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetMSAASampleCount), diff --git a/WickedEngine/RenderPath3D_Stereogram.cpp b/WickedEngine/RenderPath3D_Stereogram.cpp new file mode 100644 index 000000000..0977b4862 --- /dev/null +++ b/WickedEngine/RenderPath3D_Stereogram.cpp @@ -0,0 +1,53 @@ +#include "RenderPath3D_Stereogram.h" +#include "wiRenderer.h" +#include "wiImage.h" +#include "wiTextureHelper.h" + +using namespace wiGraphics; + +void RenderPath3D_Stereogram::Render() const +{ + GraphicsDevice* device = wiRenderer::GetDevice(); + + RenderFrameSetUp(GRAPHICSTHREAD_IMMEDIATE); + + wiRenderer::UpdateCameraCB(wiRenderer::GetCamera(), GRAPHICSTHREAD_IMMEDIATE); + + const GPUResource* dsv[] = { &depthBuffer }; + device->TransitionBarrier(dsv, ARRAYSIZE(dsv), RESOURCE_STATE_DEPTH_READ, RESOURCE_STATE_DEPTH_WRITE, GRAPHICSTHREAD_IMMEDIATE); + + // Render depth only buffer: + + device->BindRenderTargets(0, nullptr, &depthBuffer, GRAPHICSTHREAD_IMMEDIATE); + device->ClearDepthStencil(&depthBuffer, CLEAR_DEPTH | CLEAR_STENCIL, 0, 0, GRAPHICSTHREAD_IMMEDIATE); + + ViewPort vp; + vp.Width = (float)depthBuffer.GetDesc().Width; + vp.Height = (float)depthBuffer.GetDesc().Height; + device->BindViewports(1, &vp, GRAPHICSTHREAD_IMMEDIATE); + + wiRenderer::DrawScene(wiRenderer::GetCamera(), getTessellationEnabled(), GRAPHICSTHREAD_IMMEDIATE, RENDERPASS_DEPTHONLY, getHairParticlesEnabled(), true, getLayerMask()); + + device->TransitionBarrier(dsv, ARRAYSIZE(dsv), RESOURCE_STATE_DEPTH_WRITE, RESOURCE_STATE_COPY_SOURCE, GRAPHICSTHREAD_IMMEDIATE); + device->CopyTexture2D(&depthCopy, &depthBuffer, GRAPHICSTHREAD_IMMEDIATE); + + RenderLinearDepth(GRAPHICSTHREAD_IMMEDIATE); + + wiRenderer::BindDepthTextures(&depthCopy, &rtLinearDepth, GRAPHICSTHREAD_IMMEDIATE); +} + +void RenderPath3D_Stereogram::Compose() const +{ + GraphicsDevice* device = wiRenderer::GetDevice(); + + wiImageParams fx((float)device->GetScreenWidth(), (float)device->GetScreenHeight()); + fx.blendFlag = BLENDMODE_PREMULTIPLIED; + fx.quality = QUALITY_LINEAR; + + device->EventBegin("Stereogram", GRAPHICSTHREAD_IMMEDIATE); + fx.disableFullScreen(); + fx.process.clear(); + fx.process.setStereogram(); + wiImage::Draw(wiTextureHelper::getRandom64x64(), fx, GRAPHICSTHREAD_IMMEDIATE); + device->EventEnd(GRAPHICSTHREAD_IMMEDIATE); +} diff --git a/WickedEngine/RenderPath3D_Stereogram.h b/WickedEngine/RenderPath3D_Stereogram.h new file mode 100644 index 000000000..91fcc01a2 --- /dev/null +++ b/WickedEngine/RenderPath3D_Stereogram.h @@ -0,0 +1,14 @@ +#pragma once +#include "RenderPath3D.h" + + +class RenderPath3D_Stereogram : + public RenderPath3D +{ +public: + void setMSAASampleCount(UINT value) override { /*disable MSAA*/ } + + void Render() const override; + void Compose() const override; +}; + diff --git a/WickedEngine/RenderPath3D_TiledDeferred.cpp b/WickedEngine/RenderPath3D_TiledDeferred.cpp index 7ae123765..f91f55f97 100644 --- a/WickedEngine/RenderPath3D_TiledDeferred.cpp +++ b/WickedEngine/RenderPath3D_TiledDeferred.cpp @@ -22,8 +22,6 @@ void RenderPath3D_TiledDeferred::Render() const wiRenderer::UpdateCameraCB(wiRenderer::GetCamera(), threadID); - wiImageParams fx((float)wiRenderer::GetInternalResolution().x, (float)wiRenderer::GetInternalResolution().y); - const GPUResource* dsv[] = { &depthBuffer }; device->TransitionBarrier(dsv, ARRAYSIZE(dsv), RESOURCE_STATE_DEPTH_READ, RESOURCE_STATE_DEPTH_WRITE, threadID); @@ -63,12 +61,6 @@ void RenderPath3D_TiledDeferred::Render() const wiRenderer::BindDepthTextures(&depthCopy, &rtLinearDepth, threadID); - if (getStereogramEnabled()) - { - // We don't need the following for stereograms... - return; - } - RenderDecals(threadID); wiRenderer::BindGBufferTextures(&rtGBuffer[0], &rtGBuffer[1], &rtGBuffer[2], threadID); @@ -91,46 +83,43 @@ void RenderPath3D_TiledDeferred::Render() const wiRenderer::UpdateCameraCB(wiRenderer::GetCamera(), GRAPHICSTHREAD_IMMEDIATE); - if (!getStereogramEnabled()) + RenderOutline(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); + + RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); + + RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); + + RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); + + RenderRefractionSource(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + RenderTransparents(rtDeferred, RENDERPASS_TILEDFORWARD, GRAPHICSTHREAD_IMMEDIATE); + + RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); + + TemporalAAResolve(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); + + RenderBloom(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + RenderMotionBlur(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); + + ToneMapping(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); + + const Texture2D* rt0 = &rtFinal[0]; + const Texture2D* rt1 = &rtFinal[1]; + + SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + + if (getSharpenFilterEnabled()) { - RenderOutline(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); - - RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); - - RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); - - RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); - - RenderRefractionSource(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - RenderTransparents(rtDeferred, RENDERPASS_TILEDFORWARD, GRAPHICSTHREAD_IMMEDIATE); - - RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); - - TemporalAAResolve(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); - - RenderBloom(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - RenderMotionBlur(rtDeferred, rtGBuffer[1], GRAPHICSTHREAD_IMMEDIATE); - - ToneMapping(rtDeferred, GRAPHICSTHREAD_IMMEDIATE); - - const Texture2D* rt0 = &rtFinal[0]; - const Texture2D* rt1 = &rtFinal[1]; - - SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); - - if (getSharpenFilterEnabled()) - { - SwapPtr(rt0, rt1); - } - - RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); - - RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + SwapPtr(rt0, rt1); } + RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); + + RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + RenderPath2D::Render(); } diff --git a/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp b/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp index 06e3a8f1a..029efdc4c 100644 --- a/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp +++ b/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp @@ -50,7 +50,6 @@ Luna::FunctionType RenderPath3D_TiledDeferre lunamethod(RenderPath3D_BindLua, SetMotionBlurEnabled), lunamethod(RenderPath3D_BindLua, SetSSSEnabled), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldEnabled), - lunamethod(RenderPath3D_BindLua, SetStereogramEnabled), lunamethod(RenderPath3D_BindLua, SetEyeAdaptionEnabled), lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), diff --git a/WickedEngine/RenderPath3D_TiledForward.cpp b/WickedEngine/RenderPath3D_TiledForward.cpp index 57635865d..47acf775c 100644 --- a/WickedEngine/RenderPath3D_TiledForward.cpp +++ b/WickedEngine/RenderPath3D_TiledForward.cpp @@ -30,8 +30,6 @@ void RenderPath3D_TiledForward::Render() const const GPUResource* dsv[] = { &depthBuffer }; device->TransitionBarrier(dsv, ARRAYSIZE(dsv), RESOURCE_STATE_DEPTH_READ, RESOURCE_STATE_DEPTH_WRITE, threadID); - wiImageParams fx((float)wiRenderer::GetInternalResolution().x, (float)wiRenderer::GetInternalResolution().y); - // depth prepass { wiProfiler::BeginRange("Z-Prepass", wiProfiler::DOMAIN_GPU, threadID); @@ -116,51 +114,48 @@ void RenderPath3D_TiledForward::Render() const wiRenderer::UpdateCameraCB(wiRenderer::GetCamera(), GRAPHICSTHREAD_IMMEDIATE); - if (!getStereogramEnabled()) + RenderOutline(rtMain[0], GRAPHICSTHREAD_IMMEDIATE); + + RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); + + RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); + + RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); + + RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); + + RenderRefractionSource(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); + + RenderTransparents(rtMain[0], RENDERPASS_TILEDFORWARD, GRAPHICSTHREAD_IMMEDIATE); + + if (getMSAASampleCount() > 1) { - RenderOutline(rtMain[0], GRAPHICSTHREAD_IMMEDIATE); - - RenderLightShafts(GRAPHICSTHREAD_IMMEDIATE); - - RenderVolumetrics(GRAPHICSTHREAD_IMMEDIATE); - - RenderParticles(false, GRAPHICSTHREAD_IMMEDIATE); - - RenderWaterRipples(GRAPHICSTHREAD_IMMEDIATE); - - RenderRefractionSource(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); - - RenderTransparents(rtMain[0], RENDERPASS_TILEDFORWARD, GRAPHICSTHREAD_IMMEDIATE); - - if (getMSAASampleCount() > 1) - { - device->MSAAResolve(scene_read[0], &rtMain[0], GRAPHICSTHREAD_IMMEDIATE); - } - - RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); - - TemporalAAResolve(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); - - RenderBloom(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); - - RenderMotionBlur(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); - - ToneMapping(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); - - const Texture2D* rt0 = &rtFinal[0]; - const Texture2D* rt1 = &rtFinal[1]; - - SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); - - if (getSharpenFilterEnabled()) - { - SwapPtr(rt0, rt1); - } - - RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); - - RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + device->MSAAResolve(scene_read[0], &rtMain[0], GRAPHICSTHREAD_IMMEDIATE); } + RenderParticles(true, GRAPHICSTHREAD_IMMEDIATE); + + TemporalAAResolve(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); + + RenderBloom(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); + + RenderMotionBlur(*scene_read[0], *scene_read[1], GRAPHICSTHREAD_IMMEDIATE); + + ToneMapping(*scene_read[0], GRAPHICSTHREAD_IMMEDIATE); + + const Texture2D* rt0 = &rtFinal[0]; + const Texture2D* rt1 = &rtFinal[1]; + + SharpenFilter(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + + if (getSharpenFilterEnabled()) + { + SwapPtr(rt0, rt1); + } + + RenderDepthOfField(*rt0, GRAPHICSTHREAD_IMMEDIATE); + + RenderFXAA(*rt1, *rt0, GRAPHICSTHREAD_IMMEDIATE); + RenderPath2D::Render(); } diff --git a/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp b/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp index 58c996d1b..45dc20b1a 100644 --- a/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp +++ b/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp @@ -50,7 +50,6 @@ Luna::FunctionType RenderPath3D_TiledForward_ lunamethod(RenderPath3D_BindLua, SetMotionBlurEnabled), lunamethod(RenderPath3D_BindLua, SetSSSEnabled), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldEnabled), - lunamethod(RenderPath3D_BindLua, SetStereogramEnabled), lunamethod(RenderPath3D_BindLua, SetEyeAdaptionEnabled), lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), diff --git a/WickedEngine/WickedEngine.h b/WickedEngine/WickedEngine.h index f802b516a..cb43ecda1 100644 --- a/WickedEngine/WickedEngine.h +++ b/WickedEngine/WickedEngine.h @@ -17,6 +17,7 @@ #include "RenderPath3D_TiledForward.h" #include "RenderPath3D_TiledDeferred.h" #include "RenderPath3D_PathTracing.h" +#include "RenderPath3D_Stereogram.h" #include "LoadingScreen.h" #include "MainComponent.h" diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems b/WickedEngine/WickedEngine_SHARED.vcxitems index af5d71d6c..d8e941ec6 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems +++ b/WickedEngine/WickedEngine_SHARED.vcxitems @@ -233,6 +233,7 @@ + @@ -517,6 +518,7 @@ + diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems.filters b/WickedEngine/WickedEngine_SHARED.vcxitems.filters index e9e78e1ac..93ca5d10c 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems.filters +++ b/WickedEngine/WickedEngine_SHARED.vcxitems.filters @@ -1134,6 +1134,9 @@ ENGINE\Scripting\LuaBindings + + ENGINE\High level interface + @@ -1910,6 +1913,9 @@ ENGINE\Scripting\LuaBindings + + ENGINE\High level interface + diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index c3411aaed..eccb974fe 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 25; // minor bug fixes, alterations, refactors, updates - const int revision = 1; + const int revision = 2; long GetVersion()