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,7 +74,7 @@ RenderParticleMgr::RenderParticleMgr()
{ {
// Render particles at 1/4 resolution // Render particles at 1/4 resolution
mTargetSizeType = WindowSizeScaled; 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 // We use the target chain like a texture pool, not like a swap chain
if(!RenderToSingleTarget) if(!RenderToSingleTarget)
@ -82,6 +82,7 @@ RenderParticleMgr::RenderParticleMgr()
else else
mOffscreenSystems.setSize(1); mOffscreenSystems.setSize(1);
notifyType( RenderPassManager::RIT_Particle );
LightManager::smActivateSignal.notify( this, &RenderParticleMgr::_onLMActivate ); LightManager::smActivateSignal.notify( this, &RenderParticleMgr::_onLMActivate );
} }
@ -386,7 +387,7 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
GFX->setStateBlock( _getOffscreenStateBlock(ri) ); GFX->setStateBlock( _getOffscreenStateBlock(ri) );
ri->systemState = PSS_AwaitingCompositeDraw; ri->systemState = PSS_AwaitingCompositeDraw;
mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mModelViewProjSC, mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mModelViewProjSC,
*ri->modelViewProj * mOffscreenSystems[ri->targetIndex].clipMatrix ); *ri->modelViewProj * mOffscreenSystems[ri->targetIndex].clipMatrix );
} }
else else
{ {
@ -419,6 +420,7 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
alphaScale = 0.0f; alphaScale = 0.0f;
break; break;
} }
mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaFactorSC, alphaFactor ); mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaFactorSC, alphaFactor );
mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaScaleSC, alphaScale ); mParticleShaderConsts.mShaderConsts->setSafe( mParticleShaderConsts.mAlphaScaleSC, alphaScale );
@ -490,6 +492,13 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
ScreenSpace::RenderTargetParameters(texObject->getSize(), mEdgeTarget->getViewport(), rtParams); ScreenSpace::RenderTargetParameters(texObject->getSize(), mEdgeTarget->getViewport(), rtParams);
mParticleCompositeShaderConsts.mShaderConsts->setSafe( mParticleCompositeShaderConsts.mEdgeTargetParamsSC, 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 // Set shader and constant buffer
GFX->setShader( mParticleCompositeShader ); GFX->setShader( mParticleCompositeShader );
@ -686,8 +695,8 @@ GFXStateBlockRef RenderParticleMgr::_getHighResStateBlock(ParticleRenderInst *ri
GFXStateBlockRef RenderParticleMgr::_getMixedResStateBlock(ParticleRenderInst *ri) GFXStateBlockRef RenderParticleMgr::_getMixedResStateBlock(ParticleRenderInst *ri)
{ {
const U8 blendStyle = ri->blendStyle; const U8 blendStyle = ri->blendStyle;
if ( mHighResBlocks[blendStyle].isValid() ) if ( mMixedResBlocks[blendStyle].isValid() )
return mHighResBlocks[blendStyle]; return mMixedResBlocks[blendStyle];
GFXStateBlockDesc d; GFXStateBlockDesc d;
@ -751,8 +760,8 @@ GFXStateBlockRef RenderParticleMgr::_getMixedResStateBlock(ParticleRenderInst *r
// Prepass sampler // Prepass sampler
d.samplers[1] = GFXSamplerStateDesc::getClampPoint(); d.samplers[1] = GFXSamplerStateDesc::getClampPoint();
mHighResBlocks[blendStyle] = GFX->createStateBlock(d); mMixedResBlocks[blendStyle] = GFX->createStateBlock(d);
return mHighResBlocks[blendStyle]; return mMixedResBlocks[blendStyle];
} }
GFXStateBlockRef RenderParticleMgr::_getCompositeStateBlock(ParticleRenderInst *ri) GFXStateBlockRef RenderParticleMgr::_getCompositeStateBlock(ParticleRenderInst *ri)

View file

@ -83,7 +83,7 @@ singleton PostEffect( EdgeDetectPostEffect )
texture[0] = "#prepass"; texture[0] = "#prepass";
target = "#edge"; target = "#edge";
isEnabled = false; isEnabled = true;
}; };
singleton PostEffect( EdgeAAPostEffect ) singleton PostEffect( EdgeAAPostEffect )

View file

@ -83,7 +83,7 @@ singleton PostEffect( EdgeDetectPostEffect )
texture[0] = "#prepass"; texture[0] = "#prepass";
target = "#edge"; target = "#edge";
isEnabled = false; isEnabled = true;
}; };
singleton PostEffect( EdgeAAPostEffect ) singleton PostEffect( EdgeAAPostEffect )