Instructions:
- Download the dxwrapper.zip and unzip it to a folder.
- Determine which stub .dll file is needed for the game. This depends on many factors which will be explained on page created later. Common stub dll's to use are
ddraw.dll
,d3d8.dll
,d3d9.dll
,dsound.dll
orwinmm.dll
. You only need to choose one stub file to load dxwrapper into the game. - Copy this .dll file from the 'Stub' folder plus the
dxwrapper.dll
anddxwrapper.ini
files into the game's installation directory, next to the main executable file. For some games the main executable is in a subdirectory (like 'Bin', 'Exe' or 'App') so the files will need to be copied into that directory. Overwriting existing game files is not usually recommended. Always backup any files before overwriting them. - Open up the
dxwrapper.ini
file in a text editor and enable the settings needed for the game.
Note: Try the options under the [Compatibility]
section first. For many games these are all that are needed. See the Configuration for details on the options.
What's New?
- Added support for converting Direct3D9 to Direct3D9Ex (
D3d9to9Ex
) - Added support for multiple monitors with
dd7to9
- Added support for MipMaps in GetDC() (#388)
- Added support for DrawPrimitiveStrided(), DrawIndexedPrimitiveStrided() and ProcessVerticesStrided()
- Added support for TransformVertices()
- Added support for GetBackgroundDepth(), SetBackgroundDepth()
- Added support for LightElements()
- Added support for 'D3DVOP_LIGHT' ProcessVertices()
- Added support for GUID_NULL sent into EnumZBufferFormats()
- Added support for video memory query of DDSCAPS_PRIMARYSURFACE
- Added support for scissor clip test to clip draw calls
- Added support for clipper with GetDC() and Blt()
- Added support for depth fill and depth buffer Blt()
- Added support for viewport homogeneous scaling
- Added support for both DDSCL_FULLSCREEN and DDSCL_NORMAL flags in SetDisplayMode()
- Added bypass to allow Blt with DDBLT_ALPHAEDGEBLEND alpha flag to work
- Added ability to configure settings via environment variables. (#395)
- Added
FixPerfCounterUptime
option to fix issues with some games when PerformanceCounter is too large (uptime or CPU frequency is too large) - Added
DdrawExtraEmulationSize
option to expand the size of the surface to prevent buffer overflow in some games - Added
DdrawUseDirect3D9Caps
option to allow DDrawCompat to use Direct3D9 caps (#328) - Added
DdrawClampVertexZDepth
option to clamp z value in vertices - Added
SetPOW2Caps
option to control D3DPTEXTURECAPS_POW2 and D3DPTEXTURECAPS_NONPOW2CONDITIONAL flags for better compatibility - Added sleep when creating device from a separate thread to allow CPU to switch to device creation thread
- Added different sized Index Buffers to reduce amount of data copied into video memory
- Added screen reset on Release() and Reset() to fix a few issues
- Added delay to prevent loading of System32 ddraw.dll, d3d8.dll, or dinput.dll unless needed
- Added ability to delete Direct3D9 interfaces on release when using
dd7to9
to reduce memory overhead - Added ability to redraw entire surface after device loss (alt+tab)
- Added emulation for video memory zbuffer Lock()
- Added emulation support for vertex buffer Lock()
- Added abilty to reuse Direct3D9 StateBlock interfaces addresses
- Added pitch and surface to dummy surface lock to help prevent crash in games that use a failed Lock() call
- Added log the full Command Line Interface (CLI)
- Finished implementation of FindDevice()
- Finished implementation of SetClipList() and GetClipList()
- Updated licensing files and ensured license file is in GitHub builds
- Updated vetex buffer to use m_IDirect3DDeviceX interface rather than d3d9Device
- Updated so D3DFMT_A8R8G8B8 as not requiring for DC emulation
- Updated critical section to use DD for primary surface
- Better handling of DirectDrawEnumerate()
- Better handling of
DdrawWrapper
andDDrawCompat
together - Better handling of MipMaps UniquenessValue
- Better vertex handling to improve draw and vertex processing performance
- Better memory handling by using heap allocation for CONFIG::Init()
- Better memory handling by only creating shadow surface when needed
- Renamed
EnvironmentMapCubeFix
toEnvironmentCubeMapFix
and disabled by default - Moved limit frame rate to run after Present
- Fixed an issue where some games use uninitialized pointer in CreateFileA struct
- Fixed window border and zoom to fix mismatch in window size and buffer size (#312)
- Fixed shadow surface when using textures
- Fixed reference issue with MipMap context surfaces
- Fixed how specular light worked in Light2 struct
- Fixed device lost behavoir (alt+tab) for many games
- Fixed a potential crash in the stub
- Fixed device states when games use multiple devices simultaneously
- Fixed compiler warnings from MemoryModule
- Fixed some issues with Blt() invalid rect testing
- Fixed an issue where light and transform state may not match device state
- Fixed issue where render target may not use video memory
- Fixed window size and style in some games by no longer modifying the sysmenu window style
- Fixed GDI conflicts in some games by removing
DDrawCompat
GDI hooks - Fixed texture Lock() issue by removing D3DLOCK_DONOTWAIT flag
- Removed licensed code for: WineD3D, reactos, doom3.gpl, diablo-ddrawwrapper, cnc-ddraw, DSoundCtrl, DxWnd, OllyDbg, noser-sandbox, SilentPatchFarCry, Ultimate ASI Loader, and Aqrit's ddwrapper