From 79d506d439a2b057ffb28191c6facf989dd2257f Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 23 Nov 2018 02:05:36 -0600 Subject: [PATCH] 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 --- Engine/source/lighting/probeManager.cpp | 34 ++++++++++++++++++++----- Engine/source/lighting/probeManager.h | 4 +++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/Engine/source/lighting/probeManager.cpp b/Engine/source/lighting/probeManager.cpp index 8503fa4c9..98ed54b63 100644 --- a/Engine/source/lighting/probeManager.cpp +++ b/Engine/source/lighting/probeManager.cpp @@ -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, diff --git a/Engine/source/lighting/probeManager.h b/Engine/source/lighting/probeManager.h index 7f06a8056..b2e8ad82e 100644 --- a/Engine/source/lighting/probeManager.h +++ b/Engine/source/lighting/probeManager.h @@ -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