1)use standard setupPass inheritance chain. already checks for !mprocessedmaterial and a few other things

2)pass along mIsSkylight from probes to matinstances
3) stubbs in a seperate setupPass for skylightmatinstance
This commit is contained in:
Azaezel 2018-11-23 02:05:36 -06:00
parent 96101a0e56
commit 79d506d439
2 changed files with 32 additions and 6 deletions

View file

@ -99,6 +99,7 @@ void ProbeRenderInst::set(const ProbeRenderInst *probeInfo)
numVerts = probeInfo->numVerts; numVerts = probeInfo->numVerts;
numIndicesForPoly = probeInfo->numIndicesForPoly; numIndicesForPoly = probeInfo->numIndicesForPoly;
mBounds = probeInfo->mBounds; mBounds = probeInfo->mBounds;
mIsSkylight = probeInfo->mIsSkylight;
for (U32 i = 0; i < 9; i++) for (U32 i = 0; i < 9; i++)
{ {
@ -764,13 +765,9 @@ bool ReflectProbeMatInstance::init(const FeatureSet &features, const GFXVertexFo
bool ReflectProbeMatInstance::setupPass(SceneRenderState *state, const SceneData &sgData) bool ReflectProbeMatInstance::setupPass(SceneRenderState *state, const SceneData &sgData)
{ {
// Go no further if the material failed to initialize properly. if (!Parent::setupPass(state, sgData))
if (!mProcessedMaterial ||
mProcessedMaterial->getNumPasses() == 0)
return false; return false;
bool bRetVal = Parent::setupPass(state, sgData);;
AssertFatal(mProcessedMaterial->getNumPasses() > 0, "No passes created! Ohnoes"); AssertFatal(mProcessedMaterial->getNumPasses() > 0, "No passes created! Ohnoes");
const RenderPassData *rpd = mProcessedMaterial->getPass(0); const RenderPassData *rpd = mProcessedMaterial->getPass(0);
AssertFatal(rpd, "No render pass data!"); AssertFatal(rpd, "No render pass data!");
@ -788,9 +785,34 @@ bool ReflectProbeMatInstance::setupPass(SceneRenderState *state, const SceneData
// Now override stateblock with our own // Now override stateblock with our own
GFX->setStateBlock(mProjectionState); GFX->setStateBlock(mProjectionState);
return bRetVal; return true;
} }
bool SkylightMatInstance::setupPass(SceneRenderState *state, const SceneData &sgData)
{
if (!Parent::setupPass(state, sgData))
return false;
AssertFatal(mProcessedMaterial->getNumPasses() > 0, "No passes created! Ohnoes");
const RenderPassData *rpd = mProcessedMaterial->getPass(0);
AssertFatal(rpd, "No render pass data!");
AssertFatal(rpd->mRenderStates[0], "No render state 0!");
if (!mProjectionState)
{
GFXStateBlockDesc desc;
desc.setZReadWrite(false);
desc.zWriteEnable = false;
desc.setCullMode(GFXCullNone);
desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendDestAlpha, GFXBlendOpMax);
//desc.setBlend(false);
mProjectionState = GFX->createStateBlock(desc);
}
// Now override stateblock with our own
GFX->setStateBlock(mProjectionState);
return true;
}
// //
// //
ProbeManager::ReflectProbeMaterialInfo::ReflectProbeMaterialInfo(const String &matName, ProbeManager::ReflectProbeMaterialInfo::ReflectProbeMaterialInfo(const String &matName,

View file

@ -208,8 +208,12 @@ class SkylightMatInstance : public ReflectProbeMatInstance
{ {
typedef ReflectProbeMatInstance Parent; typedef ReflectProbeMatInstance Parent;
protected:
GFXStateBlockRef mProjectionState;
public: public:
SkylightMatInstance(Material &mat) : Parent(mat) {} SkylightMatInstance(Material &mat) : Parent(mat) {}
virtual bool setupPass(SceneRenderState *state, const SceneData &sgData);
}; };
class ProbeManager class ProbeManager