Re-enable MixedParticleRendering

This commit is contained in:
Lukas Joergensen 2014-08-08 00:34:32 +02:00
parent 69838bdc8c
commit 981b37e548
3 changed files with 19 additions and 10 deletions

View file

@ -74,14 +74,15 @@ RenderParticleMgr::RenderParticleMgr()
{
// Render particles at 1/4 resolution
mTargetSizeType = WindowSizeScaled;
mTargetScale.set(0.25f, 0.25f);
mTargetScale.set(0.5f, 0.5f);
// We use the target chain like a texture pool, not like a swap chain
if(!RenderToSingleTarget)
setTargetChainLength(5);
else
mOffscreenSystems.setSize(1);
notifyType( RenderPassManager::RIT_Particle );
LightManager::smActivateSignal.notify( this, &RenderParticleMgr::_onLMActivate );
}
@ -377,7 +378,7 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
// Draw system path, or draw composite path
if(ri->systemState == PSS_DrawComplete)
return;
if(ri->systemState != PSS_AwaitingCompositeDraw)
{
// Set proper stateblock, and update state
@ -386,7 +387,7 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
GFX->setStateBlock( _getOffscreenStateBlock(ri) );
ri->systemState = PSS_AwaitingCompositeDraw;
mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mModelViewProjSC,
*ri->modelViewProj * mOffscreenSystems[ri->targetIndex].clipMatrix );
*ri->modelViewProj * mOffscreenSystems[ri->targetIndex].clipMatrix );
}
else
{
@ -419,6 +420,7 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
alphaScale = 0.0f;
break;
}
mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaFactorSC, alphaFactor );
mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaScaleSC, alphaScale );
@ -490,6 +492,13 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
ScreenSpace::RenderTargetParameters(texObject->getSize(), mEdgeTarget->getViewport(), rtParams);
mParticleCompositeShaderConsts.mShaderConsts->setSafe( mParticleCompositeShaderConsts.mEdgeTargetParamsSC, rtParams );
}
else
{
AssertWarn(false, "No edge texture target defined, if you want to use mixed particle"
"rendering, then make sure that the EdgeDetectPostEffect is enabled.");
ri->systemState == PSS_AwaitingHighResDraw;
return;
}
// Set shader and constant buffer
GFX->setShader( mParticleCompositeShader );
@ -686,8 +695,8 @@ GFXStateBlockRef RenderParticleMgr::_getHighResStateBlock(ParticleRenderInst *ri
GFXStateBlockRef RenderParticleMgr::_getMixedResStateBlock(ParticleRenderInst *ri)
{
const U8 blendStyle = ri->blendStyle;
if ( mHighResBlocks[blendStyle].isValid() )
return mHighResBlocks[blendStyle];
if ( mMixedResBlocks[blendStyle].isValid() )
return mMixedResBlocks[blendStyle];
GFXStateBlockDesc d;
@ -751,8 +760,8 @@ GFXStateBlockRef RenderParticleMgr::_getMixedResStateBlock(ParticleRenderInst *r
// Prepass sampler
d.samplers[1] = GFXSamplerStateDesc::getClampPoint();
mHighResBlocks[blendStyle] = GFX->createStateBlock(d);
return mHighResBlocks[blendStyle];
mMixedResBlocks[blendStyle] = GFX->createStateBlock(d);
return mMixedResBlocks[blendStyle];
}
GFXStateBlockRef RenderParticleMgr::_getCompositeStateBlock(ParticleRenderInst *ri)