mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-14 04:03:46 +00:00
Implemented registration of probes to avoid rendering all probes when unneeded.
This commit is contained in:
parent
a4e592534e
commit
ecef09525a
5 changed files with 26 additions and 3 deletions
|
|
@ -142,6 +142,8 @@ ReflectionProbe::ReflectionProbe()
|
|||
|
||||
mProbePosOffset = Point3F::Zero;
|
||||
mEditPosOffset = false;
|
||||
|
||||
mProbeInfoIdx = -1;
|
||||
}
|
||||
|
||||
ReflectionProbe::~ReflectionProbe()
|
||||
|
|
@ -461,6 +463,7 @@ void ReflectionProbe::updateProbeParams()
|
|||
if (mProbeInfo == nullptr)
|
||||
{
|
||||
mProbeInfo = new ProbeRenderInst();
|
||||
mProbeInfoIdx = ProbeRenderInst::all.size() - 1;
|
||||
mProbeInfo->mIsEnabled = false;
|
||||
}
|
||||
|
||||
|
|
@ -666,7 +669,7 @@ void ReflectionProbe::prepRenderImage(SceneRenderState *state)
|
|||
mProbeInfo->mScore *= mMax(mAbs(mDot(vect, state->getCameraTransform().getForwardVector())),0.001f);
|
||||
|
||||
//Register
|
||||
//PROBEMGR->registerProbe(mProbeInfo, this);
|
||||
PROBEMGR->registerProbe(mProbeInfoIdx);
|
||||
|
||||
if (ReflectionProbe::smRenderPreviewProbes && gEditingMission && mEditorShapeInst && mPrefilterMap != nullptr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ protected:
|
|||
ProbeRenderInst::ProbeShapeType mProbeShapeType;
|
||||
|
||||
ProbeRenderInst* mProbeInfo;
|
||||
U32 mProbeInfoIdx;
|
||||
|
||||
//Indirect Lighting Contribution stuff
|
||||
IndrectLightingModeType mIndrectLightingModeType;
|
||||
|
|
|
|||
|
|
@ -201,6 +201,15 @@ ProbeRenderInst* ProbeManager::createProbeInfo(ProbeRenderInst* probe /* = NULL
|
|||
return outProbe;
|
||||
}
|
||||
|
||||
void ProbeManager::registerProbe(U32 probeIdx)
|
||||
{
|
||||
//Mostly for consolidation, but also lets us sanity check or prep any other data we need for rendering this in one place at time of flagging for render
|
||||
if (probeIdx >= ProbeRenderInst::all.size())
|
||||
return;
|
||||
|
||||
mRegisteredProbes.push_back_unique(probeIdx);
|
||||
}
|
||||
|
||||
/*void ProbeManager::initLightFields()
|
||||
{
|
||||
ProbeManagerMap &ProbeManagers = _getProbeManagers();
|
||||
|
|
|
|||
|
|
@ -277,6 +277,8 @@ public:
|
|||
SpecialProbeTypesCount
|
||||
};
|
||||
|
||||
Vector<U32> mRegisteredProbes;
|
||||
|
||||
ProbeManager();
|
||||
|
||||
~ProbeManager();
|
||||
|
|
@ -284,6 +286,8 @@ public:
|
|||
///
|
||||
static ProbeRenderInst* createProbeInfo(ProbeRenderInst* light = NULL);
|
||||
|
||||
void registerProbe(U32 probeIdx);
|
||||
|
||||
/// The light manager activation signal.
|
||||
static Signal<void(const char*,bool)> smActivateSignal;
|
||||
|
||||
|
|
|
|||
|
|
@ -198,6 +198,9 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
if (!ProbeRenderInst::all.size())
|
||||
return;
|
||||
|
||||
if (PROBEMGR->mRegisteredProbes.empty())
|
||||
return;
|
||||
|
||||
if (!ProbeManager::smRenderReflectionProbes)
|
||||
return;
|
||||
|
||||
|
|
@ -255,9 +258,9 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
ProbeManager::SkylightMaterialInfo* skylightMat = PROBEMGR->getSkylightMaterial();
|
||||
ProbeManager::ReflectProbeMaterialInfo* reflProbeMat = PROBEMGR->getReflectProbeMaterial();
|
||||
|
||||
for (U32 i = 0; i < ProbeRenderInst::all.size(); i++)
|
||||
for (U32 i = 0; i < PROBEMGR->mRegisteredProbes.size(); i++)
|
||||
{
|
||||
ProbeRenderInst* curEntry = ProbeRenderInst::all[i];
|
||||
ProbeRenderInst* curEntry = ProbeRenderInst::all[PROBEMGR->mRegisteredProbes[i]];
|
||||
|
||||
if (!curEntry->mIsEnabled)
|
||||
continue;
|
||||
|
|
@ -321,6 +324,9 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
}
|
||||
}
|
||||
|
||||
//And clean us up
|
||||
PROBEMGR->mRegisteredProbes.clear();
|
||||
|
||||
probeLightingTargetRef->resolve();
|
||||
GFX->popActiveRenderTarget();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue