|
@@ -438,13 +438,13 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
|
|
GFX->setShader( mParticleShader );
|
|
GFX->setShader( mParticleShader );
|
|
GFX->setShaderConstBuffer( mParticleShaderConsts.mShaderConsts );
|
|
GFX->setShaderConstBuffer( mParticleShaderConsts.mShaderConsts );
|
|
|
|
|
|
- GFX->setTexture( 0, ri->diffuseTex );
|
|
|
|
|
|
+ GFX->setTexture( mParticleShaderConsts.mSamplerDiffuse->getSamplerRegister(), ri->diffuseTex );
|
|
|
|
|
|
// Set up the prepass texture.
|
|
// Set up the prepass texture.
|
|
if ( mParticleShaderConsts.mPrePassTargetParamsSC->isValid() )
|
|
if ( mParticleShaderConsts.mPrePassTargetParamsSC->isValid() )
|
|
{
|
|
{
|
|
GFXTextureObject *texObject = mPrepassTarget ? mPrepassTarget->getTexture(0) : NULL;
|
|
GFXTextureObject *texObject = mPrepassTarget ? mPrepassTarget->getTexture(0) : NULL;
|
|
- GFX->setTexture( 1, texObject );
|
|
|
|
|
|
+ GFX->setTexture( mParticleShaderConsts.mSamplerPrePassTex->getSamplerRegister(), texObject );
|
|
|
|
|
|
Point4F rtParams( 0.0f, 0.0f, 1.0f, 1.0f );
|
|
Point4F rtParams( 0.0f, 0.0f, 1.0f, 1.0f );
|
|
if ( texObject )
|
|
if ( texObject )
|
|
@@ -477,7 +477,7 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
|
|
// Set offscreen texture
|
|
// Set offscreen texture
|
|
Point4F rtParams;
|
|
Point4F rtParams;
|
|
GFXTextureObject *particleSource = mNamedTarget.getTexture();
|
|
GFXTextureObject *particleSource = mNamedTarget.getTexture();
|
|
- GFX->setTexture( 0, particleSource );
|
|
|
|
|
|
+ GFX->setTexture( mParticleCompositeShaderConsts.mSamplerColorSource->getSamplerRegister(), particleSource );
|
|
if(particleSource)
|
|
if(particleSource)
|
|
{
|
|
{
|
|
ScreenSpace::RenderTargetParameters(particleSource->getSize(), mNamedTarget.getViewport(), rtParams);
|
|
ScreenSpace::RenderTargetParameters(particleSource->getSize(), mNamedTarget.getViewport(), rtParams);
|
|
@@ -486,7 +486,7 @@ void RenderParticleMgr::renderInstance(ParticleRenderInst *ri, SceneRenderState
|
|
|
|
|
|
// And edges
|
|
// And edges
|
|
GFXTextureObject *texObject = mEdgeTarget ? mEdgeTarget->getTexture() : NULL;
|
|
GFXTextureObject *texObject = mEdgeTarget ? mEdgeTarget->getTexture() : NULL;
|
|
- GFX->setTexture( 1, texObject );
|
|
|
|
|
|
+ GFX->setTexture( mParticleCompositeShaderConsts.mSamplerEdgeSource->getSamplerRegister(), texObject );
|
|
if(texObject)
|
|
if(texObject)
|
|
{
|
|
{
|
|
ScreenSpace::RenderTargetParameters(texObject->getSize(), mEdgeTarget->getViewport(), rtParams);
|
|
ScreenSpace::RenderTargetParameters(texObject->getSize(), mEdgeTarget->getViewport(), rtParams);
|
|
@@ -557,6 +557,11 @@ bool RenderParticleMgr::_initShader()
|
|
mParticleShaderConsts.mAlphaScaleSC = mParticleShader->getShaderConstHandle( "$alphaScale" );
|
|
mParticleShaderConsts.mAlphaScaleSC = mParticleShader->getShaderConstHandle( "$alphaScale" );
|
|
mParticleShaderConsts.mFSModelViewProjSC = mParticleShader->getShaderConstHandle( "$fsModelViewProj" );
|
|
mParticleShaderConsts.mFSModelViewProjSC = mParticleShader->getShaderConstHandle( "$fsModelViewProj" );
|
|
mParticleShaderConsts.mPrePassTargetParamsSC = mParticleShader->getShaderConstHandle( "$prePassTargetParams" );
|
|
mParticleShaderConsts.mPrePassTargetParamsSC = mParticleShader->getShaderConstHandle( "$prePassTargetParams" );
|
|
|
|
+
|
|
|
|
+ //samplers
|
|
|
|
+ mParticleShaderConsts.mSamplerDiffuse = mParticleShader->getShaderConstHandle("$diffuseMap");
|
|
|
|
+ mParticleShaderConsts.mSamplerPrePassTex = mParticleShader->getShaderConstHandle("$prepassTex");
|
|
|
|
+ mParticleShaderConsts.mSamplerParaboloidLightMap = mParticleShader->getShaderConstHandle("$paraboloidLightMap");
|
|
}
|
|
}
|
|
|
|
|
|
shaderData = NULL;
|
|
shaderData = NULL;
|
|
@@ -572,6 +577,8 @@ bool RenderParticleMgr::_initShader()
|
|
{
|
|
{
|
|
mParticleCompositeShaderConsts.mShaderConsts = mParticleCompositeShader->allocConstBuffer();
|
|
mParticleCompositeShaderConsts.mShaderConsts = mParticleCompositeShader->allocConstBuffer();
|
|
mParticleCompositeShaderConsts.mScreenRect = mParticleCompositeShader->getShaderConstHandle( "$screenRect" );
|
|
mParticleCompositeShaderConsts.mScreenRect = mParticleCompositeShader->getShaderConstHandle( "$screenRect" );
|
|
|
|
+ mParticleCompositeShaderConsts.mSamplerColorSource = mParticleCompositeShader->getShaderConstHandle( "$colorSource" );
|
|
|
|
+ mParticleCompositeShaderConsts.mSamplerEdgeSource = mParticleCompositeShader->getShaderConstHandle( "$edgeSource" );
|
|
mParticleCompositeShaderConsts.mEdgeTargetParamsSC = mParticleCompositeShader->getShaderConstHandle( "$edgeTargetParams" );
|
|
mParticleCompositeShaderConsts.mEdgeTargetParamsSC = mParticleCompositeShader->getShaderConstHandle( "$edgeTargetParams" );
|
|
mParticleCompositeShaderConsts.mOffscreenTargetParamsSC = mParticleCompositeShader->getShaderConstHandle( "$offscreenTargetParams" );
|
|
mParticleCompositeShaderConsts.mOffscreenTargetParamsSC = mParticleCompositeShader->getShaderConstHandle( "$offscreenTargetParams" );
|
|
}
|
|
}
|