是否需要在 D2DERR_RECREATE_TARGET 上重新加载 D3D11/D2D1 Device&DeviceContexts?

Do D3D11/D2D1 Device&DeviceContexts need to be reloaded on D2DERR_RECREATE_TARGET?

提问人:EUrbanAutoTech 提问时间:7/29/2023 更新时间:7/29/2023 访问量:41

问:

learn.microsoft.com 在具体细节上很轻......

我开始使用 Direct2D 学习,但后来意识到我应该使用设备上下文和交换链。我不得不想象以下所有内容都依赖于设备,并且应该需要发布并重新创建:ID2D1RenderTargetD2DERR_RECREATE_TARGET

ID3D11Device* mD3DDevice;
ID3D11DeviceContext* mD3DDeviceContext;
IDXGIDevice1* mDXGIDevice;
ID2D1Device* mD2DDevice;
ID2D1DeviceContext* mD2DDeviceContext;

当然,交换链/目标位图需要重新创建,但我还没有找到任何明确说明设备/设备上下文的方式或另一种方式......当我查看示例代码时,我有时会看到它们被重新创建,有时我不会......

如有任何澄清,将不胜感激。

非常感谢。

我尝试谷歌搜索,查看论坛帖子,示例代码。我不知道如何强制标记,然后检查它们是否已失效。D2DERR_RECREATE_TARGET

DirectX Direct2D Direct3D11

评论

0赞 bunglehead 7/30/2023
我认为这基本上等同于“设备丢失”的情况。因此,你需要重新创建内部使用 d3d 对象的任何内容,以及你在该设备上自己创建的 d3d 对象,最后是设备本身。
0赞 Simon Mourier 7/30/2023
呈现器目标和设备上下文是相同的。事实上,ID2D1DeviceContext 继承自 ID2D1RenderTarget。因此,需要释放所有设备上下文并呈现从它们创建的目标和对象 (位图、画笔) ,但不一定是 D3D 设备或 DXGI 设备。

答: 暂无答案