A wrapper is a reimplementation of a library, where the goal is to substitute the original API with a better-supported interface. It works as a drop-in replacement for the original library, since a lot of software usually bundled it as-is without any fine-tuning. Wrappers are most common for proprietary interfaces that are either abandoned or otherwise platform-specific.
(Glide, DirectDraw 1-7, Direct3D 2-7, OpenGL 1.1-1.2)
During the 90s, many PC game developers chose to use 3Dfx's Glide API for their Voodoo graphics cards. These developers didn't anticipate that 3Dfx would run out of money trying to compete with NVIDIA's offering, and in 2000 NVIDIA bought them for their IP assets (presumably to improve their own cards). Despite the API getting an open source release in 2003, neither NVIDIA or ATI adopted support for Glide in their own drivers, meaning a wrapper is now needed to play these games with hardware acceleration. Or, if we're lucky, the game gets ported or reimplemented to use other APIs instead.
Even games using older versions of DirectDraw or Direct3D can benefit from wrappers, since those interfaces may not even work properly on newer systems. Wrappers can even enable various overrides and enhancements, such as ReShade.
|nGlide||2.10||Glide||Vulkan, Direct3D 9||✗||✓||✓|
|dgVoodoo2||2.79||Glide, DirectDraw 1-7, Direct3D 2-7||Direct3D 11, Direct3D 12||✗||✓||✓|
|dgVoodoo||v1.50b2||Glide 2.11-2.45||Direct3D 7-9||✗||✗||✓|
|WineD3D||8.0 (Linux, macOS)
8.4[N 1] (Windows)
|DirectDraw 1-7, Direct3D 2-7||Vulkan, OpenGL||✓||✓||✓|
|DxWnd||v2.05.90[N 1]||DirectDraw 1-7, Direct3D 2-7||OpenGL, Direct3D 8-11||✓||✓||✓|
|DDrawCompat||v0.4.0||DirectDraw 1-7, Direct3D 2-7, GDI (Partially)||no API conversion||✓||✓||TBD|
|Direct3D 9 (for DirectDraw)
Direct3D 7 (for Direct3D 2-6)
|glrage||r10||ATI3DCIF, DirectDraw 2||OpenGL 3.3||✓||✗||✓|
Note: Direct3D 1 doesn't exist, since DirectX 1 did not have a Direct3D component. The first release was Direct3D 2.
- ↑ 1.0 1.1 DxWnd 2.05.70, WineD3D 1.7.52 or 1.9.7-staging(partially): latest versions compatible with WinXP (without OneCoreAPI)
- Currently the best Glide wrapper, supporting all three public versions (2.11, 2.60 and 3.10) but it's closed-source. It originally only used Direct3D 9 until Vulkan output was added in 2.0, allowing it to work under Linux using Wine 2.10.0 and newer. nGlide also supports high resolution modes. See the compatibility list.
- Supports Glide 2.11, 2.45, 3.10, 3.1 Napalm, all versions of DirectDraw, and Direct3D up to version 7. Outputs Direct3D 11 and Direct3D 12 with different device types as wrapping output, such as hardware or software rendering.
- Wine's internal wrapper. Wraps DirectDraw and Direct3D up to 7 into Vulkan and OpenGL. It works pretty well for running older Direct3D games, though it does not come with a Glide implementation of its own. A custom build is available for Windows here.
- Reimplements DirectDraw using OpenGL. It is considered alpha software despite many applications working.
- Reimplements ATI3DCIF, an API from ATI used in a handful of games, and DirectDraw 2 over OpenGL. Originally designed specifically for Tomb Raider 1/UB patched with ATIRage patch, currently also supports Assault Rigs and Wipeout. Additionally, it applies some improvements, fixes and QoL changes to the games.
2000's and later APIs
(Direct3D 8 and higher, OpenGL 1.3 and higher, Vulkan)
Modern Windows games will likely need one of these wrappers to work on other platforms. Usually these are not separate downloads, and will come packaged into compatibility layers like Proton, Wine, or CrossOver.
|dgVoodoo2||2.79||Direct3D 8-9||Direct3D 11, Direct3D 12||✗||✓||✓|
|WineD3D||8.0 (Linux, macOS)
|Direct3D 8-11||Vulkan, OpenGL||✓||✓||✓|
|Mesa3D for Windows + MesaInjector||20.1.8
|Gallium Nine||v0.8 (WIP)||Direct3D 9||Gallium||✓||✓||~|
|d3d8to9||git||Direct3D 8||Direct3D 9||✓||✓||~|
|D3D9On12||releases git||Direct3D 9||Direct3D 12||✓||✓||~|
|D3D11On12||releases git||Direct3D 11||Direct3D 12||✓||✓||~|
|3Dmigoto||1.3.16||Direct3D 11 (Stereo3D)||no API conversion||✓||✓||~|
|VorpX ($)||v21.3.2||Direct3D 11 (Stereo3D)||no API conversion||✗||✓||~|
- Supports Direct3D 8-9. Outputs Direct3D 11 and Direct3D 12 with different device types as wrapping output, such as hardware or software rendering.
- Was originally designed to accelerate support for Direct3D 11 games running under Wine since a native implementation seemed unlikely. Today it is bundled with Proton. Later merged D9VK to add Direct3D 9 support.
- Wine's internal wrapper. Wraps Direct3D 8-11 into Vulkan and OpenGL. For newer APIs it has more bugs than DXVK. A custom build is available for Windows here.
- A fork of VKD3D funded by Valve, which is more ahead and experimentally supports DXR via VK_KHR_ray_tracing. Requires DXVK's dxgi.dll file to work on Windows.
- Wine's work-in-progress Direct3D 12 to Vulkan wrapper.
- Developed by the Brenwill Workshop under the Khronos Group, it reimplements Vulkan for Metal. Emulators like Dolphin and DuckStation use MoltenVK instead of a native Metal renderer to support Apple devices.
- Gallium Nine
- An implementation of the Direct3D 9 library on top of the Gallium driver for Linux. By using calls native to Linux, applications running under Wine run "at near-native speeds" according to the maintainers. The caveat is that this only works on Mesa, not NVIDIA's proprietary driver.
- A "just-in-case" implementation of OpenGL on top of Vulkan first introduced in 2018 by Collabora for the Mesa driver.
- Not as versatile as dgVoodoo2, however it's the only wrapper that can wrap Direct3D 8 into 9. Its main advantage is Windows XP support, which dgVoodoo2 lacks. It's specifically useful for Windows XP running in VMWare, since VMWare's Direct3D 8 acceleration has graphical and/or performance issues.
- Compatibility layers - Allows software written for one platform to run on another.
- ↑ http://www.zeus-software.com/forum/viewtopic.php?f=2&t=2044
- ↑ Erik Faye-Lund (October 31, 2018). Introducing Zink, an OpenGL implementation on top of Vulkan. Collabora.
- State of Direct3D 9-12 translation layers by DXVK author YoRHa-2B (2019-04-02)