Further refactor of render pipeline
This commit is contained in:
@@ -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);
|
||||
}));
|
||||
|
||||
|
||||
@@ -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);
|
||||
}));
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -51,15 +51,13 @@ protected:
|
||||
rtReflection
|
||||
, rtSSR
|
||||
, rtMotionBlur
|
||||
, rtVolumeLight
|
||||
, rtSceneCopy
|
||||
, rtTransparent
|
||||
, rtWaterRipple
|
||||
, rtLinearDepth
|
||||
, rtParticle
|
||||
, rtParticleAdditive
|
||||
, rtLensFlare
|
||||
, rtFinal[3]
|
||||
, rtFinal[2]
|
||||
, rtDof[3]
|
||||
;
|
||||
vector<wiRenderTarget> 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; }
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user