- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我一直在尝试制作一个利用桌面复制 api 的应用程序,但没有使用 directx 的经验,结果证明这是一个相当大的挑战。似乎一切正常,直到我调用 output1->DuplicateOutput()
,此时它返回 E_NOINTERFACE。 msdn 文档中未定义此错误,因此我无法诊断问题。我认为这段代码应该可以工作,但我一定遗漏了一些东西。
#include <windows.h>
#include <d3d12.h>
#include <dxgi1_5.h>
int main()
{
HRESULT hr;
ID3D12Debug *debug;
hr = D3D12GetDebugInterface(IID_PPV_ARGS(&debug));
debug->EnableDebugLayer();
IDXGIFactory1 *factory;
hr = CreateDXGIFactory1(IID_PPV_ARGS(&factory));
IDXGIAdapter1 *adapter;
hr = factory->EnumAdapters1(0, &adapter);
factory->Release();
IDXGIOutput *junkput;
hr = adapter->EnumOutputs(0, &junkput);
IDXGIOutput1 *output1;
hr = junkput->QueryInterface(IID_PPV_ARGS(&output1));
junkput->Release();
ID3D12Device *device;
hr = D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&device));
IDXGIOutputDuplication *dupl;
hr = output1->DuplicateOutput(device, &dupl);
return 0;
}
在调试窗口中,我注意到调用 output1->DuplicateOutput
时出现两个 _com_errors。
更新:
我将问题缩小到我使用的是 ID3D12Device 而不是 ID3D11Device。这段代码有效的事实证明了这一点:
ID3D11Device *device;
D3D_FEATURE_LEVEL reallevel;
ID3D11DeviceContext *context;
hr = D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, nullptr, NULL, featurelevels, ARRAYSIZE(featurelevels), D3D11_SDK_VERSION, &device, &reallevel, &context);
IDXGIOutputDuplication *dupl;
hr = output1->DuplicateOutput(device, &dupl);
我不明白为什么这是个问题。桌面复制 api 是否与 directx 12 兼容?
最佳答案
DXGI DuplicateOutput
尚不支持 DirectX 12 设备。由于您没有使用 DirectX 的经验,无论如何您都应该使用 DirectX 11。 DirectX 12 是为假定已经非常熟悉 DirectX 11 的图形专家设计的 API。
Note that
D3D11On12CreateDevice
devices should work with DXGIDuplicateOutput
, but I've not tried it myself.
关于c++ - 使用 D3D12Device 调用 DuplicateOutput 失败并显示 E_NOINTERFACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40165786/
我有一个COM客户端和一个COM服务器,COM服务器持有客户端暴露的接口(interface),现在客户端实际上只是一个EXE,我如何确保客户端暴露的接口(interface)对服务器可见? 因为当我
我正在从 C++ 非托管代码调用 C# 方法。我在从数组中返回的类实例获取值时遇到问题。 我稍微简化了代码 这是有问题的方法。 [return: MarshalAs(UnmanagedType
我正在尝试在现有 COM 组件中构建连接点。我从 CCmdTarget 派生类,并按照 MSDN 中的描述在类声明和实现中调用 MFC 宏。组件已正确构建、链接和运行。但是,当我调试我的客户端应用程序
我正在尝试为我拥有的 COM 对象(名为 SC_COM.dll)生成 C# 包装器,但在将它与 Visual Studio 2008(运行 Vista)链接时遇到一些问题。我需要使用 COM DLL
我已经成功编译并注册了一个直接显示过滤器。现在我想在我的代码中使用它。但是对 COCreateInstance 的调用返回错误代码 E_NOINTERFACE。 这是我的过滤器的注册码 #inclu
注意: 使用 CoGetClassObject , 通过在系统注册表中有 CLSID 的类对象创建多个对象 单线程单元 例如: hresult = CoInitializeEx(NULL, COINI
在我使用 DirectX11 设计的渲染器中,我需要能够随时创建交换链,但是我使用的方法在 CreateSwapChain() 调用时崩溃了: IDXGIDevice * device;
我正在尝试创建一个指定的 D3D12 设备 https://msdn.microsoft.com/en-us/library/dn899120%28v=vs.85%29.aspx 我有 NVidia
我刚刚开始使用 Dx11。 D3DX11CreateEffectFromMemory 正在返回 E_NOINTERFACE。 我知道 E_NOINTERFACE 在 COM 方面意味着什么,但我不知道
我负责 C# 应用程序 (VS 2005) 的维护。此 C# 应用程序调用一个 dll(“mydll.dll”)。我需要对有问题的 dll 进行一些更改。 我有一个用 Visual Basic 6.0
我正在使用 CoCreateInstance 函数创建与指定 CLSID 关联的类的单个对象。它返回 E_NOINTERFACE。 我检查了注册表,CLSID 是正确的。被调用对象dll的路径在注册表
我正在尝试从我的集成相机上的输出引脚检索 IAMStreamConfig 接口(interface),但是 E_NOINTERFACE 失败。 我将 IntCam 用作测试设备,实际上我将有一个带有两
我已经搞不清是应该从我的 COM 服务器方法返回 E_NOTIMPL 还是 E_NOINTERFACE。 我有一个类有两个函数,我从我继承的类中覆盖了这两个函数,这两个函数什么都不做,因为它们目前还没
我有一个 COM 类 CMyCOMServer 在一个应用程序中实现了 IMyInterface,两者都具有正确的 GUID。如果请求 IUnknown 或 IMyInterface,CMyCOMSe
我有一个由 VB6 COM 对象实现的接口(interface) (ITask)。我有一个使用该接口(interface)的 C++ COM 对象,它通常工作正常。 但是,当我运行 VB6 调试器来调
我正在尝试从 64 位应用程序创建 32 位 COM 对象。 我在 CoCreateInstance 调用中使用了 CLSCTX_LOCAL_SERVER,并且我向 AppId 添加了一个空的 Dll
我一直在尝试制作一个利用桌面复制 api 的应用程序,但没有使用 directx 的经验,结果证明这是一个相当大的挑战。似乎一切正常,直到我调用 output1->DuplicateOutput(),
嗨 Stack Overflow 成员, 我是 C# 编程的新手。我正在开发一个基本的相机流和静态捕获应用程序。一旦用户静止不动,我将使用 VMR9 的位图混合概念在叠加层上显示它。 我做了什么? 我
我正在尝试使用 IFileSystemImage2 接口(interface)使用 Imapi2 创建具有多个引导记录的 ISO。 为此,我应该能够使用 put_BootImageOptionsArr
我正在尝试在我的 Win32 应用程序中嵌入一个 WMP 控件。我在这里遵循了示例代码:Hosting the Windows Media Player Control in a Windows Ap
我是一名优秀的程序员,十分优秀!