瀏覽代碼

Add material emissive color in LitSolid shader also when not using emissive map. Default material emissive color back to zero.

Lasse Öörni 12 年之前
父節點
當前提交
7de753e08c

+ 7 - 2
Bin/CoreData/Shaders/GLSL/LitSolid.frag

@@ -94,6 +94,7 @@ void main()
 
         #ifdef AMBIENT
             finalColor += cAmbientColor * diffColor.rgb;
+            finalColor += cMatEmissiveColor;
             gl_FragColor = vec4(GetFog(finalColor, vLightVec.w), diffColor.a);
         #else
             gl_FragColor = vec4(GetLitFog(finalColor, vLightVec.w), diffColor.a);
@@ -136,8 +137,10 @@ void main()
         #ifdef LIGHTMAP
             finalColor += texture2D(sEmissiveMap, vTexCoord2).rgb * diffColor.rgb;
         #endif
-        #ifdef EMISSIVE
+        #ifdef EMISSIVEMAP
             finalColor += cMatEmissiveColor * texture2D(sEmissiveMap, vTexCoord).rgb;
+        #else
+            finalColor += cMatEmissiveColor;
         #endif
 
         gl_FragData[0] = vec4(GetFog(finalColor, vVertexLight.a), 1.0);
@@ -176,8 +179,10 @@ void main()
         #ifdef LIGHTMAP
             finalColor += texture2D(sEmissiveMap, vTexCoord2).rgb * diffColor.rgb;
         #endif
-        #ifdef EMISSIVE
+        #ifdef EMISSIVEMAP
             finalColor += cMatEmissiveColor * texture2D(sEmissiveMap, vTexCoord).rgb;
+        #else
+            finalColor += cMatEmissiveColor;
         #endif
 
         gl_FragColor = vec4(GetFog(finalColor, vVertexLight.a), diffColor.a);

+ 1 - 1
Bin/CoreData/Shaders/GLSL/LitSolid.xml

@@ -37,7 +37,7 @@
         <variation name="" />
         <variation name="LightMap" define="LIGHTMAP" />
         <variation name="AO" define="AO" />
-        <variation name="Emissive" define="EMISSIVE" />
+        <variation name="Emissive" define="EMISSIVEMAP" />
         <option name="AlphaMask" define="ALPHAMASK" require="DIFFMAP" />
         <option name="Ambient" define="AMBIENT" require="PERPIXEL" />
         <variation name="" define="AMBIENT" />

+ 7 - 2
Bin/CoreData/Shaders/HLSL/LitSolid.hlsl

@@ -236,6 +236,7 @@ void PS(float2 iTexCoord : TEXCOORD0,
     
         #ifdef AMBIENT
             finalColor += cAmbientColor * diffColor.rgb;
+            finalColor += cMatEmissiveColor;
             oColor = float4(GetFog(finalColor, iLightVec.w), diffColor.a);
         #else
             oColor = float4(GetLitFog(finalColor, iLightVec.w), diffColor.a);
@@ -281,8 +282,10 @@ void PS(float2 iTexCoord : TEXCOORD0,
         #ifdef LIGHTMAP
             finalColor += tex2D(sEmissiveMap, iTexCoord2).rgb * diffColor.rgb;
         #endif
-        #ifdef EMISSIVE
+        #ifdef EMISSIVEMAP
             finalColor += cMatEmissiveColor * tex2D(sEmissiveMap, iTexCoord).rgb;
+        #else
+            finalColor += cMatEmissiveColor;
         #endif
 
         oColor = float4(GetFog(finalColor, iVertexLight.a), 1.0);
@@ -319,8 +322,10 @@ void PS(float2 iTexCoord : TEXCOORD0,
         #ifdef LIGHTMAP
             finalColor += tex2D(sEmissiveMap, iTexCoord2).rgb * diffColor.rgb;
         #endif
-        #ifdef EMISSIVE
+        #ifdef EMISSIVEMAP
             finalColor += cMatEmissiveColor * tex2D(sEmissiveMap, iTexCoord).rgb;
+        #else
+            finalColor += cMatEmissiveColor;
         #endif
 
         oColor = float4(GetFog(finalColor, iVertexLight.a), diffColor.a);

+ 1 - 1
Bin/CoreData/Shaders/HLSL/LitSolid.xml

@@ -37,7 +37,7 @@
         <variation name="" />
         <variation name="LightMap" define="LIGHTMAP" />
         <variation name="AO" define="AO" />
-        <variation name="Emissive" define="EMISSIVE" />
+        <variation name="Emissive" define="EMISSIVEMAP" />
         <option name="AlphaMask" define="ALPHAMASK" require="DIFFMAP" />
         <option name="Ambient" define="AMBIENT" require="PERPIXEL" />
         <variation name="" define="AMBIENT" />

+ 2 - 2
Source/Engine/Graphics/Material.cpp

@@ -510,8 +510,8 @@ void Material::ResetToDefaults()
     SetShaderParameter("UOffset", Vector4(1.0f, 0.0f, 0.0f, 0.0f));
     SetShaderParameter("VOffset", Vector4(0.0f, 1.0f, 0.0f, 0.0f));
     SetShaderParameter("MatDiffColor", Vector4::ONE);
-    SetShaderParameter("MatEmissiveColor", Vector4::ONE);
-    SetShaderParameter("MatEnvMapColor", Vector4::ONE);
+    SetShaderParameter("MatEmissiveColor", Vector3::ZERO);
+    SetShaderParameter("MatEnvMapColor", Vector3::ONE);
     SetShaderParameter("MatSpecColor", Vector4(0.0f, 0.0f, 0.0f, 1.0f));
     
     cullMode_ = CULL_CCW;