I have a question:
All NVIDIA drivers since Windows7 prefer to set “point” flag instead of “linear” when blitting for unknown reasons.
So most of old 2D-software (like videogame emulators) shows sharpened unfiltered graphics while stretching, even when hardware-acceleration is ON.
https://github.com/narzoul/DDrawCompat/issues/104
https://www.nvidia.com/en-us/geforce/forums/discover/33537/pixalisation-with-directdraw-blt-under-vista-pixel-replication-instead-interpolation/
DirectDraw compat wrapper can solve problem. Main developer wrote:
“If you’re sure it’s using hardware-accelerated DirectDraw Blt, then yes, in theory it should be fixable via a wrapper. Hardware-accelerated DirectDraw blits use the Direct3D 9 user-mode display driver’s Blt routine (PFND3DDDI_BLT (d3dumddi.h) - Windows drivers | Microsoft Docs) for blitting. This does have options for choosing either point or linear filtering (see the Flags member of the D3DDDIARG_BLT struct).
This option is not exposed through the DirectDraw API (both flags will always be set to 0), so it’s up to the driver to choose whatever it wants. I’m surprised that any modern driver would default to point filtering instead of linear.
Hooking the user-mode display driver’s Blt routine would also be an option, though I’m not aware of any wrapper doing that (besides DDrawCompat).”
I tried a driver hook via wrapper, and this method solved the problems.
Request to developers: add setting for preferred user-selectable blitting method to NVIDIA drivers - point (sharp) or linear (smooth)
This is an old bug. SubV and Ed van der Meer asked to fix it 13 years ago, but nobody don’t care about it. That’s sad
By the way, recent intel hardware and drivers doesn’t have this bug.