mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-15 12:43:50 +00:00
Adjusts the lightbin manager to be a regular bin, and shifts ownership of both lighting targets to the deferred manager. Probes now render ahead of lights to make the additive order jive.
Also reordered the probe targets used so they match lights for consistency.
This commit is contained in:
parent
de894c264f
commit
62a6a6a5f0
9 changed files with 108 additions and 48 deletions
|
|
@ -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);
|
||||
|
||||
mClearGBufferShader = NULL;
|
||||
|
||||
|
|
@ -116,7 +118,8 @@ RenderDeferredMgr::~RenderDeferredMgr()
|
|||
|
||||
mColorTarget.release();
|
||||
mMatInfoTarget.release();
|
||||
mLightMapTarget.release();
|
||||
mDiffuseLightTarget.release();
|
||||
mSpecularLightTarget.release();
|
||||
_unregisterFeatures();
|
||||
SAFE_DELETE( mDeferredMatInstance );
|
||||
}
|
||||
|
|
@ -140,7 +143,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;
|
||||
}
|
||||
|
||||
|
|
@ -187,16 +191,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();
|
||||
_initShaders();
|
||||
|
|
@ -323,8 +339,12 @@ void RenderDeferredMgr::render( SceneRenderState *state )
|
|||
// Tell the superclass we're about to render
|
||||
const bool isRenderingToTarget = _onPreRender(state);
|
||||
|
||||
// Clear all z-buffer, and g-buffer.
|
||||
clearBuffers();
|
||||
// Clear z-buffer and g-buffer.
|
||||
GFX->clear(GFXClearTarget | GFXClearZBuffer | GFXClearStencil, ColorI::ZERO, 1.0f, 0);
|
||||
GFX->clearColorAttachment(0, LinearColorF::ONE);
|
||||
GFX->clearColorAttachment(1, LinearColorF::ZERO);
|
||||
GFX->clearColorAttachment(2, LinearColorF::ZERO);
|
||||
GFX->clearColorAttachment(3, LinearColorF::ZERO);
|
||||
|
||||
// Restore transforms
|
||||
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue