76 lines
2.7 KiB
C++
76 lines
2.7 KiB
C++
#include "TiledForwardRenderableComponent.h"
|
|
#include "wiRenderer.h"
|
|
#include "wiImage.h"
|
|
#include "wiImageEffects.h"
|
|
#include "wiHelper.h"
|
|
#include "wiProfiler.h"
|
|
|
|
using namespace wiGraphicsTypes;
|
|
|
|
TiledForwardRenderableComponent::TiledForwardRenderableComponent()
|
|
{
|
|
ForwardRenderableComponent::setProperties();
|
|
setShadowsEnabled(true);
|
|
setHairParticleAlphaCompositionEnabled(true);
|
|
//setMSAASampleCount(8);
|
|
}
|
|
TiledForwardRenderableComponent::~TiledForwardRenderableComponent()
|
|
{
|
|
}
|
|
|
|
void TiledForwardRenderableComponent::RenderScene(GRAPHICSTHREAD threadID)
|
|
{
|
|
|
|
wiRenderer::UpdateCameraCB(wiRenderer::getCamera(), threadID);
|
|
|
|
wiProfiler::GetInstance().BeginRange("Z-Prepass", wiProfiler::DOMAIN_GPU, threadID);
|
|
rtMain.Activate(threadID, 0, 0, 0, 0, true); // depth prepass
|
|
{
|
|
if (getHairParticleAlphaCompositionEnabled())
|
|
{
|
|
wiRenderer::SetAlphaRef(0.25f, threadID);
|
|
}
|
|
wiRenderer::DrawWorld(wiRenderer::getCamera(), getTessellationEnabled(), threadID, SHADERTYPE_ALPHATESTONLY, nullptr, true, true);
|
|
}
|
|
wiProfiler::GetInstance().EndRange(threadID);
|
|
|
|
dtDepthCopy.CopyFrom(*rtMain.depth, threadID);
|
|
|
|
rtLinearDepth.Activate(threadID); {
|
|
wiImageEffects fx;
|
|
fx.blendFlag = BLENDMODE_OPAQUE;
|
|
fx.sampleFlag = SAMPLEMODE_CLAMP;
|
|
fx.quality = QUALITY_NEAREST;
|
|
fx.process.setLinDepth(true);
|
|
wiImage::Draw(dtDepthCopy.GetTextureResolvedMSAA(threadID), fx, threadID);
|
|
}
|
|
rtLinearDepth.Deactivate(threadID);
|
|
|
|
wiRenderer::UpdateDepthBuffer(dtDepthCopy.GetTextureResolvedMSAA(threadID), rtLinearDepth.GetTexture(), threadID);
|
|
|
|
wiRenderer::ComputeTiledLightCulling(threadID);
|
|
|
|
wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, 1, threadID);
|
|
|
|
wiProfiler::GetInstance().BeginRange("Opaque Scene", wiProfiler::DOMAIN_GPU, threadID);
|
|
rtMain.Set(threadID);
|
|
{
|
|
wiRenderer::DrawWorld(wiRenderer::getCamera(), getTessellationEnabled(), threadID, SHADERTYPE_TILEDFORWARD, rtReflection.GetTexture(), true, true);
|
|
wiRenderer::DrawSky(threadID);
|
|
}
|
|
rtMain.Deactivate(threadID);
|
|
wiRenderer::UpdateGBuffer(rtMain.GetTextureResolvedMSAA(threadID, 0), rtMain.GetTextureResolvedMSAA(threadID, 1), nullptr, nullptr, nullptr, threadID);
|
|
|
|
wiProfiler::GetInstance().EndRange(); // Opaque Scene
|
|
}
|
|
void TiledForwardRenderableComponent::RenderTransparentScene(wiRenderTarget& refractionRT, GRAPHICSTHREAD threadID)
|
|
{
|
|
wiProfiler::GetInstance().BeginRange("Transparent Scene", wiProfiler::DOMAIN_GPU, threadID);
|
|
|
|
wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), SHADERTYPE_TILEDFORWARD, refractionRT.GetTexture(), rtReflection.GetTexture()
|
|
, rtWaterRipple.GetTexture(), threadID, getHairParticleAlphaCompositionEnabled(), true);
|
|
|
|
wiProfiler::GetInstance().EndRange(); // Transparent Scene
|
|
}
|
|
|