2012-03-29 26 views
1

私は2つのデバイスを持っています。最初はDirectX9で、2つ目はDirectX11です。 私がやっていることは、D3D11のCompute Shaderでパーティクルを計算し、そのデータをD3D11テクスチャに保存し、D3D9デバイスでそのD3D11テクスチャを使用して表示することです。 私は(m_pBufferがID3D11Bufferある)..DirectX11からDirectX9へのリソースを共有

IDXGIResource* pTempResource(NULL); 
hr = m_pBuffer->QueryInterface(__uuidof(IDXGIResource), (void**)&pTempResource); 
hr = pTempResource->GetSharedHandle(&SharedHandle); //successful 

をD3D11装置で

を次のコードを使用していますそして、D3D9デバイスに...私が午前

hr = g_pd3dDevice->CreateTexture(width, height, 1, D3DUSAGE_RENDERTARGET,D3DFMT_A32B32G32R32F,D3DPOOL_DEFAULT,&pSharedTexture9,&SharedHandle); 

エラー」がありますDirect3D9:(ERROR):開いて作成したリソースが一致せず、共有リソースを開くことができません。

EDITED:dx9ではD3DFMT_A16B16G16R16F、dX11ではDXGI_FORMAT_R16G16B16A16_FLOATを使用してテクスチャを作成すると機能しました。 D3DFMT_A32B32G32R32FとDXGI_FORMAT_R32G32B32A32_FLOATを使用すると、上記のエラーが発生します。

答えて

3

これらのテクスチャ形式が許可されていないため、このエラーが発生しています。 D3D11にD3D9から共有されている

テクスチャは、次の制限があります。ミップレベルが許可されているのみ1

  • テクスチャが2D
  • でなければなりません
  • テクスチャはデフォルトの利用
  • テクスチャ必須を持っている必要があります書き込みのみ
  • MSAAテクスチャは許可されていません
  • ビンDフラグはSHADER_RESOURCEとRENDER_TARGETを持っている必要がありますのみR10G10B10A2_UNORM、R16G16B16A16_FLOATとR8G8B8A8_UNORM形式はテクスチャを共有するためのだから、http://msdn.microsoft.com/en-us/library/windows/desktop/ff476531%28v=vs.85%29.aspx

    から

を許可されている

  • を設定し、あなたは上記の3つのフォーマットに制限されています。さらに、Direct3D9のバックバッファとしてテクスチャを使用する場合は、さらにR8G8B8A8_UNORMとR10G10B10A2_UNORMに制限されます。出典:http://msdn.microsoft.com/en-us/library/windows/desktop/bb172558%28v=vs.85%29.aspx#BackBuffer_or_Display_Formats

  • +1

    でも、R16G16B16A16_FLOATでもうまくいきませんでした。私は間違っていました。他のフォーラムのほとんどの投稿と同じように機能していないと思います。誰もそれを働かせた? – YAHOOOOO

    +1

    問題は、それが共有のための有効なフォーマットである一方、Direct3D9では64ビットのバックバッファを持つことができないということです。 –

    関連する問題