问题标签 [desktop-duplication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
41 浏览

directx - 尝试使用 DXGI OutputDuplication 捕获 HDR 内容时出错

我在尝试在 HDR 屏幕上复制输出时遇到了一个奇怪的错误,尤其是在启动 Doom Eternal 时会触发此错误。

我通过重置 OutputDuplication 对象来处理 DXGI_ERROR_ACCESS_LOST 错误,如下所示:

_session 是在类级别定义的,它是一个 WRL::ComPtr,duplicationFormats 是一个具有 DXGI_FORMAT_R16G16B16A16_FLOAT 和 DXGI_FORMAT_B8G8R8A8_UNORM 的数组(根据文档, 应该始终存在)。

通过此设置,我可以在显示设置上随意切换 HDR 模式,并且始终捕获桌面。然而,当我打开游戏时出现 E_INVALIDARG 错误,我激活了 DirectX 调试层,并且在发生这种情况时会打印此消息(由上面的 check_hresult 触发):

D3D11 错误:ID3D11Device::CreateTexture2D:格式无效。不支持 Format(0, UNKNOWN) 作为 D3D11_RESOURCE_MISC_SHARED_NTHANDLE 格式。[STATE_CREATION 错误 #92:CREATETEXTURE2D_UNSUPPORTEDFORMAT]
D3D11 错误:ID3D11Device::CreateTexture2D:返回 E_INVALIDARG,表示传递了无效参数。[状态创建错误#104:CREATETEXTURE2D_INVALIDARG_RETURN]

我认为它拒绝支持的格式,即使我对 HDR 内容使用 >10bpp 格式,令我惊讶的是提到 (0, UNKNOWN) 格式,到目前为止,纹理是由 DXGI 实现在内部创建的正如 MS PDB 所说。