diff --git a/Engine/source/renderInstance/renderParticleMgr.cpp b/Engine/source/renderInstance/renderParticleMgr.cpp index d1d36f39e..2e72e67a7 100644 --- a/Engine/source/renderInstance/renderParticleMgr.cpp +++ b/Engine/source/renderInstance/renderParticleMgr.cpp @@ -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) diff --git a/Templates/Empty/game/core/scripts/client/postFx/edgeAA.cs b/Templates/Empty/game/core/scripts/client/postFx/edgeAA.cs index 2735df855..a5401d794 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/edgeAA.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/edgeAA.cs @@ -83,7 +83,7 @@ singleton PostEffect( EdgeDetectPostEffect ) texture[0] = "#prepass"; target = "#edge"; - isEnabled = false; + isEnabled = true; }; singleton PostEffect( EdgeAAPostEffect ) diff --git a/Templates/Full/game/core/scripts/client/postFx/edgeAA.cs b/Templates/Full/game/core/scripts/client/postFx/edgeAA.cs index 2735df855..a5401d794 100644 --- a/Templates/Full/game/core/scripts/client/postFx/edgeAA.cs +++ b/Templates/Full/game/core/scripts/client/postFx/edgeAA.cs @@ -83,7 +83,7 @@ singleton PostEffect( EdgeDetectPostEffect ) texture[0] = "#prepass"; target = "#edge"; - isEnabled = false; + isEnabled = true; }; singleton PostEffect( EdgeAAPostEffect )