Signed-off-by: Paul Gofman gofmanp@gmail.com --- dlls/wined3d/utils.c | 25 +++++++++---------------- dlls/wined3d/wined3d_private.h | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 16 deletions(-)
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index ef469100fd..fb545cf610 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -6442,23 +6442,16 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context, settings->point_size = state->gl_primitive_type == GL_POINTS; settings->per_vertex_point_size = !!(si->use_map & 1u << WINED3D_FFP_PSIZE);
- if (state->render_states[WINED3D_RS_COLORVERTEX]) { - settings->diffuse_source = validate_material_colour_source(si->use_map, - state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE]); - settings->emissive_source = validate_material_colour_source(si->use_map, - state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE]); - settings->ambient_source = validate_material_colour_source(si->use_map, - state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE]); - settings->specular_source = validate_material_colour_source(si->use_map, - state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE]); - } - else - { - settings->diffuse_source = WINED3D_MCS_MATERIAL; - settings->emissive_source = WINED3D_MCS_MATERIAL; - settings->ambient_source = WINED3D_MCS_MATERIAL; - settings->specular_source = WINED3D_MCS_MATERIAL; + enum wined3d_material_color_source diffuse_source, emissive_source, + ambient_source, specular_source; + + wined3d_get_mcs(&diffuse_source, &emissive_source, &ambient_source, &specular_source, state, si); + + settings->diffuse_source = diffuse_source; + settings->emissive_source = emissive_source; + settings->ambient_source = ambient_source; + settings->specular_source = specular_source; }
for (i = 0; i < WINED3D_MAX_TEXTURES; ++i) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 34fa1d3ef3..716f5101c9 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4850,6 +4850,38 @@ static inline enum wined3d_material_color_source validate_material_colour_source return WINED3D_MCS_MATERIAL; }
+static inline void wined3d_get_mcs(enum wined3d_material_color_source *diffuse_source, + enum wined3d_material_color_source *emissive_source, enum wined3d_material_color_source *ambient_source, + enum wined3d_material_color_source *specular_source, const struct wined3d_state *state, + const struct wined3d_stream_info *si) +{ + if (state->render_states[WINED3D_RS_LIGHTING]) + { + if (state->render_states[WINED3D_RS_COLORVERTEX]) + { + *diffuse_source = validate_material_colour_source(si->use_map, + state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE]); + *emissive_source = validate_material_colour_source(si->use_map, + state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE]); + *ambient_source = validate_material_colour_source(si->use_map, + state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE]); + *specular_source = validate_material_colour_source(si->use_map, + state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE]); + } + else + { + *diffuse_source = *emissive_source = *ambient_source = + *specular_source = WINED3D_MCS_MATERIAL; + } + } + else + { + *diffuse_source = WINED3D_MCS_COLOR1; + *specular_source = WINED3D_MCS_COLOR2; + *emissive_source = *ambient_source = WINED3D_MCS_MATERIAL; + } +} + BOOL invert_matrix(struct wined3d_matrix *out, const struct wined3d_matrix *m) DECLSPEC_HIDDEN;
void compute_normal_matrix(float *normal_matrix, BOOL legacy_lighting,