Closed WinterSnowfall closed 1 year ago
I'm not sure how to fix this properly, but long story short, doing:
HRESULT STDMETHODCALLTYPE BeginScene() { GetD3D9()->BeginScene(); return D3D_OK; }
makes it work just fine. Of course that's not very API conformant, since it looks like it's calling BeginScene() repeatedly and that's supposed to fail.
Since this game has been unplayable on Linux since like forever AFAIK, that's both great news and... surprisingly dumb with regards to what the game is doing.
So, thanks to @Blisto91, we now have a trace of the game on Windows native. It seems to be doing the same thing (see frames 106 & 107), namely calling BeginScene() twice with no EndScene() in between, but on native this WORKS and returns D3D_OK in both cases. Æææææ...
Since it's probably the first recorded case of a game doing this and because it technically breaks spec, I guess my workaround approach is fine???
Looks like it's calling Reset()
between the BeginScene()
calls.
It's one of those games that doesn't work properly even with WineD3D, but I noticed something off in a trace I took, which I think is worth investigating at least.
When starting the game you can hear the main menu background music, but nothing is rendered except for the mouse cursor. There are multiple failed calls to
IDirect3DDevice8::BeginScene
in the trace.Software information
Empires: Dawn of the Modern World (GOG)
System information
Apitrace file(s)
Empires_DMW.trace.tar.xz - captured with d8vk Empires_DMW.1.trace.tar.xz - captured with WineD3D
Log files