[6/13]D3D: Index buffer fixes
Mirek
thunder.m at czela.net
Fri Feb 23 14:44:49 CST 2007
Thanks! This patch fixed Oblivion and even Flatout 2!
Mirek
Stefan Dösinger napsal(a):
> Am Freitag 23 Februar 2007 21:20 schrieb Mirek:
>> Stefan Dösinger napsal(a):
>>> Am Mittwoch 21 Februar 2007 00:22 schrieb Mirek:
>>>> Some games are still broken with latest 13 patches from your tree.
>>>> Oblivion still hangs while loading game and Flatout 2 crashed after 2
>>>> seconds with this output:
>>> Can you try to add a return; at the beginning of CreateIndexBufferVBO()
>>> in dlls/wined3d/device.c, before the ENTER_GL()? If that does not fix the
>>> regressions then some different patches added other breakage.
>> Hi, regression in Flatout 2 is bigger i should do regression testing and
>> find patch which broke start of game, this doesn't fix it, but Oblivion
>> with this hack works without problems (23.02.2007 CVS).
>>
>> Mirek
> Can you test the attached patch with oblivion?
>
>
>
> ------------------------------------------------------------------------
>
> From faa5d7a0b710ded8f49db6337eb880cc4cd05e8b Mon Sep 17 00:00:00 2001
> From: Stefan Doesinger <stefan at codeweavers.com>
> Date: Fri, 23 Feb 2007 17:16:56 +0100
> Subject: [PATCH] WineD3D: Index buffer creation adjustments
>
> Index buffer creation changes the bound gl buffer, thus the state has to
> be dirtified, simmilar to locking
>
> In an error case the function returned without calling LEAVE_GL()
> ---
> dlls/wined3d/device.c | 8 ++++++--
> 1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
> index b1e9c2d..500a857 100644
> --- a/dlls/wined3d/device.c
> +++ b/dlls/wined3d/device.c
> @@ -447,6 +447,11 @@ static void CreateIndexBufferVBO(IWineD3DDeviceImpl *This, IWineD3DIndexBufferIm
> GLenum error, glUsage;
> TRACE("Creating VBO for Index Buffer %p\n", object);
>
> + /* The following code will modify the ELEMENT_ARRAY_BUFFER binding, make sure it is
> + * restored on the next draw
> + */
> + IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER);
> +
> ENTER_GL();
> while(glGetError());
>
> @@ -454,8 +459,7 @@ static void CreateIndexBufferVBO(IWineD3DDeviceImpl *This, IWineD3DIndexBufferIm
> error = glGetError();
> if(error != GL_NO_ERROR || object->vbo == 0) {
> ERR("Creating a vbo failed, continueing without vbo for this buffer\n");
> - object->vbo = 0;
> - return;
> + goto out;
> }
>
> GL_EXTCALL(glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, object->vbo));
More information about the wine-devel
mailing list