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;
numIndicesForPoly = probeInfo->numIndicesForPoly;
mBounds = probeInfo->mBounds;
mIsSkylight = probeInfo->mIsSkylight;
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)
{
// Go no further if the material failed to initialize properly.
if (!mProcessedMaterial ||
mProcessedMaterial->getNumPasses() == 0)
if (!Parent::setupPass(state, sgData))
return false;
bool bRetVal = Parent::setupPass(state, sgData);;
AssertFatal(mProcessedMaterial->getNumPasses() > 0, "No passes created! Ohnoes");
const RenderPassData *rpd = mProcessedMaterial->getPass(0);
AssertFatal(rpd, "No render pass data!");
@ -788,9 +785,34 @@ bool ReflectProbeMatInstance::setupPass(SceneRenderState *state, const SceneData
// Now override stateblock with our own
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,

View file

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