|
@@ -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)
|