Understanding ID3D11Device and ID3D11DeviceContext

Understanding ID3D11Device and ID3D11DeviceContext

本文关键字:ID3D11DeviceContext and ID3D11Device Understanding      更新时间:2023-10-16

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

  • ID3D11Device是GPU的代表,ID3D11DeviceContext用于控制device的功能吗?

  • 为什么需要两个对象?

  • 您对设备使用哪个功能,对设备对象使用哪个功能?

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

  • 后缓冲区在ID3D11RenderTargetView对象中,不是吗?

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

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

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

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

但为什么需要两个对象?

这样你就没有一个"上帝"对象可以做任何事情(这是猜测:))。

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

ID3D11DeviceContext确实如此。我想"图像"指的是纹理,如果是的话,图像不会被"发送",而是使用Draw方法复制到后缓冲区。

backbuffer在ID3D11RenderTargetView对象中,不是吗?

是的,以ID3D11Resource的形式,它将是后缓冲区"纹理"(Draw调用draw到该"纹理"中)。

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

这有点宽泛。交换链存储后缓冲区纹理,以及许多其他信息,如如何翻转缓冲区,与哪个窗口相关。。。当你Draw某个东西时,就会用到这个。

所以,我猜ID3D11Resource与交换链"连接"在一起,因为它们存储了它使用的后缓冲区纹理

ID3D11Device              ID3D11DeviceContext
Purpose:            FACTORY                   STATE of pipeline
Multithreaded:      YES                       NO
Amount basic:       one                       one
Amount common:      one                       many
Amount rare:        many                      many
相关文章:
  • 没有找到相关文章