http://bugs.winehq.org/show_bug.cgi?id=47419 --- Comment #14 from Zeb Figura <z.figura12@gmail.com> --- I've looked further into it and done some disassembly. The game has what looks like a bug. It does something like this abbreviated C: static bool use_vidmem = true; /* address 4e6cd0 */ static IDirectDrawSurface *draw_surface; /* address 794190 */ create_primary() { DDSURFACEDESC desc = {sizeof(desc)}; if (use_vidmem) { desc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; desc.dwCaps = DDSCAPS_FLIP | DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX; desc.dwBackBufferCount = 1; } IDirectDraw_CreateSurface(ddraw, &desc, &frontbuffer); if (use_vidmem) IDirectDrawSurface_GetAttachedSurface(frontbuffer, &backbuffer); } setup() { ... IDirectDraw2_GetCaps(ddraw, &caps); if (!(caps.ddsCaps.dwCaps & DDSCAPS_FLIP)) use_vidmem = false; create_primary(); IDirectDrawSurface_GetDesc(frontbuffer, &desc); if (!(desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)) use_vidmem = false; ... } recreate_stuff() { ... if (backbuffer) IDirectDrawSurface_Release(backbuffer); create_primary(); ... } Problem comes when something later tries to blit to the backbuffer, and checks "backbuffer" for NULL. In the renderer=gdi/no3d case, with DDSCAPS_FLIP, it was created and destroyed, but the pointer was never cleared, so we get a crash. Without DDSCAPS_FLIP, we never created a backbuffer in the first place, so the game handles NULL there. With GL, we have VIDEOMEMORY, so we never clear use_vidmem, so when the reset happens we create a new backbuffer. -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.