mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-12 15:14:35 +00:00
largely based on work by @rextimmy: add premultiplied alpha
This commit is contained in:
parent
c1e99364b7
commit
bd21a207ef
6 changed files with 37 additions and 11 deletions
|
|
@ -82,6 +82,7 @@ ImplementEnumType( MaterialBlendOp,
|
||||||
"@ingroup GFX\n\n")
|
"@ingroup GFX\n\n")
|
||||||
{ Material::None, "None", "Disable blending for this material." },
|
{ Material::None, "None", "Disable blending for this material." },
|
||||||
{ Material::Mul, "Mul", "Multiplicative blending." },
|
{ 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::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::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." },
|
{ Material::Sub, "Sub", "Subtractive Blending. Reverses the color model, causing dark colors to have a stronger visual effect." },
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ public:
|
||||||
{
|
{
|
||||||
None = 0,
|
None = 0,
|
||||||
Mul,
|
Mul,
|
||||||
|
PreMul,
|
||||||
Add,
|
Add,
|
||||||
AddAlpha, // add modulated with alpha channel
|
AddAlpha, // add modulated with alpha channel
|
||||||
Sub,
|
Sub,
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,12 @@ void ProcessedMaterial::_setBlendState(Material::BlendOp blendOp, GFXStateBlockD
|
||||||
desc.blendDest = GFXBlendInvSrcAlpha;
|
desc.blendDest = GFXBlendInvSrcAlpha;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case Material::PreMul:
|
||||||
|
{
|
||||||
|
desc.blendSrc = GFXBlendOne;
|
||||||
|
desc.blendDest = GFXBlendInvSrcAlpha;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case Material::LerpAlpha:
|
case Material::LerpAlpha:
|
||||||
{
|
{
|
||||||
desc.blendSrc = GFXBlendSrcAlpha;
|
desc.blendSrc = GFXBlendSrcAlpha;
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,10 @@ LangElement* ShaderFeatureGLSL::assignColor( LangElement *elem,
|
||||||
assign = new GenOp( "@ *= @", color, elem );
|
assign = new GenOp( "@ *= @", color, elem );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Material::PreMul:
|
||||||
|
assign = new GenOp("@.rgb = @.rgb + (@.rgb*(1.0-@.a))", color, elem, color, elem);
|
||||||
|
break;
|
||||||
|
|
||||||
case Material::AddAlpha:
|
case Material::AddAlpha:
|
||||||
assign = new GenOp( "@ += @ * @.a", color, elem, elem );
|
assign = new GenOp( "@ += @ * @.a", color, elem, elem );
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,10 @@ LangElement* ShaderFeatureHLSL::assignColor( LangElement *elem,
|
||||||
assign = new GenOp( "@ *= @", color, elem );
|
assign = new GenOp( "@ *= @", color, elem );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Material::PreMul:
|
||||||
|
assign = new GenOp("@.rgb = @.rgb + (@.rgb*(1.0-@.a))", color, elem, color, elem);
|
||||||
|
break;
|
||||||
|
|
||||||
case Material::AddAlpha:
|
case Material::AddAlpha:
|
||||||
assign = new GenOp( "@ += @ * @.a", color, elem, elem );
|
assign = new GenOp( "@ += @ * @.a", color, elem, elem );
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -74,11 +74,12 @@ function MaterialEditorGui::open(%this)
|
||||||
//Blending Modes
|
//Blending Modes
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.clear();
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.clear();
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(None,0);
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(None,0);
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Mul,1);
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(preMul,1);
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Add,2);
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(LerpAlpha,2);
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(AddAlpha,3);
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Mul,3);
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Sub,4);
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Add,4);
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(LerpAlpha,5);
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(AddAlpha,5);
|
||||||
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.add(Sub,6);
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.setSelected( 0, false );
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.setSelected( 0, false );
|
||||||
|
|
||||||
//Reflection Types
|
//Reflection Types
|
||||||
|
|
@ -777,15 +778,24 @@ function MaterialEditorGui::guiSync( %this, %material )
|
||||||
MaterialEditorPropertiesWindow-->castShadows.setValue((%material).castShadows);
|
MaterialEditorPropertiesWindow-->castShadows.setValue((%material).castShadows);
|
||||||
MaterialEditorPropertiesWindow-->castDynamicShadows.setValue((%material).castDynamicShadows);
|
MaterialEditorPropertiesWindow-->castDynamicShadows.setValue((%material).castDynamicShadows);
|
||||||
MaterialEditorPropertiesWindow-->translucentCheckbox.setValue((%material).translucent);
|
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)
|
switch$((%material).translucentBlendOp)
|
||||||
{
|
{
|
||||||
case "None": %selectedNum = 0;
|
case "None": %selectedNum = 0;
|
||||||
case "Mul": %selectedNum = 1;
|
case "preMul": %selectedNum = 1;
|
||||||
case "Add": %selectedNum = 2;
|
case "LerpAlpha": %selectedNum = 2;
|
||||||
case "AddAlpha": %selectedNum = 3;
|
case "Mul": %selectedNum = 3;
|
||||||
case "Sub": %selectedNum = 4;
|
case "": %selectedNum = 4;
|
||||||
case "LerpAlpha": %selectedNum = 5;
|
case "AddAlpha": %selectedNum = 5;
|
||||||
|
case "Sub": %selectedNum = 6;
|
||||||
}
|
}
|
||||||
MaterialEditorPropertiesWindow-->blendingTypePopUp.setSelected(%selectedNum);
|
MaterialEditorPropertiesWindow-->blendingTypePopUp.setSelected(%selectedNum);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue