Merge pull request #710 from lukaspj/3-Textures-Blending-Fix

3 textures blending fix
This commit is contained in:
Daniel Buckmaster 2014-11-04 17:06:04 +11:00
commit 9e4446046f
4 changed files with 15 additions and 6 deletions

View file

@ -446,7 +446,7 @@ void TerrainDetailMapFeatHLSL::processPix( Vector<ShaderComponent*> &component
}
// Add to the blend total.
meta->addStatement( new GenOp( " @ = max( @, @ );\r\n", blendTotal, blendTotal, detailBlend ) );
meta->addStatement( new GenOp( " @ += @;\r\n", blendTotal, detailBlend ) );
// If we had a parallax feature... then factor in the parallax
// amount so that it fades out with the layer blending.

View file

@ -170,9 +170,10 @@ bool TerrainBlock::_initBaseShader()
desc.zDefined = true;
desc.zWriteEnable = false;
desc.zEnable = false;
desc.setBlend( true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha );
desc.setBlend( true, GFXBlendSrcAlpha, GFXBlendOne );
desc.cullDefined = true;
desc.cullMode = GFXCullNone;
desc.colorWriteAlpha = false;
mBaseShaderSB = GFX->createStateBlock( desc );
return true;
@ -251,6 +252,8 @@ void TerrainBlock::_updateBaseTexture(bool writeToCache)
mBaseTarget->attachTexture( GFXTextureTarget::Color0, blendTex );
GFX->setActiveRenderTarget( mBaseTarget );
GFX->clear( GFXClearTarget, ColorI(0,0,0,255), 1.0f, 0 );
GFX->setTexture( 0, mLayerTex );
mBaseShaderConsts->setSafe( mBaseLayerSizeConst, (F32)mLayerTex->getWidth() );

View file

@ -32,9 +32,12 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa
float4 diff = saturate( abs( layerSample - texId ) );
float noBlend = any( 1 - diff );
// Use step to see if any of the layer samples
// Check if any of the layer samples
// match the current texture id.
float4 factors = step( texId, layerSample );
float4 factors = 0;
for(int i = 0; i < 4; i++)
if(layerSample[i] == texId)
factors[i] = 1;
// This is a custom bilinear filter.

View file

@ -32,9 +32,12 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa
float4 diff = saturate( abs( layerSample - texId ) );
float noBlend = any( 1 - diff );
// Use step to see if any of the layer samples
// Check if any of the layer samples
// match the current texture id.
float4 factors = step( texId, layerSample );
float4 factors = 0;
for(int i = 0; i < 4; i++)
if(layerSample[i] == texId)
factors[i] = 1;
// This is a custom bilinear filter.