我在理解ID3D11Device
和ID3D11DeviceContext
之间的区别时遇到了一些问题。
ID3D11Device
代表您的GPU并ID3D11DeviceContext
用于功能,以控制device
?
为什么需要2个物体?
您在设备上使用哪个功能以及设备对象使用哪个功能?
哪个对象将最终图像发送给后备缓冲区?
后台缓冲区位于ID3D11RenderTargetView
对象中,不是吗?
哪些对象连接到交换链,为什么?
答案 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