Henri Verbeet : wined3d: Handle stateblock capture for default lights created while recording.

Alexandre Julliard julliard at winehq.org
Tue Jan 5 11:37:51 CST 2010


Module: wine
Branch: master
Commit: f5c8153eddecd709bbcb15fd1bae110a16bf0029
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f5c8153eddecd709bbcb15fd1bae110a16bf0029

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Jan  4 21:33:11 2010 +0100

wined3d: Handle stateblock capture for default lights created while recording.

For non-recorded stateblocks a light always exists in the device stateblock as
well, since that's where it's copied from. However, when SetLightEnable() is
called for a light that didn't a exist yet while recording a stateblock, the
light is only created on the recorded stateblock.

---

 dlls/wined3d/stateblock.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index 03c3e73..48f9eac 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -573,8 +573,17 @@ static void record_lights(IWineD3DStateBlockImpl *This, const IWineD3DStateBlock
 
             if (!updated)
             {
-                ERR("Light %u in stateblock %p does not exist in device stateblock %p.\n",
+                /* This can happen if the light was originally created as a
+                 * default light for SetLightEnable() while recording. */
+                WARN("Light %u in stateblock %p does not exist in device stateblock %p.\n",
                         src->OriginalIndex, This, targetStateBlock);
+
+                src->OriginalParms = WINED3D_default_light;
+                if (src->glIndex != -1)
+                {
+                    This->activeLights[src->glIndex] = NULL;
+                    src->glIndex = -1;
+                }
             }
         }
     }




More information about the wine-cvs mailing list