DXGI与DirectX

2024-11-20 39 0

DXGI承担的是从D3D剥离出去的底层的任务,更贴近于物理硬件。故其软件代码迭代相对于DirectX没有那么快。DXGI主要承担的任务例如硬件设备的枚举、向输出呈现的帧、控制 gamma 以及管理全屏切换。 这些任务现在在 DXGI 中实现。

  • 设备枚举:列举系统中的图形适配器(GPU)。
  • 格式转换:处理不同图形格式之间的转换。
  • 多显示器支持:管理多个显示器的输出。
  • 交换链管理:处理双缓冲区和 FLIP 操作,确保图像的平滑显示。
  • 资源共享:允许多个进程或 API 共享图形资源。
  • 错误报告:提供详细的错误信息和调试支持。

DXGI

应用程序可以直接访问 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方法进行。

0 篇笔记 写笔记

作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!