出于某种原因DuplicateOutput1
失败,DuplicateOutput
没有。
#include <D3D11.h>
#include <DXGI1_5.h>
int main() {
ID3D11Device *device;
D3D_FEATURE_LEVEL levels[] = { D3D_FEATURE_LEVEL_11_1 };
D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, levels, ARRAYSIZE(levels), D3D11_SDK_VERSION, &device, NULL, NULL);
IDXGIDevice *dxDevice;
device->QueryInterface<IDXGIDevice>(&dxDevice);
IDXGIAdapter *adapter;
dxDevice->GetAdapter(&adapter);
IDXGIOutput *output;
adapter->EnumOutputs(0, &output);
IDXGIOutput5 *output5;
output->QueryInterface<IDXGIOutput5>(&output5);
IDXGIOutputDuplication *outputDuplication;
auto hr1 = output5->DuplicateOutput(device, &outputDuplication);
这里是S_OK
const DXGI_FORMAT formats[] = { DXGI_FORMAT_B8G8R8A8_UNORM };
auto hr2 = output5->DuplicateOutput1(device, 0, ARRAYSIZE(formats), formats, &outputDuplication);
}
0x887a0004:此系统不支持指定的设备接口或功能级别。
答案 0 :(得分:1)
我将在这里发布@weggo的答案,因为我几乎错过了它!
对于那些将来可能会偶然发现的人,请致电 SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) 允许DuplicateOutput1成功。我不知道为什么 不过,DuplicateOutput1会检查过程dpi版本。
我将添加,您必须在清单设置的解决方案属性中将DPI感知设置为False,以使SetProcessDpiAwarenessContext起作用:)
答案 1 :(得分:0)
如果您在同时具有集成图形芯片和独立GPU的系统上运行,则可能会发生这种情况。参见https://support.microsoft.com/en-us/kb/3019314:
不幸的是,由于桌面复制API不支持针对Microsoft Hybrid系统上的离散GPU运行,因此会出现此问题。按照设计,在这种情况下,调用将失败,并显示错误代码DXGI_ERROR_UNSUPPORTED。
要变通解决此问题,请在集成GPU上而不是在Microsoft Hybrid系统上的离散GPU上运行应用程序。