一種の仮想カメラとしてイメージ プロセッサと通信するレンダリング アプリを作成しています。テクスチャ データを 1 つのプロセスから別のプロセスの待機中のイメージ バッファに書き込む最速の方法を見つけようとしています。
理論的には、VRAM から必要なメモリ領域に直接 1 つの DirectX コピーで可能であると思いますが、テクスチャが占有するメモリ領域を指定する方法がわからないため、追加の操作を実行する必要があります。 memcpy。DX9 または DX11 ソリューションは大歓迎です。
これまでのところ、ここのドキュメント: http://msdn.microsoft.com/en-us/library/windows/desktop/bb174363(v=vs.85).aspxが最も有望です。
「Windows Vista では、CreateTexture はシステム メモリ ポインタからテクスチャを作成できるため、アプリケーションはシステム メモリの使用、割り当て、および削除をより柔軟に行うことができます。」
2010 年 6 月の Directx SDK を使用して Windows 7 で実行していますが、指定された方法で関数を使用しようとすると、無効な引数エラー コードで関数が失敗します。テストとして試した呼び出しは次のとおりです。
static char s_TextureBuffer[640*480*4]; //larger than needed
void* p = (void*)s_TextureBuffer;
HRESULT res = g_D3D9Device->CreateTexture(640,480,1,0, D3DFORMAT::D3DFMT_L8, D3DPOOL::D3DPOOL_SYSTEMMEM, &g_ReadTexture, (void**)p);
いくつかの異なるテクスチャ形式で試しましたが、うまくいきませんでした。DX11 ソリューションを検討し始めましたが、DX9 に慣れているため、ゆっくりと進んでいます。ありがとう!