[Bug 11819] The Longest Journey Demo: characters rendered partially because of artifacts in the z-buffer

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Nov 10 13:23:32 CST 2011


Octavian Voicu <octavian.voicu at gmail.com> changed:

           What    |Removed                     |Added
                 CC|                            |octavian.voicu at gmail.com
            Summary|The longest journey demo:   |The Longest Journey Demo:
                   |Depth Stencil buffer        |characters rendered
                   |locking not implemented     |partially because of
                   |                            |artifacts in the z-buffer

--- Comment #37 from Octavian Voicu <octavian.voicu at gmail.com> 2011-11-10 13:23:32 CST ---
There are a bunch of issues here:

1. First of all, game uses only one z-buffer (no stencil buffers). It locks it
then immediately unlocks it, without ever accessing the memory (probably for
some kind of synchronization). I do have an initial implementation of
locking/unlocking, but depth/stencil surface code needs to be refactored.

Until that, we need to silence two fixmes (show only once) that pollute the
output to make the game playable:

fixme:d3d_surface:surface_load_location Unimplemented location SFLAG_INSYSMEM
for depth/stencil buffers.
fixme:d3d_surface:surface_unmap Depth / stencil buffer locking is not

2. The black rendered characters is a lighting-related issue, which I described
in http://bugs.winehq.org/show_bug.cgi?id=29052 and also included a patch.

3. Not specifically related to this bug report, but there is another issue with
the message box asking whether you want to quit the game showing up completely
gray. I have a hack for this in http://bugs.winehq.org/show_bug.cgi?id=28678,
but there's much work to be done until a patch is ready for submission.

4. Finally, the partially rendered characters issue is indeed related to the
z-buffer, but indirectly. Game uses IDirect3DViewport2::Clear(D3DCLEAR_ZBUFFER)
to clear the z-buffer, but the rectangles it clears are wrong. It decides what
rectangles need to be cleared in the z-buffer by transforming the bounding box
of characters using IDirect3DDevice2::TransformVertices(). Wine's
implementation of this method doesn't work when
IDirect3DViewport2::SetViewport2() is used to set the viewport. I already
tested a hackish patch that solves the issue, and currently working on tests
and a proper one.

With patches for 1, 2, 3, 4 graphics are flawless, but didn't test very much

I changed the title of the bug to reflect to be more accurate after my new
findings, and will update progress of fixing TransformVertices and conversion
between D3DVIEWPORT and D3DVIEWPORT2 here.

Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
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.

More information about the wine-bugs mailing list