Commit 43b6bfbc authored by Matteo Bruni's avatar Matteo Bruni Committed by Alexandre Julliard

wined3d: Ignore lights out of maximum range for legacy FFP lighting too.

parent c329ee56
...@@ -7101,6 +7101,17 @@ static void test_specular_lighting(void) ...@@ -7101,6 +7101,17 @@ static void test_specular_lighting(void)
100.0f, 100.0f,
0.0f, 0.0f,
1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
},
point_far =
{
sizeof(D3DLIGHT2),
D3DLIGHT_POINT,
{{1.0f}, {1.0f}, {1.0f}, {0.0f}},
{{0.0f}, {0.0f}, {0.1f}},
{{0.0f}, {0.0f}, {0.0f}},
1.0f,
0.0f,
1.0f, 0.0f, 0.0f,
}; };
static const struct expected_color static const struct expected_color
{ {
...@@ -7166,6 +7177,18 @@ static void test_specular_lighting(void) ...@@ -7166,6 +7177,18 @@ static void test_specular_lighting(void)
{160, 360, 0x00000000}, {160, 360, 0x00000000},
{320, 360, 0x00000000}, {320, 360, 0x00000000},
{480, 360, 0x00000000}, {480, 360, 0x00000000},
},
expected_point_far[] =
{
{160, 120, 0x00000000},
{320, 120, 0x00000000},
{480, 120, 0x00000000},
{160, 240, 0x00000000},
{320, 240, 0x00ffffff},
{480, 240, 0x00000000},
{160, 360, 0x00000000},
{320, 360, 0x00000000},
{480, 360, 0x00000000},
}; };
static const struct static const struct
{ {
...@@ -7186,6 +7209,8 @@ static void test_specular_lighting(void) ...@@ -7186,6 +7209,8 @@ static void test_specular_lighting(void)
sizeof(expected_parallelpoint) / sizeof(expected_parallelpoint[0])}, sizeof(expected_parallelpoint) / sizeof(expected_parallelpoint[0])},
{&point_side, 0.0f, expected_point_side, {&point_side, 0.0f, expected_point_side,
sizeof(expected_point_side) / sizeof(expected_point_side[0])}, sizeof(expected_point_side) / sizeof(expected_point_side[0])},
{&point_far, 1.0f, expected_point_far,
sizeof(expected_point_far) / sizeof(expected_point_far[0])},
}; };
IDirect3D2 *d3d; IDirect3D2 *d3d;
IDirect3DDevice2 *device; IDirect3DDevice2 *device;
......
...@@ -4156,6 +4156,17 @@ static void test_specular_lighting(void) ...@@ -4156,6 +4156,17 @@ static void test_specular_lighting(void)
100.0f, 100.0f,
0.0f, 0.0f,
1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
},
point_far =
{
sizeof(D3DLIGHT2),
D3DLIGHT_POINT,
{{1.0f}, {1.0f}, {1.0f}, {0.0f}},
{{0.0f}, {0.0f}, {0.1f}},
{{0.0f}, {0.0f}, {0.0f}},
1.0f,
0.0f,
1.0f, 0.0f, 0.0f,
}; };
static const struct expected_color static const struct expected_color
{ {
...@@ -4221,6 +4232,18 @@ static void test_specular_lighting(void) ...@@ -4221,6 +4232,18 @@ static void test_specular_lighting(void)
{160, 360, 0x00000000}, {160, 360, 0x00000000},
{320, 360, 0x00000000}, {320, 360, 0x00000000},
{480, 360, 0x00000000}, {480, 360, 0x00000000},
},
expected_point_far[] =
{
{160, 120, 0x00000000},
{320, 120, 0x00000000},
{480, 120, 0x00000000},
{160, 240, 0x00000000},
{320, 240, 0x00ffffff},
{480, 240, 0x00000000},
{160, 360, 0x00000000},
{320, 360, 0x00000000},
{480, 360, 0x00000000},
}; };
static const struct static const struct
{ {
...@@ -4246,6 +4269,8 @@ static void test_specular_lighting(void) ...@@ -4246,6 +4269,8 @@ static void test_specular_lighting(void)
sizeof(expected_parallelpoint) / sizeof(expected_parallelpoint[0])}, sizeof(expected_parallelpoint) / sizeof(expected_parallelpoint[0])},
{&point_side, TRUE, 0.0f, expected_point_side, {&point_side, TRUE, 0.0f, expected_point_side,
sizeof(expected_point_side) / sizeof(expected_point_side[0])}, sizeof(expected_point_side) / sizeof(expected_point_side[0])},
{&point_far, TRUE, 1.0f, expected_point_far,
sizeof(expected_point_far) / sizeof(expected_point_far[0])},
}; };
IDirect3D3 *d3d; IDirect3D3 *d3d;
IDirect3DDevice3 *device; IDirect3DDevice3 *device;
......
...@@ -7720,6 +7720,7 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer ...@@ -7720,6 +7720,7 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
{ {
shader_addline(buffer, "dst.y = (ffp_light[%u].range - dst.y) / ffp_light[%u].range;\n", idx, idx); shader_addline(buffer, "dst.y = (ffp_light[%u].range - dst.y) / ffp_light[%u].range;\n", idx, idx);
shader_addline(buffer, "dst.z = dst.y * dst.y;\n"); shader_addline(buffer, "dst.z = dst.y * dst.y;\n");
shader_addline(buffer, "if (dst.y > 0.0)\n{\n");
} }
else else
{ {
...@@ -7732,14 +7733,12 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer ...@@ -7732,14 +7733,12 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
shader_addline(buffer, "ambient += ffp_light[%u].ambient.xyz * att;\n", idx); shader_addline(buffer, "ambient += ffp_light[%u].ambient.xyz * att;\n", idx);
if (!settings->normal) if (!settings->normal)
{ {
if (!legacy_lighting) shader_addline(buffer, "}\n");
shader_addline(buffer, "}\n");
continue; continue;
} }
shader_addline(buffer, "dir = normalize(dir);\n"); shader_addline(buffer, "dir = normalize(dir);\n");
shader_glsl_ffp_vertex_lighting_footer(buffer, settings, i); shader_glsl_ffp_vertex_lighting_footer(buffer, settings, i);
if (!legacy_lighting) shader_addline(buffer, "}\n");
shader_addline(buffer, "}\n");
} }
for (i = 0; i < settings->spot_light_count; ++i, ++idx) for (i = 0; i < settings->spot_light_count; ++i, ++idx)
...@@ -7752,6 +7751,7 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer ...@@ -7752,6 +7751,7 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
{ {
shader_addline(buffer, "dst.y = (ffp_light[%u].range - dst.y) / ffp_light[%u].range;\n", idx, idx); shader_addline(buffer, "dst.y = (ffp_light[%u].range - dst.y) / ffp_light[%u].range;\n", idx, idx);
shader_addline(buffer, "dst.z = dst.y * dst.y;\n"); shader_addline(buffer, "dst.z = dst.y * dst.y;\n");
shader_addline(buffer, "if (dst.y > 0.0)\n{\n");
} }
else else
{ {
...@@ -7775,13 +7775,11 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer ...@@ -7775,13 +7775,11 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
shader_addline(buffer, "ambient += ffp_light[%u].ambient.xyz * att;\n", idx); shader_addline(buffer, "ambient += ffp_light[%u].ambient.xyz * att;\n", idx);
if (!settings->normal) if (!settings->normal)
{ {
if (!legacy_lighting) shader_addline(buffer, "}\n");
shader_addline(buffer, "}\n");
continue; continue;
} }
shader_glsl_ffp_vertex_lighting_footer(buffer, settings, i); shader_glsl_ffp_vertex_lighting_footer(buffer, settings, i);
if (!legacy_lighting) shader_addline(buffer, "}\n");
shader_addline(buffer, "}\n");
} }
for (i = 0; i < settings->directional_light_count; ++i, ++idx) for (i = 0; i < settings->directional_light_count; ++i, ++idx)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment