了解ID3D11Device和ID3D11DeviceContext

时间:2016-05-29 11:50:12

标签: c++ directx-11

我在理解ID3D11DeviceID3D11DeviceContext之间的区别时遇到了一些问题。

  • ID3D11Device代表您的GPU并ID3D11DeviceContext用于功能,以控制device

  • 为什么需要2个物体?

  • 您在设备上使用哪个功能以及设备对象使用哪个功能?

  • 哪个对象将最终图像发送给后备缓冲区?

  • 后台缓冲区位于ID3D11RenderTargetView对象中,不是吗?

  • 哪些对象连接到交换链,为什么?

2 个答案:

答案 0 :(得分:3)

ID3D11Device用于创建资源,例如,管道中的许多着色器。

ID3D11DeviceContext用于绑定这些资源到管道,例如,许多着色器。

device->CreatePixelShader(/*arguments*/);
context->PSSetShader(/*pass shader created with 'device'*/);
  

但为什么你需要两个对象?

所以你没有1"上帝"做所有事情的对象(这是一个猜测:))。

  

哪个对象将最终图像发送到后台缓冲区。

ID3D11DeviceContext确实如此。我想用" Image"你的意思是一个纹理,如果是的话,图像没有被发送"它会被使用方法Draw复制到后台缓冲区。

  

后备缓冲区位于ID3D11RenderTargetView对象中,不是吗?

是的,以ID3D11Resource的形式,这将是后台缓冲区" texture" (Draw调用绘制了"纹理")。

  

哪些对象与SwapChain连接起来,为什么呢?

这有点宽泛。交换链存储后缓冲区纹理,以及许多其他信息,例如如何翻转缓冲区,哪个窗口与之关联,......这会在Draw某事时使用。

所以,我猜ID3D11Resource已被"同意"使用交换链,因为它们存储了它使用的后缓冲区纹理。

答案 1 :(得分:0)

                  ID3D11Device              ID3D11DeviceContext
Purpose:            FACTORY                   STATE of pipeline
Multithreaded:      YES                       NO
Amount basic:       one                       one
Amount common:      one                       many
Amount rare:        many                      many