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