mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-13 15:44:36 +00:00
embeds blendtotal into the low bit for the normal|depth buffer for terrains to support multi-pass blending.
This commit is contained in:
parent
8cae1e5dcb
commit
598fb758f3
3 changed files with 14 additions and 2 deletions
|
|
@ -1067,8 +1067,12 @@ void TerrainAdditiveFeatGLSL::processPix( Vector<ShaderComponent*> &componentLis
|
||||||
const MaterialFeatureData &fd )
|
const MaterialFeatureData &fd )
|
||||||
{
|
{
|
||||||
Var *color = NULL;
|
Var *color = NULL;
|
||||||
|
Var *normal = NULL;
|
||||||
if (fd.features[MFT_DeferredTerrainDetailMap])
|
if (fd.features[MFT_DeferredTerrainDetailMap])
|
||||||
|
{
|
||||||
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) );
|
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) );
|
||||||
|
normal = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) );
|
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) );
|
||||||
|
|
||||||
|
|
@ -1080,6 +1084,8 @@ void TerrainAdditiveFeatGLSL::processPix( Vector<ShaderComponent*> &componentLis
|
||||||
|
|
||||||
meta->addStatement( new GenOp( " clip( @ - 0.0001 );\r\n", blendTotal ) );
|
meta->addStatement( new GenOp( " clip( @ - 0.0001 );\r\n", blendTotal ) );
|
||||||
meta->addStatement( new GenOp( " @.a = @;\r\n", color, blendTotal ) );
|
meta->addStatement( new GenOp( " @.a = @;\r\n", color, blendTotal ) );
|
||||||
|
if (normal)
|
||||||
|
meta->addStatement(new GenOp(" @.a = @;\r\n", normal, blendTotal));
|
||||||
|
|
||||||
output = meta;
|
output = meta;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1165,8 +1165,12 @@ void TerrainAdditiveFeatHLSL::processPix( Vector<ShaderComponent*> &componentLis
|
||||||
const MaterialFeatureData &fd )
|
const MaterialFeatureData &fd )
|
||||||
{
|
{
|
||||||
Var *color = NULL;
|
Var *color = NULL;
|
||||||
|
Var *normal = NULL;
|
||||||
if (fd.features[MFT_DeferredTerrainDetailMap])
|
if (fd.features[MFT_DeferredTerrainDetailMap])
|
||||||
|
{
|
||||||
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) );
|
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) );
|
||||||
|
normal = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) );
|
color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) );
|
||||||
|
|
||||||
|
|
@ -1179,6 +1183,8 @@ void TerrainAdditiveFeatHLSL::processPix( Vector<ShaderComponent*> &componentLis
|
||||||
meta->addStatement( new GenOp( " clip( @ - 0.0001 );\r\n", blendTotal ) );
|
meta->addStatement( new GenOp( " clip( @ - 0.0001 );\r\n", blendTotal ) );
|
||||||
meta->addStatement( new GenOp( " @.a = @;\r\n", color, blendTotal ) );
|
meta->addStatement( new GenOp( " @.a = @;\r\n", color, blendTotal ) );
|
||||||
|
|
||||||
|
if (normal)
|
||||||
|
meta->addStatement(new GenOp(" @.a = @;\r\n", normal, blendTotal));
|
||||||
|
|
||||||
output = meta;
|
output = meta;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -548,8 +548,8 @@ bool TerrainCellMaterial::_createPass( Vector<MaterialInfo*> *materials,
|
||||||
// MFT_TerrainAdditive feature to lerp the
|
// MFT_TerrainAdditive feature to lerp the
|
||||||
// output normal with the previous pass.
|
// output normal with the previous pass.
|
||||||
//
|
//
|
||||||
//if ( prePassMat )
|
if ( prePassMat )
|
||||||
//desc.setColorWrites( true, true, false, false );
|
desc.setColorWrites( true, true, true, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
// We write to the zbuffer if this is a prepass
|
// We write to the zbuffer if this is a prepass
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue