Well, when doing proper Viewport support for DungeonSiege, I broke all D3D1 games... The reason is the following : AvP puts this : trace:ddraw:GL_IDirect3DDeviceImpl_7_SetViewport - dvMinZ = 0.000000 dvMaxZ = 0.000000 MotoRacer2 puts this : trace:ddraw:GL_IDirect3DDeviceImpl_7_SetViewport - dvMinZ = 1.000000 dvMaxZ = 65535.000000 And these values are both obviously wrong. So I suppose that these values were not actually used in D3D1 (or if they were, they were used for something else than OpenGL use them for :-) ). So I override them with the default 0.0 / 1.0 values (which was what the code did before my Viewport change in D3D7). Changelog: - Viewport hack to get some old D3D1 games to work - TRACEing fix -- Lionel Ulmer - http://www.bbrox.org/
--- dlls/ddraw_CVS/d3ddevice/main.c Sun Jun 1 20:56:09 2003 +++ dlls/ddraw/d3ddevice/main.c Tue Jun 3 18:20:02 2003 @@ -1380,7 +1380,9 @@ ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface); TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, (DWORD) D3DMatHandle, lpD3DMatrix); - dump_D3DMATRIX(lpD3DMatrix); + if (TRACE_ON(ddraw)) { + dump_D3DMATRIX(lpD3DMatrix); + } *((D3DMATRIX *) D3DMatHandle) = *lpD3DMatrix; return DD_OK; --- dlls/ddraw_CVS/d3dviewport.c Sun Jun 1 20:56:09 2003 +++ dlls/ddraw/d3dviewport.c Tue Jun 3 18:09:13 2003 @@ -185,6 +185,13 @@ This->use_vp2 = 0; memset(&(This->viewports.vp1), 0, sizeof(This->viewports.vp1)); memcpy(&(This->viewports.vp1), lpData, lpData->dwSize); + + /* Tests on two games shows that these values are never used properly so overide + them with proper ones :-) + */ + This->viewports.vp1.dvMinZ = 0.0; + This->viewports.vp1.dvMaxZ = 1.0; + return DD_OK; }