0

独自のDirect3Dデバイスを備えたウィンドウがあります。これをmainWindowと呼びましょう。mainWindowとその内容は、他の人によって作成されています。彼らは私に、メインウィンドウに描画しているいくつかのDirect3Dサーフェス(IDirect3DSurface9ポインター)を提供してくれました。
私は彼らのコールバックの1つからスレッドを開始し、winAPIを使用して独自のウィンドウを作成しました。(この質問で少し似たようなケースがありました)
これらのRTT出力をウィンドウに描画したいと思います。そのため、ウィンドウに描画する独自のDirectXデバイスで作成したサーフェス/テクスチャにサーフェスをコピーしようとしています。

これをしようとしているときに見つけたもの、

  • D3DXSaveSurfaceToFileInMemory(...)これは、関数を使用して簡単に実行できD3DXCreateTextureFromFileInMemory(...)ます。
  • StrechRect(...)関数は、2つのデバイスで作成された2つのサーフェスでは機能しません。

サーフェスをロックしてデータを相互にコピーしようとしましたが、機能しなかったようです。しかし、私はそれを再試行します。(2つの異なるデバイスからの表面のロックは一度に違法ですか?)

人々がこれを行うことを知っている、または提案する方法はありますか?

---編集---
MSDNによると(ページへのリンク

Windows Vistaでは、CreateTextureはシステムメモリポインタからテクスチャを作成できるため、アプリケーションはシステムメモリの使用、割り当て、および削除をより柔軟に行うことができます。たとえば、アプリケーションはGDIシステムメモリビットマップポインタを渡し、その周りにDirect3Dテクスチャインターフェイスを取得できます。CreateTextureでシステムメモリポインタを使用する場合、次の制限があります。

  • テクスチャのピッチは、幅にピクセルあたりのバイト数を掛けたものに等しくなければなりません。
  • 単一のミップマップレベルを持つテクスチャのみがサポートされます。Levels引数は1でなければなりません。
  • Pool引数はD3DPOOL_SYSTEMMEMである必要があります。
  • pSharedHandle引数は、システムメモリポイントを保持できるバッファへの有効なポインタである必要があります。* pSharedHandleは、テクスチャ幅のバイト単位のサイズ*テクスチャの高さ*テクスチャ形式のピクセルあたりのバイト数を持つシステムメモリへの有効なポインタである必要があります。

この方法でテクスチャを作成する例は見つかりませんでしたが、試してみたところ、ノイズに満ちた出力だけが得られました。誰かがその中で私を助けることができれば、私の問題はある程度解決されると思います....msdnがここで言っていることの良い例はありますか..??

4

1 に答える 1

2

vista/win7/win8 を使用している場合は、Sharing_Resourcesを使用できます。その場合、そのコピーは必要ありません。

于 2012-06-05T04:55:16.547 に答える