summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VertexShaderGen.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2017-11-21 18:54:11 +1000
committerStenzek <stenzek@gmail.com>2017-11-22 01:52:18 +1000
commitefb97598629b96378edd783af82936185d8a99ce (patch)
tree6be0e38fd495292ee5f5d63471732164254cccac /Source/Core/VideoCommon/VertexShaderGen.cpp
parent18c1bf19cac3b4299c55db35117f1383a5c80318 (diff)
LightingShaderGen: Always calculate lighting for both color channels
Cel-damage uses the color from the lighting stage of the vertex pipeline as texture coordinates, but sets numColorChans to zero. We now calculate the colors in all cases, but override the color before writing it from the vertex shader if numColorChans is set to a lower value.
Diffstat (limited to 'Source/Core/VideoCommon/VertexShaderGen.cpp')
-rw-r--r--Source/Core/VideoCommon/VertexShaderGen.cpp35
1 files changed, 17 insertions, 18 deletions
diff --git a/Source/Core/VideoCommon/VertexShaderGen.cpp b/Source/Core/VideoCommon/VertexShaderGen.cpp
index a02f801896..d6f65b12b4 100644
--- a/Source/Core/VideoCommon/VertexShaderGen.cpp
+++ b/Source/Core/VideoCommon/VertexShaderGen.cpp
@@ -239,24 +239,8 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
"float3 ldir, h, cosAttn, distAttn;\n"
"float dist, dist2, attn;\n");
- if (uid_data->numColorChans == 0)
- {
- if (uid_data->components & VB_HAS_COL0)
- out.Write("o.colors_0 = rawcolor0;\n");
- else
- out.Write("o.colors_0 = float4(1.0, 1.0, 1.0, 1.0);\n");
- }
-
- GenerateLightingShaderCode(out, uid_data->lighting, uid_data->components, uid_data->numColorChans,
- "rawcolor", "o.colors_");
-
- if (uid_data->numColorChans < 2)
- {
- if (uid_data->components & VB_HAS_COL1)
- out.Write("o.colors_1 = rawcolor1;\n");
- else
- out.Write("o.colors_1 = o.colors_0;\n");
- }
+ GenerateLightingShaderCode(out, uid_data->lighting, uid_data->components, "rawcolor",
+ "o.colors_");
// transform texcoords
out.Write("float4 coord = float4(0.0, 0.0, 1.0, 1.0);\n");
@@ -398,6 +382,21 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
out.Write("}\n");
}
+ if (uid_data->numColorChans == 0)
+ {
+ if (uid_data->components & VB_HAS_COL0)
+ out.Write("o.colors_0 = rawcolor0;\n");
+ else
+ out.Write("o.colors_0 = float4(1.0, 1.0, 1.0, 1.0);\n");
+ }
+ if (uid_data->numColorChans < 2)
+ {
+ if (uid_data->components & VB_HAS_COL1)
+ out.Write("o.colors_1 = rawcolor1;\n");
+ else
+ out.Write("o.colors_1 = o.colors_0;\n");
+ }
+
// clipPos/w needs to be done in pixel shader, not here
out.Write("o.clipPos = o.pos;\n");