mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-18 22:23:48 +00:00
Merge branch 'PBR_Bins_Reordered' of https://github.com/Areloch/Torque3D into PBR_PR
# Conflicts: # Engine/source/gfx/D3D11/gfxD3D11Device.cpp # Engine/source/renderInstance/renderDeferredMgr.h
This commit is contained in:
commit
726c748578
9 changed files with 92 additions and 45 deletions
|
|
@ -952,7 +952,7 @@ void GFXD3D11Device::clear(U32 flags, const LinearColorF& color, F32 z, U32 sten
|
|||
{
|
||||
for (U32 i = 0; i < 5; i++)
|
||||
{
|
||||
if(rtView[i])
|
||||
if (rtView[i])
|
||||
mD3DDeviceContext->ClearRenderTargetView(rtView[i], clearColor);
|
||||
}
|
||||
}
|
||||
|
|
@ -968,7 +968,6 @@ void GFXD3D11Device::clear(U32 flags, const LinearColorF& color, F32 z, U32 sten
|
|||
|
||||
for (U32 i = 0; i < 5; i++)
|
||||
SAFE_RELEASE(rtView[i]);
|
||||
|
||||
SAFE_RELEASE(dsView);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -116,20 +116,19 @@ ConsoleDocClass( AdvancedLightBinManager,
|
|||
AdvancedLightBinManager::AdvancedLightBinManager( AdvancedLightManager *lm /* = NULL */,
|
||||
ShadowMapManager *sm /* = NULL */,
|
||||
GFXFormat lightBufferFormat /* = GFXFormatR8G8B8A8 */ )
|
||||
: RenderTexTargetBinManager( RIT_LightInfo, 1.0f, 1.0f, lightBufferFormat ),
|
||||
: RenderBinManager( RIT_LightInfo, 1.0f, 1.0f ),
|
||||
mNumLightsCulled(0),
|
||||
mLightManager(lm),
|
||||
mShadowManager(sm),
|
||||
mConditioner(NULL)
|
||||
{
|
||||
// Create an RGB conditioner
|
||||
mConditioner = new AdvancedLightBufferConditioner( getTargetFormat(),
|
||||
AdvancedLightBufferConditioner::RGB );
|
||||
mNamedTarget.setConditioner( mConditioner );
|
||||
mNamedTarget.registerWithName( smBufferName );
|
||||
NamedTexTarget* specLightTarg = NamedTexTarget::find(RenderDeferredMgr::SpecularLightBufferName);
|
||||
|
||||
// We want a full-resolution buffer
|
||||
mTargetSizeType = RenderTexTargetBinManager::WindowSize;
|
||||
mConditioner = new AdvancedLightBufferConditioner(lightBufferFormat,
|
||||
AdvancedLightBufferConditioner::RGB );
|
||||
|
||||
specLightTarg->setConditioner( mConditioner );
|
||||
|
||||
mMRTLightmapsDuringDeferred = true;
|
||||
|
||||
|
|
@ -173,17 +172,18 @@ void AdvancedLightBinManager::consoleInit()
|
|||
|
||||
bool AdvancedLightBinManager::setTargetSize(const Point2I &newTargetSize)
|
||||
{
|
||||
bool ret = Parent::setTargetSize( newTargetSize );
|
||||
/*bool ret = Parent::setTargetSize( newTargetSize );
|
||||
|
||||
// We require the viewport to match the default.
|
||||
mNamedTarget.setViewport( GFX->getViewport() );
|
||||
|
||||
return ret;
|
||||
return ret;*/
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AdvancedLightBinManager::_updateTargets()
|
||||
{
|
||||
PROFILE_SCOPE(AdvancedLightBinManager_updateTargets);
|
||||
/* PROFILE_SCOPE(AdvancedLightBinManager_updateTargets);
|
||||
|
||||
bool ret = Parent::_updateTargets();
|
||||
|
||||
|
|
@ -198,7 +198,8 @@ bool AdvancedLightBinManager::_updateTargets()
|
|||
|
||||
GFX->finalizeReset();
|
||||
|
||||
return ret;
|
||||
return ret;*/
|
||||
return true;
|
||||
}
|
||||
|
||||
void AdvancedLightBinManager::addLight( LightInfo *light )
|
||||
|
|
@ -270,10 +271,36 @@ void AdvancedLightBinManager::render( SceneRenderState *state )
|
|||
GFXDEBUGEVENT_SCOPE( AdvancedLightBinManager_Render, ColorI::RED );
|
||||
|
||||
// Tell the superclass we're about to render
|
||||
if ( !_onPreRender( state ) )
|
||||
//if ( !_onPreRender( state ) )
|
||||
// return;
|
||||
|
||||
//GFX->clear(GFXClearTarget, ColorI(0, 0, 0, 0), 1.0f, 0);
|
||||
|
||||
NamedTexTargetRef diffuseLightingTarget = NamedTexTarget::find("diffuseLighting");
|
||||
|
||||
if (diffuseLightingTarget.isNull())
|
||||
return;
|
||||
|
||||
GFX->clear(GFXClearTarget, ColorI(0, 0, 0, 0), 1.0f, 0);
|
||||
NamedTexTargetRef specularLightingTarget = NamedTexTarget::find("specularLighting");
|
||||
|
||||
if (specularLightingTarget.isNull())
|
||||
return;
|
||||
|
||||
GFXTextureTargetRef lightingTargetRef = GFX->allocRenderToTextureTarget();
|
||||
|
||||
if (lightingTargetRef.isNull())
|
||||
return;
|
||||
|
||||
//Do a quick pass to update our probes if they're dirty
|
||||
PROBEMGR->updateDirtyProbes();
|
||||
|
||||
lightingTargetRef->attachTexture(GFXTextureTarget::Color0, specularLightingTarget->getTexture());
|
||||
lightingTargetRef->attachTexture(GFXTextureTarget::Color1, diffuseLightingTarget->getTexture());
|
||||
|
||||
GFX->pushActiveRenderTarget();
|
||||
GFX->setActiveRenderTarget(lightingTargetRef);
|
||||
|
||||
GFX->setViewport(specularLightingTarget->getViewport());
|
||||
|
||||
// Restore transforms
|
||||
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
|
||||
|
|
@ -387,7 +414,9 @@ void AdvancedLightBinManager::render( SceneRenderState *state )
|
|||
getRenderSignal().trigger(state, this);
|
||||
|
||||
// Finish up the rendering
|
||||
_onPostRender();
|
||||
//_onPostRender();
|
||||
lightingTargetRef->resolve();
|
||||
GFX->popActiveRenderTarget();
|
||||
}
|
||||
|
||||
AdvancedLightBinManager::LightMaterialInfo* AdvancedLightBinManager::_getLightMaterial( LightInfo::Type lightType,
|
||||
|
|
|
|||
|
|
@ -78,9 +78,9 @@ public:
|
|||
bool mSpecialLight;
|
||||
};
|
||||
|
||||
class AdvancedLightBinManager : public RenderTexTargetBinManager
|
||||
class AdvancedLightBinManager : public RenderBinManager
|
||||
{
|
||||
typedef RenderTexTargetBinManager Parent;
|
||||
typedef RenderBinManager Parent;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
|||
|
|
@ -115,22 +115,22 @@ void AdvancedLightManager::activate( SceneManager *sceneManager )
|
|||
true,
|
||||
false );
|
||||
|
||||
mLightBinManager = new AdvancedLightBinManager( this, SHADOWMGR, blendTargetFormat );
|
||||
mLightBinManager->assignName( "AL_LightBinMgr" );
|
||||
|
||||
// First look for the deferred bin...
|
||||
RenderDeferredMgr *deferredBin = _findDeferredRenderBin();
|
||||
|
||||
// If we didn't find the deferred bin then add one.
|
||||
if ( !deferredBin )
|
||||
if (!deferredBin)
|
||||
{
|
||||
deferredBin = new RenderDeferredMgr( true, blendTargetFormat );
|
||||
deferredBin->assignName( "AL_DeferredBin" );
|
||||
deferredBin = new RenderDeferredMgr(true, blendTargetFormat);
|
||||
deferredBin->assignName("AL_DeferredBin");
|
||||
deferredBin->registerObject();
|
||||
getSceneManager()->getDefaultRenderPass()->addManager( deferredBin );
|
||||
getSceneManager()->getDefaultRenderPass()->addManager(deferredBin);
|
||||
mDeferredRenderBin = deferredBin;
|
||||
}
|
||||
|
||||
mLightBinManager = new AdvancedLightBinManager( this, SHADOWMGR, blendTargetFormat );
|
||||
mLightBinManager->assignName( "AL_LightBinMgr" );
|
||||
|
||||
// Tell the material manager that deferred is enabled.
|
||||
MATMGR->setDeferredEnabled( true );
|
||||
|
||||
|
|
@ -138,7 +138,7 @@ void AdvancedLightManager::activate( SceneManager *sceneManager )
|
|||
mLightBinManager->setRenderOrder( deferredBin->getRenderOrder() + 0.01f );
|
||||
getSceneManager()->getDefaultRenderPass()->addManager( mLightBinManager );
|
||||
|
||||
AdvancedLightingFeatures::registerFeatures(mDeferredRenderBin->getTargetFormat(), mLightBinManager->getTargetFormat());
|
||||
AdvancedLightingFeatures::registerFeatures(mDeferredRenderBin->getTargetFormat(), blendTargetFormat);
|
||||
|
||||
// Last thing... let everyone know we're active.
|
||||
smActivateSignal.trigger( getId(), true );
|
||||
|
|
|
|||
|
|
@ -56,7 +56,8 @@ const String RenderDeferredMgr::BufferName("deferred");
|
|||
const RenderInstType RenderDeferredMgr::RIT_Deferred("Deferred");
|
||||
const String RenderDeferredMgr::ColorBufferName("color");
|
||||
const String RenderDeferredMgr::MatInfoBufferName("matinfo");
|
||||
const String RenderDeferredMgr::LightMapBufferName("diffuseLighting");
|
||||
const String RenderDeferredMgr::DiffuseLightBufferName("diffuseLighting");
|
||||
const String RenderDeferredMgr::SpecularLightBufferName("specularLighting");
|
||||
|
||||
IMPLEMENT_CONOBJECT(RenderDeferredMgr);
|
||||
|
||||
|
|
@ -103,7 +104,8 @@ RenderDeferredMgr::RenderDeferredMgr( bool gatherDepth,
|
|||
mNamedTarget.registerWithName( BufferName );
|
||||
mColorTarget.registerWithName( ColorBufferName );
|
||||
mMatInfoTarget.registerWithName( MatInfoBufferName );
|
||||
mLightMapTarget.registerWithName( LightMapBufferName );
|
||||
mDiffuseLightTarget.registerWithName( DiffuseLightBufferName );
|
||||
mSpecularLightTarget.registerWithName(SpecularLightBufferName);
|
||||
|
||||
_registerFeatures();
|
||||
}
|
||||
|
|
@ -114,7 +116,8 @@ RenderDeferredMgr::~RenderDeferredMgr()
|
|||
|
||||
mColorTarget.release();
|
||||
mMatInfoTarget.release();
|
||||
mLightMapTarget.release();
|
||||
mDiffuseLightTarget.release();
|
||||
mSpecularLightTarget.release();
|
||||
_unregisterFeatures();
|
||||
SAFE_DELETE( mDeferredMatInstance );
|
||||
}
|
||||
|
|
@ -138,7 +141,8 @@ bool RenderDeferredMgr::setTargetSize(const Point2I &newTargetSize)
|
|||
mNamedTarget.setViewport( GFX->getViewport() );
|
||||
mColorTarget.setViewport( GFX->getViewport() );
|
||||
mMatInfoTarget.setViewport( GFX->getViewport() );
|
||||
mLightMapTarget.setViewport( GFX->getViewport() );
|
||||
mDiffuseLightTarget.setViewport( GFX->getViewport() );
|
||||
mSpecularLightTarget.setViewport(GFX->getViewport());
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -185,16 +189,28 @@ bool RenderDeferredMgr::_updateTargets()
|
|||
mTargetChain[i]->attachTexture(GFXTextureTarget::Color2, mMatInfoTarget.getTexture());
|
||||
}
|
||||
|
||||
if (mLightMapTex.getFormat() != GFXFormatR16G16B16A16F || mLightMapTex.getWidthHeight() != mTargetSize || GFX->recentlyReset())
|
||||
if (mDiffuseLightTex.getFormat() != GFXFormatR16G16B16A16F || mDiffuseLightTex.getWidthHeight() != mTargetSize || GFX->recentlyReset())
|
||||
{
|
||||
mLightMapTarget.release();
|
||||
mLightMapTex.set(mTargetSize.x, mTargetSize.y, GFXFormatR16G16B16A16F,
|
||||
mDiffuseLightTarget.release();
|
||||
mDiffuseLightTex.set(mTargetSize.x, mTargetSize.y, GFXFormatR16G16B16A16F,
|
||||
&GFXRenderTargetProfile, avar("%s() - (line %d)", __FUNCTION__, __LINE__),
|
||||
1, GFXTextureManager::AA_MATCH_BACKBUFFER);
|
||||
mLightMapTarget.setTexture(mLightMapTex);
|
||||
mDiffuseLightTarget.setTexture(mDiffuseLightTex);
|
||||
|
||||
for (U32 i = 0; i < mTargetChainLength; i++)
|
||||
mTargetChain[i]->attachTexture(GFXTextureTarget::Color3, mLightMapTarget.getTexture());
|
||||
mTargetChain[i]->attachTexture(GFXTextureTarget::Color3, mDiffuseLightTarget.getTexture());
|
||||
}
|
||||
|
||||
if (mSpecularLightTex.getFormat() != GFXFormatR16G16B16A16F || mSpecularLightTex.getWidthHeight() != mTargetSize || GFX->recentlyReset())
|
||||
{
|
||||
mSpecularLightTarget.release();
|
||||
mSpecularLightTex.set(mTargetSize.x, mTargetSize.y, GFXFormatR16G16B16A16F,
|
||||
&GFXRenderTargetProfile, avar("%s() - (line %d)", __FUNCTION__, __LINE__),
|
||||
1, GFXTextureManager::AA_MATCH_BACKBUFFER);
|
||||
mSpecularLightTarget.setTexture(mSpecularLightTex);
|
||||
|
||||
for (U32 i = 0; i < mTargetChainLength; i++)
|
||||
mTargetChain[i]->attachTexture(GFXTextureTarget::Color4, mSpecularLightTarget.getTexture());
|
||||
}
|
||||
GFX->finalizeReset();
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@ public:
|
|||
// andremwac: Deferred Rendering
|
||||
static const String ColorBufferName;
|
||||
static const String MatInfoBufferName;
|
||||
static const String LightMapBufferName;
|
||||
static const String DiffuseLightBufferName;
|
||||
static const String SpecularLightBufferName;
|
||||
|
||||
// Generic Deferred Render Instance Type
|
||||
static const RenderInstType RIT_Deferred;
|
||||
|
|
@ -105,11 +106,13 @@ protected:
|
|||
// Deferred Shading
|
||||
NamedTexTarget mColorTarget;
|
||||
NamedTexTarget mMatInfoTarget;
|
||||
NamedTexTarget mLightMapTarget;
|
||||
NamedTexTarget mDiffuseLightTarget;
|
||||
NamedTexTarget mSpecularLightTarget;
|
||||
GFXTexHandle mColorTex;
|
||||
GFXTexHandle mMatInfoTex;
|
||||
GFXTexHandle mLightMapTex;
|
||||
|
||||
GFXTexHandle mDiffuseLightTex;
|
||||
GFXTexHandle mSpecularLightTex;
|
||||
GFXShaderConstBufferRef mShaderConsts;
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -227,13 +227,13 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
//Do a quick pass to update our probes if they're dirty
|
||||
PROBEMGR->updateDirtyProbes();
|
||||
|
||||
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color0, diffuseLightingTarget->getTexture());
|
||||
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color1, specularLightingTarget->getTexture());
|
||||
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color0, specularLightingTarget->getTexture());
|
||||
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color1, diffuseLightingTarget->getTexture());
|
||||
|
||||
GFX->pushActiveRenderTarget();
|
||||
GFX->setActiveRenderTarget(probeLightingTargetRef);
|
||||
|
||||
GFX->setViewport(diffuseLightingTarget->getViewport());
|
||||
GFX->setViewport(specularLightingTarget->getViewport());
|
||||
//GFX->setViewport(specularLightingTarget->getViewport());
|
||||
|
||||
// Restore transforms
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ function initRenderManager()
|
|||
// meshes... but that causes issues in reflections.
|
||||
DiffuseRenderPassManager.addManager( new RenderObjectMgr(SkyBin) { bintype = "Sky"; renderOrder = 0.015; processAddOrder = 0.015; } );
|
||||
|
||||
DiffuseRenderPassManager.addManager( new RenderProbeMgr(ProbeBin) { bintype = "Probes"; renderOrder = 0.02; processAddOrder = 0.02; } );
|
||||
DiffuseRenderPassManager.addManager( new RenderProbeMgr(ProbeBin) { bintype = "Probes"; renderOrder = 0.019; processAddOrder = 0.02; } );
|
||||
//DiffuseRenderPassManager.addManager( new RenderVistaMgr() { bintype = "Vista"; renderOrder = 0.15; processAddOrder = 0.15; } );
|
||||
|
||||
DiffuseRenderPassManager.addManager( new RenderObjectMgr(BeginBin) { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } );
|
||||
|
|
|
|||
|
|
@ -98,8 +98,8 @@ float3 iblBoxSpecular(float3 normal,
|
|||
|
||||
struct PS_OUTPUT
|
||||
{
|
||||
float4 diffuse: TORQUE_TARGET0;
|
||||
float4 spec: TORQUE_TARGET1;
|
||||
float4 diffuse: TORQUE_TARGET1;
|
||||
float4 spec: TORQUE_TARGET0;
|
||||
};
|
||||
|
||||
float defineSphereSpaceInfluence(float3 centroidPosVS, float rad, float2 atten, float3 surfPosVS, float3 norm)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue