wined3d: Ignore lights out of maximum range for legacy FFP lighting too.
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c329ee5673
commit
43b6bfbc37
|
@ -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)
|
||||||
{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)
|
||||||
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)
|
||||||
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)
|
||||||
{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)
|
||||||
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
|
||||||
{
|
{
|
||||||
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
|
||||||
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
|
||||||
{
|
{
|
||||||
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
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue