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