了解ID3D11Device和ID3D11DeviceContext

问题描述 投票:1回答:2

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

  • ID3D11Device是你的GPU和用于功能的ID3D11DeviceContext的代表,来控制device吗?
  • 你为什么需要2件物品?
  • 您在设备上使用哪个功能以及哪个功能与设备对象一起使用?
  • 哪个对象将最终图像发送到后备缓冲区?
  • 后台缓冲区位于ID3D11RenderTargetView对象中,不是吗?
  • 哪些对象连接到交换链,为什么?
c++ directx-11
2个回答
3
投票

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

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

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

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

所以你没有一个“上帝”的对象可以做任何事情(这是猜测:))。

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

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

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

是的,以ID3D11Resource的形式,这将是后台缓冲区“纹理”(Draw称之为“纹理”)。

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

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

所以,我猜ID3D11Resources与交换链“连接”,因为它们存储了它使用的后缓冲区纹理。


0
投票
                  ID3D11Device              ID3D11DeviceContext
Purpose:            FACTORY                   STATE of pipeline
Multithreaded:      YES                       NO
Amount basic:       one                       one
Amount common:      one                       many
Amount rare:        many                      many
© www.soinside.com 2019 - 2024. All rights reserved.