DXGI与DirectX
2024-11-20
39
0
DXGI承担的是从D3D剥离出去的底层的任务,更贴近于物理硬件。故其软件代码迭代相对于DirectX没有那么快。DXGI主要承担的任务例如硬件设备的枚举、向输出呈现的帧、控制 gamma 以及管理全屏切换。 这些任务现在在 DXGI 中实现。
- 设备枚举:列举系统中的图形适配器(GPU)。
- 格式转换:处理不同图形格式之间的转换。
- 多显示器支持:管理多个显示器的输出。
- 交换链管理:处理双缓冲区和 FLIP 操作,确保图像的平滑显示。
- 资源共享:允许多个进程或 API 共享图形资源。
- 错误报告:提供详细的错误信息和调试支持。
应用程序可以直接访问 DXGI,也可以在 D3D11_1.h、D3D11.h、D3D10_1.h 或 D3D10.h 中调用 Direct3D API,以处理与 DXGI 的通信。 如果应用程序需要枚举设备或控制如何将数据呈现给输出,则可能需要直接使用 DXGI。
IDXGIDevice2 * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice2), (void **)&pDXGIDevice);
IDXGIAdapter * pDXGIAdapter;
hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter);
IDXGIFactory2 * pIDXGIFactory;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory2), (void **)&pIDXGIFactory);
DirectX
- Direct3D:用于3D图形渲染。
- Direct2D:用于2D图形渲染。
- DirectCompute:用于通用计算。
- DirectSound:用于音频处理。
- DirectInput:用于输入设备。
- DirectPlay:用于网络通信。
- DirectShow:用于多媒体流处理。
- DXGI:用于管理和协调图形硬件的访问。
D3D与DXGI各版本的对应关系
Direct3D API支持版本 | 对应包含DXGI版本 | 对应DXGI接口 | 可枚举的显示适配器 | 可创建的交换链 |
---|---|---|---|---|
Direct3D 11.1 | DXGI 1.2 | IDXGIFactory2 |
IDXGIAdaptor2 |
IDXGISwapChain1 |
Direct3D 11.0/10.1 | DXGI 1.1 | IDXGIFactory1 |
IDXGIAdaptor1 |
IDXGISwapChain |
Direct3D 10.0 | DXGI 1.0 | IDXGIFactory |
IDXGIAdaptor |
IDXGISwapChain |
DXGI交换链的创建需要通过IDXGIFactory::CreateSwapChain方法进行。但是,如果是要创建Direct3D 11.1对应的交换链,则需要通过IDXGIFactory2::CreateSwapChainForHwnd方法进行。