From 8fff427bc0cc13e5e081da7a90af8c660e667698 Mon Sep 17 00:00:00 2001 From: Joachim Priesner Date: Sat, 11 Apr 2015 17:16:52 +0200 Subject: [PATCH] wined3d: Load ModelView matrix for glLightfv calls. Analogous to the light() function in state.c, the correct ModelView matrix has to be loaded when glLightfv is called. --- dlls/wined3d/glsl_shader.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 1a1b6b01fc4..2422982614f 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -7208,6 +7208,11 @@ void glsl_vertex_pipe_view(struct wined3d_context *context, const struct wined3d context->constant_update_mask |= WINED3D_SHADER_CONST_FFP_MODELVIEW; + /* Light settings are affected by the ModelView transform in OpenGL, the View transform in Direct3D. */ + gl_info->gl_ops.gl.p_glMatrixMode(GL_MODELVIEW); + gl_info->gl_ops.gl.p_glPushMatrix(); + gl_info->gl_ops.gl.p_glLoadMatrixf(&state->transforms[WINED3D_TS_VIEW]._11); + for (k = 0; k < gl_info->limits.lights; ++k) { if (!(light = state->lights[k])) @@ -7218,6 +7223,8 @@ void glsl_vertex_pipe_view(struct wined3d_context *context, const struct wined3d checkGLcall("glLightfv dirn"); } + gl_info->gl_ops.gl.p_glPopMatrix(); + for (k = 0; k < gl_info->limits.clipplanes; ++k) { if (!isStateDirty(context, STATE_CLIPPLANE(k)))