IDXGI和ID3D11Device与ID3D11DeviceContext的使用有何不同?
根据我的理解,创建/初始化COM对象使用ID3D11Device,并且在操作这些COM对象时使用ID3D11DeviceContext并确定硬件类型,驱动程序和所有其他兼容性内容使用IDXGI COM。
还有哪些其他差异和用法?
答案 0 :(得分:1)
DXGI是枚举适配器和基础设施的基础设施。输出,创建交换链,并执行框架的存在。它的目的是独立于DirectX的特定版本,并且它不应该在版本之间进行太大的改变。
回到Direct3D 10.x,这些方法主要在一个ID3D10Device
中。对于Direct3D 11,它分为两部分:
ID3D11Device
就是创建纹理,顶点缓冲区,着色器等对象。ID3D11DeviceContext
用于设置状态和绘图。拆分的原因很简单:ID3D11Device
上的所有方法都是线程安全的(即可以从多个线程调用并在内部使用锁定),而ID3D11DeviceContext
上的所有方法都是线程 - free(即一次只能从一个线程调用,因为这些方法不使用锁定)。
您应该从2010年开始查看此演示文稿:DirectX 11 Technology Update。