我在理解ID3D11Device
和ID3D11DeviceContext
之间的区别时遇到了一些问题。
ID3D11Device
是你的GPU和用于功能的ID3D11DeviceContext
的代表,来控制device
吗?ID3D11RenderTargetView
对象中,不是吗?ID3D11Device
用于创建资源,例如,管道中的许多着色器。
ID3D11DeviceContext
用于将这些资源绑定到管道,例如,许多着色器。
device->CreatePixelShader(/*arguments*/);
context->PSSetShader(/*pass shader created with 'device'*/);
但为什么你需要两个对象呢?
所以你没有一个“上帝”的对象可以做任何事情(这是猜测:)
)。
哪个对象将最终图像发送到后台缓冲区。
ID3D11DeviceContext
确实如此。我想用“Image”你的意思是一个纹理,如果是的话,图像不会被“发送”,它会被复制到后面的缓冲区,使用方法Draw
。
后台缓冲区是在ID3D11RenderTargetView对象中,不是吗?
是的,以ID3D11Resource
的形式,这将是后台缓冲区“纹理”(Draw
称之为“纹理”)。
哪些对象与SwapChain连接,为什么呢?
这有点宽泛。交换链存储后缓冲区纹理,以及许多其他信息,例如如何翻转缓冲区,哪个窗口与它相关联,......当你使用Draw
时,这会被使用。
所以,我猜ID3D11Resource
s与交换链“连接”,因为它们存储了它使用的后缓冲区纹理。
ID3D11Device ID3D11DeviceContext
Purpose: FACTORY STATE of pipeline
Multithreaded: YES NO
Amount basic: one one
Amount common: one many
Amount rare: many many