[PATCH 2/5] wined3d: Handle stateblock capture for default lights created while recording.
Henri Verbeet
hverbeet at codeweavers.com
Mon Jan 4 14:33:11 CST 2010
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;
+ }
}
}
}
--
1.6.4.4
More information about the wine-patches
mailing list