2

私はこのメソッドを呼び出しています:

http://msdn.microsoft.com/en-us/library/dd371264(VS.85).aspx

呼び出しは で失敗しE_NOINTERFACEます。ドキュメントは、なぜこれが起こるのかについて特に役に立ちません。DirectX 11 のデバッグ機能をすべて有効にしましたが、これが最高です。私は有効なIDXGISurface1*(これも試したIDXGISurface) を持っており、他のパラメーターが正しく設定されていることを知っています。この呼び出しが失敗する理由についてのアイデアはありますか?

編集:

D3D11 デバイスの作成にも問題があります。D3D11CreateDeviceAndSwapChain で IDXGIAdapter* 引数として nullptr を渡すと正常に動作しますが、自分でアダプターを列挙してポインター (返される唯一のアダプター) を渡すと、無効な引数で失敗します。MSDN のドキュメントでは、nullptr が渡された場合、システムは EnumAdapters1 からの最初の戻り値を使用すると明示的に述べています。DX11 システムを実行しています。

4

2 に答える 2

7

Direct2D は、Direct3D 10.1 デバイスを作成する場合にのみ機能しますが、 Direct3D 11 とサーフェスを共有できます。必要なのは、両方のデバイスを作成し、すべての Direct2D コンテンツをそれらの間で共有するテクスチャにレンダリングすることだけです。私は自分のアプリケーションでこの手法を使用して、Direct3D 11 で Direct2D を使用しています。わずかなコストがかかりますが、小さく、フレームごとに一定です。

使用する必要があるプロセスの基本的な概要は次のとおりです。

  1. 通常どおりに Direct3D 11 デバイスを作成します。
  2. ID3D11KeyedMutex インターフェイスへのアクセスを許可するために、D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX オプションを使用してテクスチャを作成します。
  3. GetSharedHandleを使用して、デバイス間で共有できるテクスチャへのハンドルを取得します。
  4. Direct3D 10.1 デバイスを作成し、同じアダプター上に作成されるようにします。
  5. Direct3D 10.1 デバイスで OpenSharedResource 関数を使用して、Direct3D 10.1 のテクスチャのバージョンを取得します。
  6. テクスチャの D3D10 KeyedMutex インターフェイスにアクセスします。
  7. Direct3D 10.1 バージョンのテクスチャを使用して、Direct2D を使用して RenderTarget を作成します。
  8. D2D でレンダリングする場合は、キー付きミューテックスを使用して D3D10 デバイスのテクスチャをロックします。次に、D3D11 でそれを取得し、おそらく既に試みていたようにテクスチャをレンダリングします。

些細なことではありませんが、うまく機能します。これは、両者の間で相互運用することを意図した方法です。Windows 8 では、D3D11 との完全な互換性が導入されるように見えるため、期待どおりにシンプルになります。

于 2012-01-30T22:41:08.190 に答える
2

Direct2D は、D3D11 デバイスではなく D3D10 デバイスを使用します。D3D11 デバイスはおそらく、その E_NOINTERFACE によってインターフェイスが不足していると報告されています。

于 2010-12-19T22:50:35.750 に答える