Merge pull request #928 from BeamNG/renderparticlemanager_sampler_names

Change RenderParticleMgr for use sampler names
This commit is contained in:
LuisAntonRebollo 2014-11-30 02:22:19 +01:00
commit 98926b1ae1
2 changed files with 16 additions and 4 deletions

View file

@ -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" );
} }

View file

@ -110,6 +110,9 @@ protected:
GFXShaderConstHandle *mPrePassTargetParamsSC; GFXShaderConstHandle *mPrePassTargetParamsSC;
GFXShaderConstHandle *mAlphaFactorSC; GFXShaderConstHandle *mAlphaFactorSC;
GFXShaderConstHandle *mAlphaScaleSC; GFXShaderConstHandle *mAlphaScaleSC;
GFXShaderConstHandle *mSamplerDiffuse;
GFXShaderConstHandle *mSamplerPrePassTex;
GFXShaderConstHandle *mSamplerParaboloidLightMap;
} mParticleShaderConsts; } mParticleShaderConsts;
@ -118,6 +121,8 @@ protected:
GFXShaderConstBufferRef mShaderConsts; GFXShaderConstBufferRef mShaderConsts;
GFXShaderConstHandle *mSystemDepth; GFXShaderConstHandle *mSystemDepth;
GFXShaderConstHandle *mScreenRect; GFXShaderConstHandle *mScreenRect;
GFXShaderConstHandle *mSamplerColorSource;
GFXShaderConstHandle *mSamplerEdgeSource;
GFXShaderConstHandle *mEdgeTargetParamsSC; GFXShaderConstHandle *mEdgeTargetParamsSC;
GFXShaderConstHandle *mOffscreenTargetParamsSC; GFXShaderConstHandle *mOffscreenTargetParamsSC;
} mParticleCompositeShaderConsts; } mParticleCompositeShaderConsts;