Bläddra i källkod

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

Areloch 5 år sedan
förälder
incheckning
27ee09e491

+ 1 - 0
Engine/source/materials/materialDefinition.cpp

@@ -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." },

+ 1 - 0
Engine/source/materials/materialDefinition.h

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

+ 6 - 0
Engine/source/materials/processedMaterial.cpp

@@ -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;

+ 4 - 0
Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp

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

+ 4 - 0
Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp

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

+ 21 - 13
Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.cs

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