http://bugs.winehq.org/show_bug.cgi?id=22983
--- Comment #4 from Stefan Dösinger stefandoesinger@gmx.at 2010-10-11 06:17:39 CDT --- Fyi, the cause for the black screens is an exception. The exception is caught by the game, so it doesn't fully crash, but the rendering thread is dead.
The game tries to draw geometry without position data with the fixed function pipeline. The geometry comes from a dynamic vertex buffer. With map_buffer_range this buffer has a GL VBO, because of that the opengl vertex array API is used. OpenGL sees that there's no position data, returns an error and doesn't draw.
Without the VBO, the immediate mode drawing code(drawStridedSlow) is entered. It assumes that position data is available, tries to dereference the NULL pointer and crashes.
The correct fix is to write a test for the return value, check for fixed function drawing without position data, return D3D_OK or D3DERR_INVALIDCALL and don't attempt to draw.