moved stereogram from common renderpath to its own
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
RENDERPATH_TILEDFORWARD,
|
||||
RENDERPATH_TILEDDEFERRED,
|
||||
RENDERPATH_PATHTRACING,
|
||||
RENDERPATH_STEREOGRAM,
|
||||
};
|
||||
void ChangeRenderPath(RENDERPATH path);
|
||||
|
||||
|
||||
@@ -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)");
|
||||
|
||||
@@ -35,7 +35,6 @@ public:
|
||||
wiCheckBox* bloomCheckBox;
|
||||
wiSlider* bloomStrengthSlider;
|
||||
wiCheckBox* fxaaCheckBox;
|
||||
wiCheckBox* stereogramCheckBox;
|
||||
wiCheckBox* colorGradingCheckBox;
|
||||
wiButton* colorGradingButton;
|
||||
wiCheckBox* sharpenFilterCheckBox;
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -52,7 +52,6 @@ Luna<RenderPath3D_BindLua>::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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@ Luna<RenderPath3D_Deferred_BindLua>::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),
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@ Luna<RenderPath3D_Forward_BindLua>::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),
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -50,7 +50,6 @@ Luna<RenderPath3D_TiledDeferred_BindLua>::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),
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -50,7 +50,6 @@ Luna<RenderPath3D_TiledForward_BindLua>::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),
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -233,6 +233,7 @@
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)RenderPath3D_Deferred_BindLua.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)RenderPath3D_Forward.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)RenderPath3D_Forward_BindLua.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)RenderPath3D_Stereogram.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)ShaderInterop_BVH.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)ShaderInterop_Font.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)ShaderInterop_HairParticle.h" />
|
||||
@@ -517,6 +518,7 @@
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_Forward.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_Forward_BindLua.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_PathTracing.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_Stereogram.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_TiledDeferred.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_TiledDeferred_BindLua.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_TiledForward.cpp" />
|
||||
|
||||
@@ -1134,6 +1134,9 @@
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)wiIntersect_BindLua.h">
|
||||
<Filter>ENGINE\Scripting\LuaBindings</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)RenderPath3D_Stereogram.h">
|
||||
<Filter>ENGINE\High level interface</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)LUA\lapi.c">
|
||||
@@ -1910,6 +1913,9 @@
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)wiIntersect_BindLua.cpp">
|
||||
<Filter>ENGINE\Scripting\LuaBindings</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)RenderPath3D_Stereogram.cpp">
|
||||
<Filter>ENGINE\High level interface</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="$(MSBuildThisFileDirectory)fonts\default_font.dds">
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user