mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Ongoing PostFX org rework.
This commit is contained in:
parent
b221b312d2
commit
64db2b1d15
|
|
@ -1434,6 +1434,11 @@ void PostEffect::_checkRequirements()
|
|||
// properly, we can find all the input textures,
|
||||
// and its formats are supported.
|
||||
|
||||
if (mShaderName == String("PFX_ReflectionProbeArray") || getName() == StringTable->insert("reflectionProbeArrayPostFX"))
|
||||
{
|
||||
bool derp = true;
|
||||
}
|
||||
|
||||
mIsValid = false;
|
||||
mUpdateShader = false;
|
||||
mShader = NULL;
|
||||
|
|
@ -1473,9 +1478,11 @@ void PostEffect::_checkRequirements()
|
|||
if ( texFilename.isNotEmpty() && texFilename[0] == '#' )
|
||||
{
|
||||
NamedTexTarget *namedTarget = NamedTexTarget::find( texFilename.c_str() + 1 );
|
||||
if ( !namedTarget )
|
||||
if (!namedTarget)
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
// Grab the macros for shader initialization.
|
||||
namedTarget->getShaderMacros( ¯os );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -353,6 +353,10 @@ public:
|
|||
bool isOneFrameOnly() { return mOneFrameOnly; }
|
||||
|
||||
F32 getAspectRatio() const;
|
||||
|
||||
GFXShaderRef getShader() { return mShader; }
|
||||
Vector<GFXShaderMacro>* getShaderMacros() { return &mShaderMacros; }
|
||||
GFXShaderConstBufferRef getShaderConstBuffer() { return mShaderConsts; }
|
||||
|
||||
|
||||
enum PostEffectRequirements
|
||||
|
|
|
|||
|
|
@ -243,7 +243,6 @@ bool ReflectProbeMatInstance::setupPass(SceneRenderState *state, const SceneData
|
|||
RenderProbeMgr::RenderProbeMgr()
|
||||
: RenderBinManager(RenderPassManager::RIT_Probes, 1.0f, 1.0f),
|
||||
mReflectProbeMaterial(nullptr),
|
||||
mSceneManager(nullptr),
|
||||
mLastShader(nullptr),
|
||||
mLastConstants(nullptr)
|
||||
{
|
||||
|
|
@ -276,6 +275,12 @@ RenderProbeMgr::RenderProbeMgr()
|
|||
|
||||
irradMaps.setSize(MAXPROBECOUNT);
|
||||
irradMaps.fill(NULL);
|
||||
|
||||
mEffectiveProbeCount = 0;
|
||||
|
||||
mProbeArrayEffect = nullptr;
|
||||
|
||||
numProbesSC = nullptr;
|
||||
}
|
||||
|
||||
RenderProbeMgr::RenderProbeMgr(RenderInstType riType, F32 renderOrder, F32 processAddOrder)
|
||||
|
|
@ -320,6 +325,21 @@ void RenderProbeMgr::registerProbe(U32 probeIdx)
|
|||
return;
|
||||
|
||||
mRegisteredProbes.push_back_unique(probeIdx);
|
||||
|
||||
//rebuild our probe data
|
||||
//_setupStaticParameters();
|
||||
}
|
||||
|
||||
void RenderProbeMgr::unregisterProbe(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.remove(probeIdx);
|
||||
|
||||
//rebuild our probe data
|
||||
//_setupStaticParameters();
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -327,8 +347,12 @@ void RenderProbeMgr::registerProbe(U32 probeIdx)
|
|||
PostEffect* RenderProbeMgr::getProbeArrayEffect()
|
||||
{
|
||||
if (!mProbeArrayEffect)
|
||||
{
|
||||
mProbeArrayEffect = dynamic_cast<PostEffect*>(Sim::findObject("reflectionProbeArrayPostFX"));
|
||||
|
||||
if (!mProbeArrayEffect)
|
||||
return nullptr;
|
||||
}
|
||||
return mProbeArrayEffect;
|
||||
}
|
||||
|
||||
|
|
@ -339,7 +363,115 @@ PostEffect* RenderProbeMgr::getProbeArrayEffect()
|
|||
|
||||
void RenderProbeMgr::_setupStaticParameters()
|
||||
{
|
||||
mLastShader = mProbeArrayEffect->getShader();
|
||||
|
||||
if (mLastShader == nullptr)
|
||||
return;
|
||||
|
||||
mLastConstants = mLastShader->allocConstBuffer();
|
||||
|
||||
numProbesSC = mLastShader->getShaderConstHandle("$numProbes");
|
||||
|
||||
probePositionSC = mLastShader->getShaderConstHandle("$inProbePosArray");
|
||||
probeWorldToObjSC = mLastShader->getShaderConstHandle("$worldToObjArray");
|
||||
probeBBMinSC = mLastShader->getShaderConstHandle("$bbMinArray");
|
||||
probeBBMaxSC = mLastShader->getShaderConstHandle("$bbMaxArray");
|
||||
probeUseSphereModeSC = mLastShader->getShaderConstHandle("$useSphereMode");
|
||||
probeRadiusSC = mLastShader->getShaderConstHandle("$radius");
|
||||
probeAttenuationSC = mLastShader->getShaderConstHandle("$attenuation");
|
||||
|
||||
//Array rendering
|
||||
U32 probeCount = ProbeRenderInst::all.size();
|
||||
|
||||
mEffectiveProbeCount = 0;
|
||||
|
||||
for (U32 i = 0; i < probeCount; i++)
|
||||
{
|
||||
if (mEffectiveProbeCount >= MAXPROBECOUNT)
|
||||
break;
|
||||
|
||||
ProbeRenderInst* curEntry = ProbeRenderInst::all[i];
|
||||
if (!curEntry->mIsEnabled)
|
||||
continue;
|
||||
|
||||
if (curEntry->mCubemap.isNull() || curEntry->mIrradianceCubemap.isNull())
|
||||
continue;
|
||||
|
||||
if (!curEntry->mCubemap->isInitialised())
|
||||
continue;
|
||||
|
||||
if (curEntry->mIsSkylight)
|
||||
continue;
|
||||
|
||||
//Setup
|
||||
const Point3F &probePos = curEntry->getPosition();
|
||||
probePositions[i] = probePos + curEntry->mProbePosOffset;
|
||||
|
||||
MatrixF trans = curEntry->getTransform();
|
||||
trans.inverse();
|
||||
|
||||
probeWorldToObj[i] = trans;
|
||||
|
||||
probeBBMin[i] = curEntry->mBounds.minExtents;
|
||||
probeBBMax[i] = curEntry->mBounds.maxExtents;
|
||||
|
||||
probeUseSphereMode[i] = curEntry->mProbeShapeType == ProbeRenderInst::Sphere ? 1 : 0;
|
||||
|
||||
probeRadius[i] = curEntry->mRadius;
|
||||
probeAttenuation[i] = 1;
|
||||
|
||||
cubeMaps[i] = curEntry->mCubemap;
|
||||
irradMaps[i] = curEntry->mIrradianceCubemap;
|
||||
|
||||
mEffectiveProbeCount++;
|
||||
}
|
||||
|
||||
if (mEffectiveProbeCount != 0)
|
||||
{
|
||||
mCubemapArray = GFXCubemapArrayHandle(GFX->createCubemapArray());
|
||||
mIrradArray = GFXCubemapArrayHandle(GFX->createCubemapArray());
|
||||
|
||||
mCubemapArray->initStatic(cubeMaps.address(), mEffectiveProbeCount);
|
||||
mIrradArray->initStatic(irradMaps.address(), mEffectiveProbeCount);
|
||||
|
||||
/*NamedTexTarget *deferredTarget = NamedTexTarget::find(RenderDeferredMgr::BufferName);
|
||||
if (deferredTarget)
|
||||
GFX->setTexture(0, deferredTarget->getTexture());
|
||||
else
|
||||
GFX->setTexture(0, NULL);
|
||||
|
||||
NamedTexTarget *colorTarget = NamedTexTarget::find(RenderDeferredMgr::ColorBufferName);
|
||||
if (colorTarget)
|
||||
GFX->setTexture(1, colorTarget->getTexture());
|
||||
else
|
||||
GFX->setTexture(1, NULL);
|
||||
|
||||
NamedTexTarget *matinfoTarget = NamedTexTarget::find(RenderDeferredMgr::MatInfoBufferName);
|
||||
if (matinfoTarget)
|
||||
GFX->setTexture(2, matinfoTarget->getTexture());
|
||||
else
|
||||
GFX->setTexture(2, NULL);
|
||||
|
||||
if (mBrdfTexture)
|
||||
{
|
||||
GFX->setTexture(3, mBrdfTexture);
|
||||
}
|
||||
else
|
||||
GFX->setTexture(3, NULL);*/
|
||||
|
||||
//GFX->setCubeArrayTexture(4, mCubemapArray);
|
||||
//GFX->setCubeArrayTexture(5, mIrradArray);
|
||||
|
||||
ProbeRenderInst* curEntry = ProbeRenderInst::all[0];
|
||||
//count = MAXPROBECOUNT;
|
||||
//Final packing
|
||||
mProbePositions = AlignedArray<Point4F>(mEffectiveProbeCount, sizeof(Point4F), (U8*)probePositions.address(), false);
|
||||
mProbeBBMin = AlignedArray<Point4F>(mEffectiveProbeCount, sizeof(Point4F), (U8*)probeBBMin.address(), false);
|
||||
mProbeBBMax = AlignedArray<Point4F>(mEffectiveProbeCount, sizeof(Point4F), (U8*)probeBBMax.address(), false);
|
||||
mProbeUseSphereMode = AlignedArray<float>(mEffectiveProbeCount, sizeof(float), (U8*)probeUseSphereMode.address(), false);
|
||||
mProbeRadius = AlignedArray<float>(mEffectiveProbeCount, sizeof(float), (U8*)probeRadius.address(), false);
|
||||
mProbeAttenuation = AlignedArray<float>(mEffectiveProbeCount, sizeof(float), (U8*)probeAttenuation.address(), false);
|
||||
}
|
||||
}
|
||||
|
||||
void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
|
||||
|
|
@ -432,27 +564,27 @@ ProbeShaderConstants* RenderProbeMgr::getProbeShaderConstants(GFXShaderConstBuff
|
|||
ProbeConstantMap::Iterator iter = mConstantLookup.find(shader);
|
||||
if (iter != mConstantLookup.end())
|
||||
{
|
||||
mLastConstants = iter->value;
|
||||
mLastForwardConstants = iter->value;
|
||||
}
|
||||
else
|
||||
{
|
||||
ProbeShaderConstants* psc = new ProbeShaderConstants();
|
||||
mConstantLookup[shader] = psc;
|
||||
|
||||
mLastConstants = psc;
|
||||
mLastForwardConstants = psc;
|
||||
}
|
||||
|
||||
// Set our new shader
|
||||
mLastShader = shader;
|
||||
}
|
||||
|
||||
mLastConstants = new ProbeShaderConstants();
|
||||
mLastForwardConstants = new ProbeShaderConstants();
|
||||
|
||||
// Make sure that our current lighting constants are initialized
|
||||
if (!mLastConstants->mInit)
|
||||
mLastConstants->init(shader);
|
||||
if (!mLastForwardConstants->mInit)
|
||||
mLastForwardConstants->init(shader);
|
||||
|
||||
return mLastConstants;
|
||||
return mLastForwardConstants;
|
||||
}
|
||||
|
||||
void RenderProbeMgr::_update4ProbeConsts(const SceneData &sgData,
|
||||
|
|
@ -629,7 +761,9 @@ void RenderProbeMgr::setProbeInfo(ProcessedMaterial *pmat,
|
|||
//-----------------------------------------------------------------------------
|
||||
void RenderProbeMgr::render( SceneRenderState *state )
|
||||
{
|
||||
PROFILE_SCOPE(RenderProbeMgr_render);
|
||||
//PROFILE_SCOPE(RenderProbeMgr_render);
|
||||
if (getProbeArrayEffect() == nullptr)
|
||||
return;
|
||||
|
||||
// Early out if nothing to draw.
|
||||
if (!ProbeRenderInst::all.size())
|
||||
|
|
@ -638,129 +772,38 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
if (!RenderProbeMgr::smRenderReflectionProbes)
|
||||
return;
|
||||
|
||||
if (mEffectiveProbeCount == 0)
|
||||
_setupStaticParameters(); //return;
|
||||
|
||||
GFXTransformSaver saver;
|
||||
|
||||
GFXDEBUGEVENT_SCOPE(RenderProbeMgr_render, ColorI::WHITE);
|
||||
|
||||
NamedTexTargetRef sceneColorTargetRef = NamedTexTarget::find("AL_FormatToken");
|
||||
if (sceneColorTargetRef.isNull())
|
||||
return;
|
||||
|
||||
GFXTextureTargetRef probeLightingTargetRef = GFX->allocRenderToTextureTarget();
|
||||
|
||||
if (probeLightingTargetRef.isNull())
|
||||
return;
|
||||
|
||||
//Do a quick pass to update our probes if they're dirty
|
||||
//PROBEMGR->updateDirtyProbes();
|
||||
|
||||
probeLightingTargetRef->attachTexture(GFXTextureTarget::Color0, sceneColorTargetRef->getTexture(0));
|
||||
|
||||
GFX->pushActiveRenderTarget();
|
||||
GFX->setActiveRenderTarget(probeLightingTargetRef);
|
||||
|
||||
GFX->setViewport(sceneColorTargetRef->getViewport());
|
||||
|
||||
// Restore transforms
|
||||
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
|
||||
matrixSet.restoreSceneViewProjection();
|
||||
|
||||
const MatrixF &worldToCameraXfm = matrixSet.getWorldToCamera();
|
||||
|
||||
// Set up the SG Data
|
||||
SceneData sgData;
|
||||
sgData.init(state);
|
||||
|
||||
// Initialize and set the per-frame parameters after getting
|
||||
// the vector light material as we use lazy creation.
|
||||
_setupPerFrameParameters(state);
|
||||
|
||||
//Order the probes by size, biggest to smallest
|
||||
//dQsort(ProbeRenderInst::all.address(), ProbeRenderInst::all.size(), sizeof(const ProbeRenderInst*), AscendingReflectProbeInfluence);
|
||||
//_setupPerFrameParameters(state);
|
||||
|
||||
//Specular
|
||||
PROFILE_START(RenderProbeManager_ReflectProbeRender);
|
||||
//PROFILE_START(RenderProbeManager_ReflectProbeRender);
|
||||
|
||||
ReflectProbeMaterialInfo* reflProbeMat = getReflectProbeMaterial();
|
||||
|
||||
if (reflProbeMat == nullptr || reflProbeMat->matInstance == nullptr)
|
||||
// If this is a non-diffuse pass or we have no objects to
|
||||
// render then tell the effect to skip rendering.
|
||||
if (!state->isDiffusePass()/* || binSize == 0*/|| !numProbesSC || !numProbesSC->isValid())
|
||||
{
|
||||
getProbeArrayEffect()->setSkip(true);
|
||||
return;
|
||||
|
||||
MaterialParameters *matParams = reflProbeMat->matInstance->getMaterialParameters();
|
||||
|
||||
MaterialParameterHandle *numProbesSC = reflProbeMat->matInstance->getMaterialParameterHandle("$numProbes");
|
||||
|
||||
MaterialParameterHandle *probePositionSC = reflProbeMat->matInstance->getMaterialParameterHandle("$inProbePosArray");
|
||||
MaterialParameterHandle *probeWorldToObjSC = reflProbeMat->matInstance->getMaterialParameterHandle("$worldToObjArray");
|
||||
MaterialParameterHandle *probeBBMinSC = reflProbeMat->matInstance->getMaterialParameterHandle("$bbMinArray");
|
||||
MaterialParameterHandle *probeBBMaxSC = reflProbeMat->matInstance->getMaterialParameterHandle("$bbMaxArray");
|
||||
MaterialParameterHandle *probeUseSphereModeSC = reflProbeMat->matInstance->getMaterialParameterHandle("$useSphereMode");
|
||||
MaterialParameterHandle *probeRadiusSC = reflProbeMat->matInstance->getMaterialParameterHandle("$radius");
|
||||
MaterialParameterHandle *probeAttenuationSC = reflProbeMat->matInstance->getMaterialParameterHandle("$attenuation");
|
||||
}
|
||||
|
||||
//Array rendering
|
||||
U32 probeCount = ProbeRenderInst::all.size();
|
||||
|
||||
if (probeCount == 0)
|
||||
return;
|
||||
MatrixF trans = MatrixF::Identity;
|
||||
sgData.objTrans = &trans;
|
||||
|
||||
U32 effectiveProbeCount = 0;
|
||||
|
||||
for (U32 i = 0; i < probeCount; i++)
|
||||
if (mEffectiveProbeCount != 0)
|
||||
{
|
||||
if (effectiveProbeCount >= MAXPROBECOUNT)
|
||||
break;
|
||||
|
||||
ProbeRenderInst* curEntry = ProbeRenderInst::all[i];
|
||||
if (!curEntry->mIsEnabled)
|
||||
continue;
|
||||
|
||||
if (curEntry->mCubemap.isNull() || curEntry->mIrradianceCubemap.isNull())
|
||||
continue;
|
||||
|
||||
if (!curEntry->mCubemap->isInitialised())
|
||||
continue;
|
||||
|
||||
if (curEntry->mIsSkylight)
|
||||
continue;
|
||||
|
||||
//Setup
|
||||
const Point3F &probePos = curEntry->getPosition();
|
||||
probePositions[i] = probePos + curEntry->mProbePosOffset;
|
||||
|
||||
MatrixF trans = curEntry->getTransform();
|
||||
trans.inverse();
|
||||
|
||||
probeWorldToObj[i]=trans;
|
||||
|
||||
probeBBMin[i] = curEntry->mBounds.minExtents;
|
||||
probeBBMax[i] = curEntry->mBounds.maxExtents;
|
||||
|
||||
probeUseSphereMode[i] = curEntry->mProbeShapeType == ProbeRenderInst::Sphere ? 1 : 0;
|
||||
|
||||
probeRadius[i] = curEntry->mRadius;
|
||||
probeAttenuation[i] = 1;
|
||||
|
||||
cubeMaps[i] = curEntry->mCubemap;
|
||||
irradMaps[i] = curEntry->mIrradianceCubemap;
|
||||
|
||||
effectiveProbeCount++;
|
||||
}
|
||||
|
||||
if (effectiveProbeCount != 0)
|
||||
{
|
||||
U32 count = effectiveProbeCount;
|
||||
matParams->setSafe(numProbesSC, (float)effectiveProbeCount);
|
||||
|
||||
mCubemapArray = GFXCubemapArrayHandle(GFX->createCubemapArray());
|
||||
mIrradArray = GFXCubemapArrayHandle(GFX->createCubemapArray());
|
||||
|
||||
mCubemapArray->initStatic(cubeMaps.address(), count);
|
||||
mIrradArray->initStatic(irradMaps.address(), count);
|
||||
|
||||
NamedTexTarget *deferredTarget = NamedTexTarget::find(RenderDeferredMgr::BufferName);
|
||||
//These will in theory be set by the postFX
|
||||
/*NamedTexTarget *deferredTarget = NamedTexTarget::find(RenderDeferredMgr::BufferName);
|
||||
if (deferredTarget)
|
||||
GFX->setTexture(0, deferredTarget->getTexture());
|
||||
else
|
||||
|
|
@ -776,7 +819,7 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
if (matinfoTarget)
|
||||
GFX->setTexture(2, matinfoTarget->getTexture());
|
||||
else
|
||||
GFX->setTexture(2, NULL);
|
||||
GFX->setTexture(2, NULL);*/
|
||||
|
||||
if (mBrdfTexture)
|
||||
{
|
||||
|
|
@ -785,54 +828,33 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
else
|
||||
GFX->setTexture(3, NULL);
|
||||
|
||||
//GFX->setCubeArrayTexture(4, mCubemapArray);
|
||||
//GFX->setCubeArrayTexture(5, mIrradArray);
|
||||
GFX->setCubeArrayTexture(4, mCubemapArray);
|
||||
GFX->setCubeArrayTexture(5, mIrradArray);
|
||||
|
||||
ProbeRenderInst* curEntry = ProbeRenderInst::all[0];
|
||||
count = MAXPROBECOUNT;
|
||||
//Final packing
|
||||
AlignedArray<Point4F> _probePositions(count, sizeof(Point4F), (U8*)probePositions.address(), false);
|
||||
AlignedArray<Point4F> _probeBBMin(count, sizeof(Point4F), (U8*)probeBBMin.address(), false);
|
||||
AlignedArray<Point4F> _probeBBMax(count, sizeof(Point4F), (U8*)probeBBMax.address(), false);
|
||||
AlignedArray<float> _probeUseSphereMode(count, sizeof(float), (U8*)probeUseSphereMode.address(), false);
|
||||
AlignedArray<float> _probeRadius(count, sizeof(float), (U8*)probeRadius.address(), false);
|
||||
AlignedArray<float> _probeAttenuation(count, sizeof(float), (U8*)probeAttenuation.address(), false);
|
||||
|
||||
matParams->set(probePositionSC, _probePositions);
|
||||
matParams->set(probeWorldToObjSC, probeWorldToObj.address(), count);
|
||||
matParams->set(probeBBMinSC, _probeBBMin);
|
||||
matParams->set(probeBBMaxSC, _probeBBMax);
|
||||
matParams->set(probeUseSphereModeSC, _probeUseSphereMode);
|
||||
matParams->set(probeRadiusSC, _probeRadius);
|
||||
matParams->set(probeAttenuationSC, _probeAttenuation);
|
||||
|
||||
// Set geometry
|
||||
GFX->setVertexBuffer(mFarFrustumQuadVerts);
|
||||
GFX->setPrimitiveBuffer(NULL);
|
||||
|
||||
while (reflProbeMat->matInstance->setupPass(state, sgData))
|
||||
if (numProbesSC->isValid())
|
||||
{
|
||||
// Set transforms
|
||||
matrixSet.setWorld(*sgData.objTrans);
|
||||
reflProbeMat->matInstance->setTransforms(matrixSet, state);
|
||||
reflProbeMat->matInstance->setSceneInfo(state, sgData);
|
||||
mLastConstants->set(numProbesSC, (float)mEffectiveProbeCount);
|
||||
|
||||
GFX->drawPrimitive(GFXTriangleStrip, 0, 2);
|
||||
mLastConstants->set(probePositionSC, mProbePositions);
|
||||
|
||||
mLastConstants->set(probePositionSC, mProbePositions);
|
||||
mLastConstants->set(probeWorldToObjSC, probeWorldToObj.address(), mEffectiveProbeCount);
|
||||
mLastConstants->set(probeBBMinSC, mProbeBBMin);
|
||||
mLastConstants->set(probeBBMaxSC, mProbeBBMax);
|
||||
mLastConstants->set(probeUseSphereModeSC, mProbeUseSphereMode);
|
||||
mLastConstants->set(probeRadiusSC, mProbeRadius);
|
||||
mLastConstants->set(probeAttenuationSC, mProbeAttenuation);
|
||||
}
|
||||
}
|
||||
|
||||
GFX->popActiveRenderTarget();
|
||||
// Finish up.
|
||||
//if (isRenderingToTarget)
|
||||
// _onPostRender();
|
||||
|
||||
//PROBEMGR->unregisterAllProbes();
|
||||
//PROBEMGR->mRegisteredProbes.clear();
|
||||
// Make sure the effect is gonna render.
|
||||
getProbeArrayEffect()->setSkip(false);
|
||||
|
||||
PROFILE_END();
|
||||
|
||||
GFX->setVertexBuffer(NULL);
|
||||
GFX->setPrimitiveBuffer(NULL);
|
||||
|
||||
// Fire off a signal to let others know that light-bin rendering is ending now
|
||||
//getRenderSignal().trigger(state, this);
|
||||
//PROFILE_END();
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
|
|
@ -268,12 +268,22 @@ class RenderProbeMgr : public RenderBinManager
|
|||
|
||||
ReflectProbeMaterialInfo* mReflectProbeMaterial;
|
||||
|
||||
GFXShaderConstHandle *numProbesSC;
|
||||
GFXShaderConstHandle *probePositionSC;
|
||||
GFXShaderConstHandle *probeWorldToObjSC;
|
||||
GFXShaderConstHandle *probeBBMinSC;
|
||||
GFXShaderConstHandle *probeBBMaxSC;
|
||||
GFXShaderConstHandle *probeUseSphereModeSC;
|
||||
GFXShaderConstHandle *probeRadiusSC;
|
||||
GFXShaderConstHandle *probeAttenuationSC;
|
||||
|
||||
/// The scene graph the light manager is associated with.
|
||||
SceneManager *mSceneManager;
|
||||
//SceneManager *mSceneManager;
|
||||
|
||||
ProbeConstantMap mConstantLookup;
|
||||
GFXShaderRef mLastShader;
|
||||
ProbeShaderConstants* mLastConstants;
|
||||
GFXShaderConstBufferRef mLastConstants;
|
||||
ProbeShaderConstants* mLastForwardConstants;
|
||||
|
||||
//
|
||||
//
|
||||
|
|
@ -306,7 +316,7 @@ protected:
|
|||
GFXTextureObject * mBrdfTexture;
|
||||
|
||||
//Array rendering
|
||||
|
||||
U32 mEffectiveProbeCount;
|
||||
Vector<Point3F> probePositions;
|
||||
Vector<MatrixF> probeWorldToObj;
|
||||
Vector<Point3F> probeBBMin;
|
||||
|
|
@ -317,6 +327,13 @@ protected:
|
|||
Vector<GFXCubemapHandle> cubeMaps;
|
||||
Vector<GFXCubemapHandle> irradMaps;
|
||||
|
||||
AlignedArray<Point4F> mProbePositions;
|
||||
AlignedArray<Point4F> mProbeBBMin;
|
||||
AlignedArray<Point4F> mProbeBBMax;
|
||||
AlignedArray<float> mProbeUseSphereMode;
|
||||
AlignedArray<float> mProbeRadius;
|
||||
AlignedArray<float> mProbeAttenuation;
|
||||
|
||||
GFXCubemapArrayHandle mCubemapArray;
|
||||
GFXCubemapArrayHandle mIrradArray;
|
||||
public:
|
||||
|
|
@ -348,10 +365,7 @@ public:
|
|||
|
||||
void registerProbe(U32 probeIdx);
|
||||
|
||||
// Returns the scene manager passed at activation.
|
||||
SceneManager* getSceneManager() { return mSceneManager; }
|
||||
|
||||
void setSceneManager(SceneManager* sceneManager) { mSceneManager = sceneManager; }
|
||||
void unregisterProbe(U32 probeIdx);
|
||||
|
||||
/// Debug rendering
|
||||
static bool smRenderReflectionProbes;
|
||||
|
|
@ -363,15 +377,7 @@ RenderProbeMgr* RenderProbeMgr::getProbeManager()
|
|||
{
|
||||
RenderProbeMgr* probeManager = new RenderProbeMgr();
|
||||
|
||||
if (gClientSceneGraph != nullptr)
|
||||
{
|
||||
probeManager->setSceneManager(gClientSceneGraph);
|
||||
smProbeManager = probeManager;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete probeManager;
|
||||
}
|
||||
smProbeManager = probeManager;
|
||||
}
|
||||
|
||||
return smProbeManager;
|
||||
|
|
|
|||
|
|
@ -500,12 +500,12 @@ singleton PostEffect( reflectionProbeArrayPostFX )
|
|||
//texture[0] = "#highlight";
|
||||
//texture[1] = "$backBuffer";
|
||||
|
||||
texture[0] = "$deferredBuffer";
|
||||
texture[1] = "$colorBuffer";
|
||||
texture[2] = "$matInfoBuffer";
|
||||
texture[0] = "#deferred";
|
||||
texture[1] = "#color";
|
||||
texture[2] = "#matinfo";
|
||||
texture[3] = "$BRDFTexture";
|
||||
texture[4] = "$cubeMap";
|
||||
texture[5] = "$irradianceCubemap";
|
||||
|
||||
target = "$backBuffer";
|
||||
target = "AL_FormatToken";
|
||||
};
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
#include "../postFx.hlsl"
|
||||
|
||||
#include "../../postFx/postFx.hlsl"
|
||||
#include "../../shaderModel.hlsl"
|
||||
#include "../../shaderModelAutoGen.hlsl"
|
||||
#include "../../lighting.hlsl"
|
||||
|
||||
TORQUE_UNIFORM_SAMPLER2D(deferredBuffer, 0);
|
||||
|
|
@ -146,6 +147,9 @@ float4 main( PFXVertToPix IN ) : SV_TARGET
|
|||
|
||||
float finalSum = blendSum;
|
||||
|
||||
return TORQUE_TEX2D(colorBuffer, IN.uv0.xy);
|
||||
//return float4(surface.N,1);
|
||||
//return float4(1,1,1, 1);
|
||||
//return float4(finalSum,finalSum,finalSum, 1);
|
||||
|
||||
// Normalize blendVal
|
||||
|
|
|
|||
Loading…
Reference in a new issue