Merge branch 'alpha40_premul' of https://github.com/Azaezel/Torque3D into Preview4_0

This commit is contained in:
Areloch 2019-11-22 21:27:52 -06:00
commit 27ee09e491
6 changed files with 37 additions and 13 deletions

View file

@ -82,6 +82,7 @@ ImplementEnumType( MaterialBlendOp,
"@ingroup GFX\n\n")
{ Material::None, "None", "Disable blending for this material." },
{ Material::Mul, "Mul", "Multiplicative blending." },
{ Material::PreMul, "PreMul", "Premultiplied alpha." },
{ Material::Add, "Add", "Adds the color of the material to the frame buffer with full alpha for each pixel." },
{ Material::AddAlpha, "AddAlpha", "The color is modulated by the alpha channel before being added to the frame buffer." },
{ Material::Sub, "Sub", "Subtractive Blending. Reverses the color model, causing dark colors to have a stronger visual effect." },

View file

@ -106,6 +106,7 @@ public:
{
None = 0,
Mul,
PreMul,
Add,
AddAlpha, // add modulated with alpha channel
Sub,

View file

@ -128,6 +128,12 @@ void ProcessedMaterial::_setBlendState(Material::BlendOp blendOp, GFXStateBlockD
desc.blendDest = GFXBlendInvSrcAlpha;
break;
}
case Material::PreMul:
{
desc.blendSrc = GFXBlendOne;
desc.blendDest = GFXBlendInvSrcAlpha;
break;
}
case Material::LerpAlpha:
{
desc.blendSrc = GFXBlendSrcAlpha;

View file

@ -115,6 +115,10 @@ LangElement* ShaderFeatureGLSL::assignColor( LangElement *elem,
assign = new GenOp( "@ *= @", color, elem );
break;
case Material::PreMul:
assign = new GenOp("@.rgb = @.rgb + (@.rgb*(1.0-@.a))", color, elem, color, elem);
break;
case Material::AddAlpha:
assign = new GenOp( "@ += @ * @.a", color, elem, elem );
break;

View file

@ -120,6 +120,10 @@ LangElement* ShaderFeatureHLSL::assignColor( LangElement *elem,
assign = new GenOp( "@ *= @", color, elem );
break;
case Material::PreMul:
assign = new GenOp("@.rgb = @.rgb + (@.rgb*(1.0-@.a))", color, elem, color, elem);
break;
case Material::AddAlpha:
assign = new GenOp( "@ += @ * @.a", color, elem, elem );
break;

View file

@ -74,12 +74,12 @@ function MaterialEditorGui::open(%this)
//Blending Modes
MaterialEditorPropertiesWindow-->blendingTypePopUp.clear();
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(None,0);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Mul,1);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Add,2);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(AddAlpha,3);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Sub,4);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(LerpAlpha,5);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(PreMult,6);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(preMul,1);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(LerpAlpha,2);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Mul,3);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Add,4);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(AddAlpha,5);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Sub,6);
MaterialEditorPropertiesWindow-->blendingTypePopUp.setSelected( 0, false );
//Reflection Types
@ -785,16 +785,24 @@ function MaterialEditorGui::guiSync( %this, %material )
MaterialEditorPropertiesWindow-->castShadows.setValue((%material).castShadows);
MaterialEditorPropertiesWindow-->castDynamicShadows.setValue((%material).castDynamicShadows);
MaterialEditorPropertiesWindow-->translucentCheckbox.setValue((%material).translucent);
/*
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(preMul,1);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(LerpAlpha,2);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Mul,3);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Add,4);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(AddAlpha,5);
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Sub,6);
*/
switch$((%material).translucentBlendOp)
{
case "None": %selectedNum = 0;
case "Mul": %selectedNum = 1;
case "Add": %selectedNum = 2;
case "AddAlpha": %selectedNum = 3;
case "Sub": %selectedNum = 4;
case "LerpAlpha": %selectedNum = 5;
case "PreMult": %selectedNum = 6;
case "None": %selectedNum = 0;
case "preMul": %selectedNum = 1;
case "LerpAlpha": %selectedNum = 2;
case "Mul": %selectedNum = 3;
case "": %selectedNum = 4;
case "AddAlpha": %selectedNum = 5;
case "Sub": %selectedNum = 6;
}
MaterialEditorPropertiesWindow-->blendingTypePopUp.setSelected(%selectedNum);