On 15.04.2013 10:24, Stefan Dösinger wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Am 2013-04-14 16:53, schrieb Rico Schüller:
- if (iface->lpVtbl != (const IDirect3DBaseTexture8Vtbl
*)&Direct3DTexture8_Vtbl + && iface->lpVtbl != (const IDirect3DBaseTexture8Vtbl *)&Direct3DCubeTexture8_Vtbl + && iface->lpVtbl != (const IDirect3DBaseTexture8Vtbl *)&Direct3DVolumeTexture8_Vtbl) + { + WARN("%p is not a valid IDirect3DBaseTexture8 interface.\n", iface); + return NULL; + }
A test would be a good idea.
Are you sure that the assert is the actual problem, and not some memory corruption that changes the vtable poiner? What does e.g. GetTexture do after a bogous SetTexture call?
Well, the app sets an already released texture. As we access some members (in this case wined3d_texture) we may get some trouble when the memory is reused with some other data as we have the guilty memory still bound somewhere in the pipeline.
I'm not sure what GetTexture does, a test might show it (I'll have a look). The problem might be, that we use some members, which native probably doesn't do in SetTexture. You couldn't call GetTexture in wine with uninitialized memory as we do currently, that's why I think using NULL is the way to go.
Please have a look at http://bugs.winehq.org/show_bug.cgi?id=33055 . Well I think there might be some memory corruption somewhere, but it doesn't have anything to do with the this bug as we use already freed memory in our implementation.
Cheers Rico