From 172b6e3b9240c8a06d64c7338957cde057b91065 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Thu, 20 Oct 2016 00:26:05 +0200 Subject: [PATCH] Further refactor of render pipeline --- WickedEngine/DeferredRenderableComponent.cpp | 22 +- WickedEngine/ForwardRenderableComponent.cpp | 20 +- WickedEngine/Renderable3DComponent.cpp | 228 ++++++++----------- WickedEngine/Renderable3DComponent.h | 9 +- WickedEngine/bloomSeparatePS.hlsl | 2 +- WickedEngine/volumeLightPS.hlsl | 2 +- WickedEngine/wiVersion.cpp | 2 +- 7 files changed, 107 insertions(+), 178 deletions(-) diff --git a/WickedEngine/DeferredRenderableComponent.cpp b/WickedEngine/DeferredRenderableComponent.cpp index 93c44baa9..54042344c 100644 --- a/WickedEngine/DeferredRenderableComponent.cpp +++ b/WickedEngine/DeferredRenderableComponent.cpp @@ -35,7 +35,7 @@ void DeferredRenderableComponent::Initialize() rtDeferred.Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() - , false, FORMAT_R16G16B16A16_FLOAT, 0); + , false, FORMAT_R16G16B16A16_FLOAT); rtLight.Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() , false, FORMAT_R11G11B10_FLOAT); // diffuse @@ -83,10 +83,7 @@ void DeferredRenderableComponent::Render() RenderReflections(); RenderScene(); RenderSecondaryScene(rtGBuffer, GetFinalRT()); - RenderLightShafts(rtGBuffer); - RenderComposition1(GetFinalRT()); - RenderBloom(); - RenderComposition2(rtGBuffer); + RenderComposition(GetFinalRT(), rtGBuffer); } Renderable2DComponent::Render(); @@ -275,10 +272,7 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); RenderSecondaryScene(rtGBuffer, GetFinalRT(), GRAPHICSTHREAD_SCENE); - RenderLightShafts(rtGBuffer, GRAPHICSTHREAD_SCENE); - RenderComposition1(GetFinalRT(), GRAPHICSTHREAD_SCENE); - RenderBloom(GRAPHICSTHREAD_SCENE); - RenderComposition2(rtGBuffer, GRAPHICSTHREAD_SCENE); + RenderComposition(GetFinalRT(), rtGBuffer, GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); @@ -306,10 +300,7 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); wiRenderer::UpdateGBuffer(rtGBuffer.GetTexture(0), rtGBuffer.GetTexture(1), rtGBuffer.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtGBuffer, GetFinalRT(), GRAPHICSTHREAD_MISC1); - RenderLightShafts(rtGBuffer, GRAPHICSTHREAD_MISC1); - RenderComposition1(GetFinalRT(), GRAPHICSTHREAD_MISC1); - RenderBloom(GRAPHICSTHREAD_MISC1); - RenderComposition2(rtGBuffer, GRAPHICSTHREAD_MISC1); + RenderComposition(GetFinalRT(), rtGBuffer, GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); })); @@ -340,16 +331,13 @@ void DeferredRenderableComponent::setPreferredThreadingCount(unsigned short valu wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); wiRenderer::UpdateGBuffer(rtGBuffer.GetTexture(0), rtGBuffer.GetTexture(1), rtGBuffer.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtGBuffer, GetFinalRT(), GRAPHICSTHREAD_MISC1); - RenderLightShafts(rtGBuffer, GRAPHICSTHREAD_MISC1); - RenderComposition1(GetFinalRT(), GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); })); workerThreads.push_back(new wiTaskThread([&] { wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC2); wiRenderer::UpdateGBuffer(rtGBuffer.GetTexture(0), rtGBuffer.GetTexture(1), rtGBuffer.GetTexture(2), nullptr, nullptr, GRAPHICSTHREAD_MISC2); - RenderBloom(GRAPHICSTHREAD_MISC2); - RenderComposition2(rtGBuffer, GRAPHICSTHREAD_MISC2); + RenderComposition(GetFinalRT(), rtGBuffer, GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC2); })); diff --git a/WickedEngine/ForwardRenderableComponent.cpp b/WickedEngine/ForwardRenderableComponent.cpp index 817a2d456..0ac10bc21 100644 --- a/WickedEngine/ForwardRenderableComponent.cpp +++ b/WickedEngine/ForwardRenderableComponent.cpp @@ -62,10 +62,7 @@ void ForwardRenderableComponent::Render() RenderReflections(); RenderScene(); RenderSecondaryScene(rtMain, rtMain); - RenderLightShafts(rtMain); - RenderComposition1(rtMain); - RenderBloom(); - RenderComposition2(rtMain); + RenderComposition(rtMain, rtMain); } Renderable2DComponent::Render(); @@ -126,10 +123,7 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value RenderShadows(GRAPHICSTHREAD_SCENE); RenderScene(GRAPHICSTHREAD_SCENE); RenderSecondaryScene(rtMain, rtMain, GRAPHICSTHREAD_SCENE); - RenderLightShafts(rtMain, GRAPHICSTHREAD_SCENE); - RenderComposition1(rtMain, GRAPHICSTHREAD_SCENE); - RenderBloom(GRAPHICSTHREAD_SCENE); - RenderComposition2(rtMain, GRAPHICSTHREAD_SCENE); + RenderComposition(rtMain, rtMain, GRAPHICSTHREAD_SCENE); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_SCENE); })); @@ -156,10 +150,7 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value { wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtMain, rtMain, GRAPHICSTHREAD_MISC1); - RenderLightShafts(rtMain, GRAPHICSTHREAD_MISC1); - RenderComposition1(rtMain, GRAPHICSTHREAD_MISC1); - RenderBloom(GRAPHICSTHREAD_MISC1); - RenderComposition2(rtMain, GRAPHICSTHREAD_MISC1); + RenderComposition(rtMain, rtMain, GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); })); @@ -189,15 +180,12 @@ void ForwardRenderableComponent::setPreferredThreadingCount(unsigned short value { wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC1); RenderSecondaryScene(rtMain, rtMain, GRAPHICSTHREAD_MISC1); - RenderLightShafts(rtMain, GRAPHICSTHREAD_MISC1); - RenderComposition1(rtMain, GRAPHICSTHREAD_MISC1); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC1); })); workerThreads.push_back(new wiTaskThread([&] { wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTexture(), rtLinearDepth.GetTexture(), GRAPHICSTHREAD_MISC2); - RenderBloom(GRAPHICSTHREAD_MISC2); - RenderComposition2(rtMain, GRAPHICSTHREAD_MISC2); + RenderComposition(rtMain, rtMain, GRAPHICSTHREAD_MISC2); wiRenderer::GetDevice()->FinishCommandList(GRAPHICSTHREAD_MISC2); })); diff --git a/WickedEngine/Renderable3DComponent.cpp b/WickedEngine/Renderable3DComponent.cpp index e6b321aa2..2b3ee3347 100644 --- a/WickedEngine/Renderable3DComponent.cpp +++ b/WickedEngine/Renderable3DComponent.cpp @@ -87,20 +87,14 @@ void Renderable3DComponent::Initialize() rtSceneCopy.Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() , false, FORMAT_R16G16B16A16_FLOAT,1,getMSAASampleCount()); - rtVolumeLight.Initialize( - wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() - , false, FORMAT_R8G8B8A8_UNORM, 1, getMSAASampleCount()); rtReflection.Initialize( (UINT)(wiRenderer::GetDevice()->GetScreenWidth() * getReflectionQuality()) , (UINT)(wiRenderer::GetDevice()->GetScreenHeight() * getReflectionQuality()) , true, FORMAT_R16G16B16A16_FLOAT); rtFinal[0].Initialize( - wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() - , false, FORMAT_R16G16B16A16_FLOAT); - rtFinal[1].Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() , false); - rtFinal[2].Initialize( + rtFinal[1].Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() , false,FORMAT_R8G8B8A8_UNORM,1,getMSAASampleCount()); @@ -249,6 +243,24 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende return; } + if (getLightShaftsEnabled() && XMVectorGetX(XMVector3Dot(wiRenderer::GetSunPosition(), wiRenderer::getCamera()->GetAt())) > 0) + { + wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID); + rtSun[0].Activate(threadID, mainRT.depth); { + wiRenderer::DrawSun(threadID); + } + + rtSun[1].Activate(threadID); { + wiImageEffects fxs = fx; + fxs.blendFlag = BLENDMODE_ADDITIVE; + XMVECTOR sunPos = XMVector3Project(wiRenderer::GetSunPosition() * 100000, 0, 0, (float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 0.1f, 1.0f, wiRenderer::getCamera()->GetProjection(), wiRenderer::getCamera()->GetView(), XMMatrixIdentity()); + { + XMStoreFloat2(&fxs.sunPos, sunPos); + wiImage::Draw(rtSun[0].GetTexture(), fxs, threadID); + } + } + } + if (getLensFlareEnabled()) { rtLensFlare.Activate(threadID); @@ -256,13 +268,6 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende wiRenderer::DrawLensFlares(threadID); } - if (getVolumeLightsEnabled()) - { - wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID); - rtVolumeLight.Activate(threadID, mainRT.depth); - wiRenderer::DrawVolumeLights(wiRenderer::getCamera(), threadID); - } - if (getEmittedParticlesEnabled()) { rtParticle.Activate(threadID, 0, 0, 0, 0); //OFFSCREEN RENDER ALPHAPARTICLES @@ -280,12 +285,38 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende fx.blendFlag = BLENDMODE_OPAQUE; fx.presentFullScreen = true; wiImage::Draw(shadedSceneRT.GetTexture(), fx, threadID); + if (getVolumeLightsEnabled()) + { + // first draw light volumes to refraction target + wiRenderer::DrawVolumeLights(wiRenderer::getCamera(), threadID); + } } wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID); shadedSceneRT.Set(threadID, mainRT.depth); { RenderTransparentScene(rtSceneCopy, threadID); wiRenderer::DrawTrails(threadID, rtSceneCopy.GetTexture()); + if (getVolumeLightsEnabled()) + { + // second draw volume lights on top of transparent scene + wiRenderer::DrawVolumeLights(wiRenderer::getCamera(), threadID); + } + fx.presentFullScreen = true; + fx.blendFlag = BLENDMODE_ALPHA; + if (getEmittedParticlesEnabled()) { + wiImage::Draw(rtParticle.GetTexture(), fx, threadID); + } + + fx.blendFlag = BLENDMODE_ADDITIVE; + if (getEmittedParticlesEnabled()) { + wiImage::Draw(rtParticleAdditive.GetTexture(), fx, threadID); + } + if (getLightShaftsEnabled()) { + wiImage::Draw(rtSun.back().GetTexture(), fx, threadID); + } + if (getLensFlareEnabled()) { + wiImage::Draw(rtLensFlare.GetTexture(), fx, threadID); + } } } void Renderable3DComponent::RenderTransparentScene(wiRenderTarget& refractionRT, GRAPHICSTHREAD threadID) @@ -293,7 +324,7 @@ void Renderable3DComponent::RenderTransparentScene(wiRenderTarget& refractionRT, wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), SHADERTYPE_FORWARD, refractionRT.GetTexture(), rtReflection.GetTexture() , rtWaterRipple.GetTexture(), threadID, false); } -void Renderable3DComponent::RenderBloom(GRAPHICSTHREAD threadID) +void Renderable3DComponent::RenderComposition(wiRenderTarget& shadedSceneRT, wiRenderTarget& mainRT, GRAPHICSTHREAD threadID) { if (getStereogramEnabled()) { @@ -301,136 +332,70 @@ void Renderable3DComponent::RenderBloom(GRAPHICSTHREAD threadID) return; } - wiImageEffects fx((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight()); - rtBloom[0].Activate(threadID); + if (getBloomEnabled()) { - fx.bloom.separate = true; - fx.bloom.saturation = getBloomSaturation(); - fx.bloom.threshold = getBloomThreshold(); - fx.blendFlag = BLENDMODE_OPAQUE; - fx.sampleFlag = SAMPLEMODE_CLAMP; - wiImage::Draw(rtFinal[0].GetTexture(), fx, threadID); - } - - - rtBloom[1].Activate(threadID); //horizontal - { - wiRenderer::GetDevice()->GenerateMips(rtBloom[0].GetTexture(), threadID); - //wiRenderer::GetDevice()->GenerateMips(rtBloom[0].shaderResource[0], threadID); - fx.mipLevel = 5.32f; - fx.blur = getBloomStrength(); - fx.blurDir = 0; - fx.blendFlag = BLENDMODE_OPAQUE; - wiImage::Draw(rtBloom[0].GetTexture(), fx, threadID); - } - rtBloom[2].Activate(threadID); //vertical - { - fx.blur = getBloomStrength(); - fx.blurDir = 1; - fx.blendFlag = BLENDMODE_OPAQUE; - wiImage::Draw(rtBloom[1].GetTexture(), fx, threadID); - } -} -void Renderable3DComponent::RenderLightShafts(wiRenderTarget& mainRT, GRAPHICSTHREAD threadID) -{ - if (getStereogramEnabled()) - { - // We don't need the following for stereograms... - return; - } - - if (!getLightShaftsEnabled()) - { - return; - } - - if (XMVectorGetX(XMVector3Dot(wiRenderer::GetSunPosition(), wiRenderer::getCamera()->GetAt())) < 0) - { - return; - } - - wiImageEffects fx((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight()); - - wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, TEXSLOT_ONDEMAND_COUNT, threadID); - rtSun[0].Activate(threadID, mainRT.depth); { - wiRenderer::DrawSun(threadID); - } - - rtSun[1].Activate(threadID); { - wiImageEffects fxs = fx; - fxs.blendFlag = BLENDMODE_ADDITIVE; - XMVECTOR sunPos = XMVector3Project(wiRenderer::GetSunPosition() * 100000, 0, 0, (float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 0.1f, 1.0f, wiRenderer::getCamera()->GetProjection(), wiRenderer::getCamera()->GetView(), XMMatrixIdentity()); + wiRenderer::GetDevice()->EventBegin(L"Bloom", threadID); + fx.process.clear(); + fx.presentFullScreen = false; + rtBloom[0].Activate(threadID); // separate bright parts { - XMStoreFloat2(&fxs.sunPos, sunPos); - wiImage::Draw(rtSun[0].GetTexture(), fxs, threadID); + fx.bloom.separate = true; + fx.bloom.saturation = getBloomSaturation(); + fx.bloom.threshold = getBloomThreshold(); + fx.blendFlag = BLENDMODE_OPAQUE; + fx.sampleFlag = SAMPLEMODE_CLAMP; + wiImage::Draw(shadedSceneRT.GetTexture(), fx, threadID); } - } -} -void Renderable3DComponent::RenderComposition1(wiRenderTarget& shadedSceneRT, GRAPHICSTHREAD threadID) -{ - if (getStereogramEnabled()) - { - // We don't need the following for stereograms... - return; - } - wiImageEffects fx((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight()); - fx.presentFullScreen = true; + rtBloom[1].Activate(threadID); //horizontal + { + wiRenderer::GetDevice()->GenerateMips(rtBloom[0].GetTexture(), threadID); + fx.mipLevel = 5.32f; + fx.blur = getBloomStrength(); + fx.blurDir = 0; + fx.blendFlag = BLENDMODE_OPAQUE; + wiImage::Draw(rtBloom[0].GetTexture(), fx, threadID); + } + rtBloom[2].Activate(threadID); //vertical + { + fx.blur = getBloomStrength(); + fx.blurDir = 1; + fx.blendFlag = BLENDMODE_OPAQUE; + wiImage::Draw(rtBloom[1].GetTexture(), fx, threadID); + } + fx.bloom.clear(); + fx.blur = 0; + fx.blurDir = 0; - rtFinal[0].Activate(threadID); - - fx.blendFlag = BLENDMODE_OPAQUE; - wiImage::Draw(shadedSceneRT.GetTexture(), fx, threadID); - - - fx.blendFlag = BLENDMODE_ALPHA; - if (getEmittedParticlesEnabled()){ - wiImage::Draw(rtParticle.GetTexture(), fx, threadID); + shadedSceneRT.Set(threadID); { // add to the scene + fx.blendFlag = BLENDMODE_ADDITIVE; + fx.presentFullScreen = true; + fx.process.clear(); + wiImage::Draw(rtBloom.back().GetTexture(), fx, threadID); + fx.presentFullScreen = false; + } + wiRenderer::GetDevice()->EventEnd(); } - fx.blendFlag = BLENDMODE_ADDITIVE; - if (getVolumeLightsEnabled()){ - wiImage::Draw(rtVolumeLight.GetTexture(), fx, threadID); - } - if (getEmittedParticlesEnabled()){ - wiImage::Draw(rtParticleAdditive.GetTexture(), fx, threadID); - } - if (getLightShaftsEnabled()){ - wiImage::Draw(rtSun.back().GetTexture(), fx, threadID); - } - if (getLensFlareEnabled()){ - wiImage::Draw(rtLensFlare.GetTexture(), fx, threadID); - } -} -void Renderable3DComponent::RenderComposition2(wiRenderTarget& mainRT, GRAPHICSTHREAD threadID) -{ - if (getStereogramEnabled()) - { - // We don't need the following for stereograms... - return; - } - - wiImageEffects fx((float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight()); - if (getMotionBlurEnabled()) { rtMotionBlur.Activate(threadID); fx.process.setMotionBlur(true); fx.blendFlag = BLENDMODE_OPAQUE; fx.presentFullScreen = false; - wiImage::Draw(rtFinal[0].GetTexture(), fx, threadID); + wiImage::Draw(shadedSceneRT.GetTexture(), fx, threadID); fx.process.clear(); } fx.blendFlag = BLENDMODE_OPAQUE; - rtFinal[1].Activate(threadID); + rtFinal[0].Activate(threadID); fx.process.setToneMap(true); if (getEyeAdaptionEnabled()) { - fx.setMaskMap(wiRenderer::GetLuminance(rtFinal[0].GetTexture(), threadID)); + fx.setMaskMap(wiRenderer::GetLuminance(shadedSceneRT.GetTexture(), threadID)); } else { @@ -442,7 +407,7 @@ void Renderable3DComponent::RenderComposition2(wiRenderTarget& mainRT, GRAPHICST } else { - wiImage::Draw(rtFinal[0].GetTexture(), fx, threadID); + wiImage::Draw(shadedSceneRT.GetTexture(), fx, threadID); } fx.process.clear(); @@ -453,7 +418,7 @@ void Renderable3DComponent::RenderComposition2(wiRenderTarget& mainRT, GRAPHICST rtDof[0].Activate(threadID); fx.blur = getDepthOfFieldStrength(); fx.blurDir = 0; - wiImage::Draw(rtFinal[1].GetTexture(), fx, threadID); + wiImage::Draw(rtFinal[0].GetTexture(), fx, threadID); rtDof[1].Activate(threadID); fx.blurDir = 1; @@ -466,28 +431,21 @@ void Renderable3DComponent::RenderComposition2(wiRenderTarget& mainRT, GRAPHICST fx.process.setDOF(getDepthOfFieldFocus()); fx.setMaskMap(rtDof[1].GetTexture()); //fx.setDepthMap(rtLinearDepth.shaderResource.back()); - wiImage::Draw(rtFinal[1].GetTexture(), fx, threadID); + wiImage::Draw(rtFinal[0].GetTexture(), fx, threadID); fx.setMaskMap(nullptr); //fx.setDepthMap(nullptr); fx.process.clear(); } - rtFinal[2].Activate(threadID, mainRT.depth); + rtFinal[1].Activate(threadID, mainRT.depth); fx.process.setFXAA(getFXAAEnabled()); if (getDepthOfFieldEnabled()) wiImage::Draw(rtDof[2].GetTexture(), fx, threadID); else - wiImage::Draw(rtFinal[1].GetTexture(), fx, threadID); + wiImage::Draw(rtFinal[0].GetTexture(), fx, threadID); fx.process.clear(); - if (getBloomEnabled()) - { - fx.blendFlag = BLENDMODE_ADDITIVE; - fx.presentFullScreen = true; - wiImage::Draw(rtBloom.back().GetTexture(), fx, threadID); - } - wiRenderer::DrawDebugGridHelper(wiRenderer::getCamera(), threadID); wiRenderer::DrawDebugEnvProbes(wiRenderer::getCamera(), threadID); wiRenderer::DrawDebugBoneLines(wiRenderer::getCamera(), threadID); @@ -528,7 +486,7 @@ void Renderable3DComponent::RenderColorGradedComposition(){ fx.presentFullScreen = true; } - wiImage::Draw(rtFinal[2].GetTexture(), fx); + wiImage::Draw(rtFinal[1].GetTexture(), fx); } diff --git a/WickedEngine/Renderable3DComponent.h b/WickedEngine/Renderable3DComponent.h index e9c60933c..18d872b9e 100644 --- a/WickedEngine/Renderable3DComponent.h +++ b/WickedEngine/Renderable3DComponent.h @@ -51,15 +51,13 @@ protected: rtReflection , rtSSR , rtMotionBlur - , rtVolumeLight , rtSceneCopy - , rtTransparent , rtWaterRipple , rtLinearDepth , rtParticle , rtParticleAdditive , rtLensFlare - , rtFinal[3] + , rtFinal[2] , rtDof[3] ; vector rtSun, rtBloom, rtSSAO; @@ -73,10 +71,7 @@ protected: virtual void RenderScene(GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE) = 0; virtual void RenderSecondaryScene(wiRenderTarget& mainRT, wiRenderTarget& shadedSceneRT, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE); virtual void RenderTransparentScene(wiRenderTarget& refractionRT, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE); - virtual void RenderBloom(GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE); - virtual void RenderLightShafts(wiRenderTarget& mainRT, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE); - virtual void RenderComposition1(wiRenderTarget& shadedSceneRT, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE); - virtual void RenderComposition2(wiRenderTarget& mainRT, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE); + virtual void RenderComposition(wiRenderTarget& shadedSceneRT, wiRenderTarget& mainRT, GRAPHICSTHREAD threadID = GRAPHICSTHREAD_IMMEDIATE); virtual void RenderColorGradedComposition(); public: inline float getLightShaftQuality(){ return lightShaftQuality; } diff --git a/WickedEngine/bloomSeparatePS.hlsl b/WickedEngine/bloomSeparatePS.hlsl index 346954856..528d5168a 100644 --- a/WickedEngine/bloomSeparatePS.hlsl +++ b/WickedEngine/bloomSeparatePS.hlsl @@ -3,5 +3,5 @@ float4 main(VertexToPixelPostProcess PSIn) : SV_TARGET { - return max(float4(xTexture.SampleLevel(Sampler,PSIn.tex,6).rgb-1,1), 0); + return max(float4(xTexture.SampleLevel(Sampler,PSIn.tex,0).rgb - 1,1), 0); } \ No newline at end of file diff --git a/WickedEngine/volumeLightPS.hlsl b/WickedEngine/volumeLightPS.hlsl index ee613e71f..7551569fb 100644 --- a/WickedEngine/volumeLightPS.hlsl +++ b/WickedEngine/volumeLightPS.hlsl @@ -7,5 +7,5 @@ float4 main(VertexToPixel PSIn) : SV_TARGET { //float4 color = PSIn.col; //color.rgb = applyFog(color.rgb,xHorizon,getFog(getLinearDepth(PSIn.pos2D.z/PSIn.pos2D.w),xFogSEH)); - return PSIn.col; + return max(PSIn.col,0); } \ No newline at end of file diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index c9b18307a..3b541486a 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -7,7 +7,7 @@ namespace wiVersion // minor features, major updates const int minor = 9; // minor bug fixes, alterations, refactors, updates - const int revision = 21; + const int revision = 22; long GetVersion()