Tbf I've yet to run into a game which I weren't able to launch in some way or another on Win10/11.Some games have issues on Windows 10 that cannot be remedied with dgvoodoo2, like failing to launch or crashing.
There were changes to DDraw in DX5 so there's that at least.Going by the corresponding DX release numbers, we apparently have DirectDraw 1, 2, 6 and 7.
I'm asking because your descrption of Direct3D 8 crashes would be consistent with a "software" type2 hypervisor, when the guest OS is relying on the host OS kernel and kernel-mode video driver. However this is used for lightweight, "container" type virtualization, when Windows OS versions are the same between host and VM, and VMWare Workstation is supposed to be type1 or fully isolated "hardware" hypervisor. Maybe I just don't understand how Direct3D is handled in the guest OS...I guess it's the second option. I'm running Windows 10 on the host PC. I then installed VMware Workstation, and then created a VM and installed XP.
Well, technically this game does use Direct3D 7 for something that's not very obvious.if I edit the game's page on pcgamingwiki, should I list it as using Direct3D?
I recall it was "Windows Game SDK", and there were literally like two games that actually used it - even the rudimental WinG had far more titles, including Windows ports of Doom, Civilization II, and SimCity 2000.DirectX 1.0 SDK can be found on archive.org
IDirectDraw2
and IDirectDrawSurface2
were added in DirectX 2.0 SDK, but they only have one or two new methods.Since you asked nicely... first is an unused parameter that was discarded anyway, and the other is also nothing much to talk about - a completely broken material system, i.e. object color and/or texture, if you calledWhat these differences do exactly?
ID3DMaterial::SetMaterial
after IDirect3D::CreateMaterial
Except no-one used these version numbers, since additions to the interfaces were minimal. I would just go with calling them all DirectDraw, and list the version of DirectX runtime the game ships with.Going by the corresponding DX release numbers, we apparently have DirectDraw 1, 2, 6 and 7.
That's an unnamed optional parameter that does something internally (or maybe it doesn't).I don't know what display mode "e" is.
It's not a comprehensive list, just a few hints to look for when you need to detect Direct3D version.I was going based on the table from page 1, since it doesn't have any DDraw related interfaces listed for 5.
Yep, it's corrected.I checked ddraw.h from SDK 5, and turns outDirectDrawSurface3
was introduced with this release,
A proper naming here would be "DirectX 6 DirectDraw" or something of the sorts I'd say.I would just go with calling them all DirectDraw, and list the version of DirectX runtime the game ships with.
I'm asking because your descrption of Direct3D 8 crashes would be consistent with a "software" type2 hypervisor, when the guest OS is relying on the host OS kernel and kernel-mode video driver. However this is used for lightweight, "container" type virtualization, when Windows OS versions are the same between host and VM, and VMWare Workstation is supposed to be type1 or fully isolated "hardware" hypervisor. Maybe I just don't understand how Direct3D is handled in the guest OS...
I suppose you run it on a modern PC with a recent video card - what kind of video driver is installed in the Windows XP VM?
Well, technically this game does use Direct3D 7 for something that's not very obvious, even though it's primatily rendering sprites with DirectDraw 7.
From the point of someone who builds a retro PC or installs a legacy OS in a VM, the important part is the executable statically links to the DLL and fails to load if it's missing.
But they just need to install the full DirectX 7 redistributable package to fix this.
So I would list it as DirectDraw and make a note about Direct3D 7.0 depedency.
Since you asked nicely... first is an unused parameter that was discarded anyway, and the other is also nothing much to talk about - a completely broken material system, i.e. object color and/or texture, if you calledID3DMaterial::SetMaterial
afterIDirect3D::CreateMaterial
I guess back then game developers wouldn't act surprised if they had to fix source code errors in SDK header files...
It's not a comprehensive list, just a few hints to look for when you need to detect Direct3D version.
Yep, it's corrected.
Ah. This starts to make sense now. Not sure why I assumed it to be type 1, when type 2 is mentioned everywhere including Wikipedia article on WMware Workstation.IINM VMware Workstation is type 2. The host is windows 10 64-bit with a GTX 1060 card. For the guest XP, the only video driver available is the one supplied by VMware through their "VMware Tools" guest additions.
Not crashes, I wrote d3d8 is mostly fine. It's just not handled as well as d3d9, and has lower performance (not too bad though), and visual glitches in some situations.
The main issue is older d3d games. Visually they seem to be ok (although I haven't tested many), but the frame rate is in low single digits.
That's the most likely reason, considering they had to actually ship an updated CD media to distribute this bug fix.So basically it was a bug in the source.
Might be one of the reasons DX3 was released just a short while after DX2.
Should be OK now!there is one too many D in these two though
DirectDraw::QueryInterface (this = 0C279CB0, riid = {aca12120-3356-11d1-8fcf-00c04fc29b4e} (?), ppvObject = 007D9A50)
Direct3D::QueryInterface (this = 0C456530, riid = ?, ppvObject = 007D9A50)
[dgVoodoo] ERROR: DirectDraw (0C279CB0)::QueryInterface: Creating aggregated D3D object has failed on DirectDraw.
[dgVoodoo] ERROR: DirectDraw (0C279CB0)::QueryInterface: Unknown interface (riid = {{aca12120-3356-11d1-8fcf-00c04fc29b4e}}) is being queried.
IID_IDDVideoAcceleratorContainer
. However such interface and IID/GUID were never defined in public Microsoft SDKs - though there is a similarily named IID_IDDVideoPortContainer
definition in DVP.h (DirectDrawVideoPort) from the DirectX 5.0 SDK, which seemed to implement a user-mode hook to Video Port Extensions in XDDM (i.e. Windows 2000 display driver model).IDDVideoAcceleratorContainer
was some internal DirectDraw interface retained for legacy DirectShow compatibility only (likely inherited from a proprietary unreleased iDirectDraw3
implementation for the ActiveMovie control in IE 3.0). QueryInterface
for IDirect3D7
to enumerate devices, then proceeds to create IDirect3DDevice7
using hardware rendering device IDirect3DHALDevice
, configures texture blending stages with SetTextureStageState
, and renders some triangles with DrawPrimitive
/DrawIndexedPrimitive
or DrawPrimitiveVB
/DrawIndexedPrimitiveVB
into a RenderTarget
surface, setting the textures with SetMaterial
/SetTexture
and the blending mode with SetRenderState
, then it does render the game content using Direct3D 7.Direct3D 2 (3 has the same interfaces) | Direct3D 5 | Direct3D 6 | Direct3D 7 |
---|---|---|---|
Jun 1996 | Aug 1997 | Aug 1998 | Sep 1999 |
IDirect3D IDirect3DDevice IDirect3DTexture IDirect3DMaterial IDirect3DViewport IDirect3D_Initialize IDirect3DDevice_Initialize IDirect3DDevice_CreateExecuteBuffer IDirect3DDevice_Execute IDirect3DDevice_Pick IDirect3DDevice_GetPickRecords IDirect3DDevice_CreateMatrix IDirect3DDevice_SetMatrix IDirect3DDevice_GetMatrix IDirect3DDevice_DeleteMatrix | IDirect3D2 IDirect3DRampDevice IDirect3DRGBDevice IDirect3DHALDevice IDirect3DMMXDevice IDirect3DDevice2 IDirect3DTexture2 IDirect3DMaterial2 IDirect3DViewport2 (x) _Initialize IDirect3D2_CreateDevice IDirect3DDevice2_SetCurrentViewport IDirect3DDevice2_GetCurrentViewport IDirect3DDevice2_SetRenderTarget IDirect3DDevice2_GetRenderTarget IDirect3DDevice2_Begin IDirect3DDevice2_BeginIndexed IDirect3DDevice2_Vertex IDirect3DDevice2_Index IDirect3DDevice2_End IDirect3DDevice2_GetRenderState IDirect3DDevice2_SetRenderState IDirect3DDevice2_GetLightState IDirect3DDevice2_SetLightState IDirect3DDevice2_SetTransform IDirect3DDevice2_GetTransform IDirect3DDevice2_MultiplyTransform IDirect3DDevice2_DrawPrimitive IDirect3DDevice2_DrawIndexedPrimitive IDirect3DDevice2_SetClipStatus IDirect3DDevice2_GetClipStatus | IDirect3D3 IDirect3DRefDevice IDirect3DNullDevice IDirect3DDevice3 IDirect3DMaterial3 IDirect3DViewport3 IDirect3DVertexBuffer (x) _SwapTextureHandles IDirect3DDevice3_DrawPrimitiveStrided IDirect3DDevice3_DrawIndexedPrimitiveStrided IDirect3DDevice3_DrawPrimitiveVB IDirect3DDevice3_DrawIndexedPrimitiveVB IDirect3DDevice3_ComputeSphereVisibility IDirect3DDevice3_GetTexture IDirect3DDevice3_SetTexture IDirect3DDevice3_GetTextureStageState IDirect3DDevice3_SetTextureStageState IDirect3DDevice3_ValidateDevice | IDirect3D7 IDirect3DTnLHalDevice IDirect3DDevice7 IDirect3DVertexBuffer7 (x) _CreateLight (x) _CreateMaterial (x) _CreateViewport (x) _FindDevice IDirect3DDevice7_SetViewport IDirect3DDevice7_GetViewport IDirect3DDevice7_SetMaterial IDirect3DDevice7_GetMaterial IDirect3DDevice7_SetLight IDirect3DDevice7_GetLight IDirect3DDevice7_BeginStateBlock IDirect3DDevice7_EndStateBlock IDirect3DDevice7_PreLoad IDirect3DDevice7_ApplyStateBlock IDirect3DDevice7_CaptureStateBlock IDirect3DDevice7_DeleteStateBlock IDirect3DDevice7_CreateStateBlock IDirect3DDevice7_Load IDirect3DDevice7_LightEnable IDirect3DDevice7_GetLightEnable IDirect3DDevice7_SetClipPlane IDirect3DDevice7_GetClipPlane IDirect3DDevice7_GetInfo (x) _GetStats (x) _AddViewport (x) _DeleteViewport (x) _NextViewport (x) _SetCurrentViewport (x) _GetCurrentViewport (x) _BeginIndexed (x) _Vertex (x) _Index (x) _End (x) _GetRenderState (x) _SetRenderState (x) _GetLightState (x) _SetLightState |
SetVertexShader
is followed by SetFVF
, then it's setting the vertex shader stage to fixed-function pipeline mode which uses fixed-function FVF (flexible vertex format) codes.