2010-12-19 10 views
1

を作成できません:は、私は、このメソッドを呼び出していたDirect2D DXGIサーフェス

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システムを実行しています。

答えて

2

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

+0

'http://msdn.microsoft.com/en-us/library/ee913554(VS.85).aspx'では、DX11を含むDXGI1.1テクノロジはすべてサーフェスを共有できます。 – Puppy

+0

あなたのような問題があります。 http://www.gamedev.net/community/forums/topic.asp?topic_id=547920 –

+0

Goddamnitを参照してください。そのため、D3D11インターフェイスはそれ自身のテキストをレンダリングできず、D2Dと相互運用することはできません。それは素晴らしいです。 – Puppy

6

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. Direct2Dを使用してRenderTargetを作成するには、Direct3D 10.1バージョンのテクスチャを使用します。
  8. D2Dでレンダリングする場合は、キー付きミューテックスを使用して、D3D10デバイスのテクスチャをロックします。その後、D3D11でそれを取得し、おそらくすでに行っていたようなテクスチャをレンダリングします。

これは簡単なことではありませんが、うまく動作し、それらの間で相互運用を図りました。 Windows 8は完全なD3D11互換性を導入するように見えますので、期待どおりに簡単です。

+1

素晴らしいです!私はOpenSharedResource1()を使用しなければならなかった。また、AcquireSync()を不適切に使用していたときに共有テクスチャが黒くなりました。したがって、適切なパラメータでAcquireSync()/ ReleaseSync()を使用することは非常に重要です。そうしないと、テクスチャの内容がちょうど黒であると思うかもしれません。 –

関連する問題