由于某些原因,DuplicateOutput
没有出现DuplicateOutput1
失败的情况。
#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 :此系统不支持指定的设备接口或功能级别。
发布于 2019-06-05 03:21:43
我会在这里发布@weggo的答案,因为我差一点就错过了!
对于那些将来可能会遇到这种情况的人来说,调用SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)可以让DuplicateOutput1成功。不过,我不知道为什么DuplicateOutput1会检查进程dpi版本。
我要补充的是,您必须在清单设置中解决方案的属性中将DPI感知设置为False,才能使SetProcessDpiAwarenessContext工作:)
发布于 2019-01-15 18:15:27
如果您在同时具有集成显卡芯片和独立GPU的系统上运行,则可能会发生这种情况。请参阅https://support.microsoft.com/en-us/kb/3019314
不幸的是,此问题的发生是因为桌面复制应用程序接口不支持在微软混合系统上针对独立GPU运行。按照设计,在这种情况下,调用会失败,同时会出现错误代码DXGI_ERROR_UNSUPPORTED。
要解决此问题,请在集成的图形处理器上运行应用程序,而不是在微软混合系统的独立图形处理器上运行。
https://stackoverflow.com/questions/48207677
复制相似问题