ddwrapper.zip ( src included ) | |||||||||||||
ddwrapper works by providing a proxy DLL, which the application connects to and treats like the real DDRAW.DLL. It intercepts ddraw calls and performs various actions before forwarding to the real DirectDraw interface. *** Usage *** Extract the included ddraw.dll and aqrit.cfg files to the same directory as your target executable. Edit the config file as wanted. ( see below for possible options ) Warning: Do NOT overwrite your system ddraw.dll! Warning: Windows likes to "virtualize" the config file if it resides within the "Program Files" directory. You may also like DxWnd, dgVoodoo 2, WineD3D (builds), or Microsoft Application Compatibility Toolkit (ACT) Note for developers: improved "wrapper" code here but it doesn't contain any compatibility "fixes". | |||||||||||||
|
DDBLTFX_MIRRORLEFTRIGHT and DDBLTFX_MIRRORUPDOWN flags are unsupported on Windows 2000 and later and are never passed to the driver.
[ Use GDI32.StretchBlt() to mirror onto an intermediate surface which is then passed to Blt(). Not needed if using DirectDraw's Hardware Emulation Layer. |
||||||||||||
|
DDBLTFX_NOTEARING flag is unsupported on Windows 2000 and later and is never passed to the driver.
[Microsoft] If DDBLTFX_NOTEARING then WaitForVerticalBlank() before the Blt(). (also see FakeVsync) |
||||||||||||
|
8-bit color palette entires are not shared properly on Windows Vista and later, which results in psychedelic colors. Sets an undocumented hack by modifing an internal DirectDraw structure. ((DDRAWI_DIRECTDRAW_INT*)->lpLcl->dwAppHackFlags|=0x800) It does NOT work for all games. Enabling this option may cause an error if ddraw's internal structures have changed. (like Wine)
|
||||||||||||
|
Applications that do not handle the [new] high DPI case are likely to exhibit visual artifacts. [Microsoft] SetProcessDPIAware() to prevent scaling. |
||||||||||||
|
DirectDraw's Hardware Emulation Layer does not emulate vsync. Sleep() awhile everytime the application asks for vsync to prevent the game from running too fast. |
||||||||||||
|
Milliseconds between vertical blanking intervals for FakeVsync. FakeVsyncInterval = 18 would equate roughly to 55 fps. ( 1000 / 18 = 55 )
|
||||||||||||
|
Attempt to impose vsync on an application. (to slow it down) Add a DDBLTFX_NOTEARING flag to all of the primary surface's Blt operations. (also see FakeVsync, BltNoTearing) |
||||||||||||
|
Use DirectDraw's Hardware Emulation Layer for all features. DDCREATE_EMULATIONONLY
|
||||||||||||
|
Try to create all the application's drawing surfaces in system memory ( Not video memory ).
Fake the game's primary surface in system memory, Blt() to the real primary periodically.
|
||||||||||||
|
Display the roughly estimated rate of frames-per-second ( FPS ) in the top-left corner of the game window.
Games can use several methods to display frames.
Flip() is the only method that could not be called several times per frame.
To track multiple methods add their identifiers together.
To track all methods set ShowFPS = 15 ( 1 + 2 + 4 + 8 = 15 ) |
||||||||||||
|
Force all threads in a process to run on a single processor/core. SetProcessAffinityMask()/SetThreadAffinityMask() may fix timing issues, but may impede performance. Useful to have applied to games of the DirectDraw era, though there may be no threading issues with DiretDraw itself. It is best to not use NoVideoMemory=1 with this option. |