wined3d: Load ModelView matrix for glLightfv calls.

Matteo Bruni matteo.mystral at gmail.com
Sat Apr 11 12:24:02 CDT 2015


2015-04-11 17:16 GMT+02:00 Joachim Priesner <joachim.priesner at web.de>:
> Analogous to the light() function in state.c, the correct ModelView matrix
> has to be loaded when glLightfv is called. The code to load/restore the
> matrix is copied from there.
> ---
>  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 1a1b6b0..2422982 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)))
> --
> 1.8.4.5

AFAICS this patch is correct. Thank you Joachim!



More information about the wine-devel mailing list