IDXGI和ID3D11Device与ID3D11DeviceContext的使用差异

时间:2016-07-14 02:38:11

标签: c++ visual-studio object com directx

IDXGI和ID3D11Device与ID3D11DeviceContext的使用有何不同?

根据我的理解,创建/初始化COM对象使用ID3D11Device,并且在操作这些COM对象时使用ID3D11DeviceContext并确定硬件类型,驱动程序和所有其他兼容性内容使用IDXGI COM。

还有哪些其他差异和用法?

1 个答案:

答案 0 :(得分:1)

DXGI是枚举适配器和基础设施的基础设施。输出,创建交换链,并执行框架的存在。它的目的是独立于DirectX的特定版本,并且它不应该在版本之间进行太大的改变。

回到Direct3D 10.x,这些方法主要在一个ID3D10Device中。对于Direct3D 11,它分为两部分:

  • ID3D11Device就是创建纹理,顶点缓冲区,着色器等对象。
  • ID3D11DeviceContext用于设置状态和绘图。

拆分的原因很简单:ID3D11Device上的所有方法都是线程安全的(即可以从多个线程调用并在内部使用锁定),而ID3D11DeviceContext上的所有方法都是线程 - free(即一次只能从一个线程调用,因为这些方法不使用锁定)。

您应该从2010年开始查看此演示文稿:DirectX 11 Technology Update