我正在调用这种方法:
http://msdn.microsoft.com/en-us/library/dd371264(VS.85).aspx
呼叫失败,E_NOINTERFACE
。文档对于为什么会发生这种情况特别无益。我启用了所有DirectX 11调试的东西,这是我得到的最好的。我知道我有一个有效的IDXGISurface1*
(也尝试了IDXGISurface
),其他参数设置正确。关于为什么这个电话会失败的任何想法?
编辑:
我在创建D3D11设备时也遇到了问题。如果我将nullptr作为D3D11CreateDeviceAndSwapChain中的IDXGIAdapter *参数传递,它可以正常工作,但是如果我自己枚举适配器并传入一个指针(唯一返回的),它将失败并带有无效参数。 MSDN文档明确说明如果传递nullptr,则系统使用EnumAdapters1的第一个返回。我正在运行DX11系统。
答案 0 :(得分:6)
Direct2D仅在您创建Direct3D 10.1设备时有效,但可以与Direct3D 11共享曲面。您需要做的就是创建两个设备并将所有Direct2D内容渲染到纹理你在他们之间分享。我在我自己的应用程序中使用这种技术将Direct2D与Direct3D一起使用。它会产生一些成本,但每帧很小且不变。
您需要使用的流程的基本概要是:
这不是微不足道的,但它运作良好,而且它们是他们希望您在它们之间进行互操作的方式。 Windows 8看起来会引入完整的D3D11兼容性,所以它会像你期望的一样简单。
答案 1 :(得分:2)
Direct2D使用D3D10设备而非D3D11设备。 D3_11设备可能被E_NOINTERFACE报告为缺少接口。