http://bugs.winehq.org/show_bug.cgi?id=29052
Bug #: 29052 Summary: Incorrect handling of lit vertices causes models to render black in The Longest Journey Product: Wine Version: 1.3.32 Platform: x86 URL: http://games.softpedia.com/get/Games-Demo/The-Longest- Journey-161-Demo.shtml OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-ddraw AssignedTo: wine-bugs@winehq.org ReportedBy: octavian.voicu@gmail.com Classification: Unclassified
Created attachment 37430 --> http://bugs.winehq.org/attachment.cgi?id=37430 Patch to fix issue with black rendered characters.
IDirect3DDevice2 and IDirect3DDevice3 handle lighting differently than IDirect3DDevice7. Specifically, vertices which have colors but no normals (like D3DVT_LVERTEX or D3DFVF_LVERTEX) should bypass lighting calculations in the older interfaces. Wine handles them like in IDirect3DDevice7, rendering them black.
This makes the models in the game The Longest Journey render black. I wrote a series of tests that I submitted to wine-patches, but they need a bit more refactoring to go in. Links to relevant patches from the series are below:
http://source.winehq.org/patches/data/80669 http://source.winehq.org/patches/data/80673 http://source.winehq.org/patches/data/80670
I'm attaching a patch that fixes these issues, but I need to get the tests in before submitting it. It also needs a bit more thought on how older interfaces should handle render states that were introduced in later version of Direct3D (like D3DRS_LIGHTING).
This patch only fixes the issue with the black rendered characters. There is another issue that makes characters only render partially, which is tracked in http://bugs.winehq.org/show_bug.cgi?id=11819.