summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VertexShaderGen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/VertexShaderGen.cpp')
-rw-r--r--Source/Core/VideoCommon/VertexShaderGen.cpp44
1 files changed, 16 insertions, 28 deletions
diff --git a/Source/Core/VideoCommon/VertexShaderGen.cpp b/Source/Core/VideoCommon/VertexShaderGen.cpp
index 5795597ff7..7f3e00609a 100644
--- a/Source/Core/VideoCommon/VertexShaderGen.cpp
+++ b/Source/Core/VideoCommon/VertexShaderGen.cpp
@@ -443,38 +443,26 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
out.Write("}}\n");
}
- // The number of colors available to TEV is determined by numColorChans.
- // We have to provide the fields to match the interface, so set to zero if it's not enabled.
-
- // When per-pixel lighting is enabled, the vertex colors are passed through unmodified so we can
- // evaluate the lighting in the same manner in the pixel shader.
- if (uid_data->numColorChans == 0)
+ if (per_pixel_lighting)
{
- if ((uid_data->components & VB_HAS_COL0) != 0)
- {
- if (per_pixel_lighting)
- out.Write("o.colors_0 = vertex_color_0;\n");
- else
- out.Write("o.colors_0 = rawcolor0;\n");
- }
- else
- {
- out.Write("o.colors_0 = float4(0.0, 0.0, 0.0, 0.0);\n");
- }
+ // When per-pixel lighting is enabled, the vertex colors are passed through
+ // unmodified so we can evaluate the lighting in the pixel shader.
+
+ // Lighting is also still computed in the vertex shader since it can be used to
+ // generate texture coordinates. We generated them above, so now the colors can
+ // be reverted to their previous stage.
+ out.Write("o.colors_0 = vertex_color_0;\n");
+ out.Write("o.colors_1 = vertex_color_1;\n");
+ // Note that the numColorChans logic is performed in the pixel shader.
}
- if (uid_data->numColorChans <= 1)
+ else
{
- if ((uid_data->components & VB_HAS_COL1) != 0)
- {
- if (per_pixel_lighting)
- out.Write("o.colors_1 = vertex_color_1;\n");
- else
- out.Write("o.colors_1 = rawcolor1;\n");
- }
- else
- {
+ // The number of colors available to TEV is determined by numColorChans.
+ // We have to provide the fields to match the interface, so set to zero if it's not enabled.
+ if (uid_data->numColorChans == 0)
+ out.Write("o.colors_0 = float4(0.0, 0.0, 0.0, 0.0);\n");
+ if (uid_data->numColorChans <= 1)
out.Write("o.colors_1 = float4(0.0, 0.0, 0.0, 0.0);\n");
- }
}
// clipPos/w needs to be done in pixel shader, not here