C++ 了解ID3D11设备和ID3D11设备上下文

C++ 了解ID3D11设备和ID3D11设备上下文,c++,directx-11,C++,Directx 11,我在理解ID3D11Device和ID3D11DeviceContext之间的区别时遇到一些问题 ID3D11Device是否代表您的GPU和ID3D11DeviceContext用于控制设备的功能 为什么需要两个对象 设备和设备对象使用哪个函数 哪个对象将最终图像发送到backbuffer 后缓冲区在ID3D11RenderTargetView对象中,不是吗 哪些对象连接到交换链,为什么 ID3D11设备用于创建资源,例如管道中的许多着色器 ID3D11DeviceContext用于将这些资

我在理解
ID3D11Device
ID3D11DeviceContext
之间的区别时遇到一些问题

  • ID3D11Device
    是否代表您的GPU和
    ID3D11DeviceContext
    用于控制
    设备的功能

  • 为什么需要两个对象

  • 设备和设备对象使用哪个函数

  • 哪个对象将最终图像发送到backbuffer

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

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


ID3D11设备用于创建资源,例如管道中的许多着色器

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

device->CreatePixelShader(/*arguments*/);
context->PSSetShader(/*pass shader created with 'device'*/);
但是为什么你需要两个物体呢

这样你就不会有一个“上帝”对象做任何事情(这是一个猜测
:)

哪个对象将最终图像发送到backbuffer

ID3D11DeviceContext
没有。我猜“图像”是指纹理,如果是,图像不会被“发送”,而是被复制到后缓冲区,使用方法
Draw

backbuffer在ID3D11RenderTargetView对象中,不是吗

是的,以
ID3D11Resource
的形式,这将是后台缓冲区“纹理”(调用将“纹理”绘制到该“纹理”中)

哪些对象与交换链相连接?具体原因是什么

这有点宽泛。交换链存储后缓冲区纹理和许多其他信息,如如何翻转缓冲区、与之关联的窗口等。。。当您
绘制
某物时,将使用此选项


因此,我猜
ID3D11Resource
s与交换链“连接”,因为它们存储它使用的后缓冲区纹理。

不同的生存期。你必须与其他想要使用该设备的程序合作,如果有人从你那里偷走了它,你可以让D3DERR_DEVICELOST。就像用户Alt+Tab切换到另一个游戏一样。保持设备有效,但必须重新创建设备上下文。只问一个问题。
                  ID3D11Device              ID3D11DeviceContext
Purpose:            FACTORY                   STATE of pipeline
Multithreaded:      YES                       NO
Amount basic:       one                       one
Amount common:      one                       many
Amount rare:        many                      many