我有一個Direct3D 11渲染器,我正在實現共享表面以顯示WPF應用程序(僅使用Direct3D 9)中的內容。Direct3D9中支持的紋理格式
在D3D11方面,我的後臺緩衝區使用格式DXGI_FORMAT_R8G8B8A8_UNORM,這工作正常。根據this documentation DXGI_FORMAT_R8G8B8A8_UNORM映射到D3D9中的D3DFMT_A8B8G8R8。但是,當我使用該格式在D3D9端創建紋理時,它會失敗。我使用Windows 10,並且沒有D3D9調試運行時,所以我得到的只是一個D3DERR_INVALIDCALL,因此沒有附加信息。
This documentation似乎認爲只有ARGB格式支持D3D9中的後臺緩衝區,ABGR格式沒有在任何支持部分下列出。這是文檔中的錯誤還是這種格式完全不受支持?
如果我改爲在D3D11一側使用DXGI_FORMAT_B8G8R8A8_UNORM,而在D3D9一側紋理創建成功使用D3DFMT_A8R8G8B8。
對於進一步的混亂,this post意味着DXGI_FORMAT_R8G8B8A8_UNORM應該是更兼容的格式,但它是我遇到的麻煩之一。
我也在GitHub上用Microsoft WPF DirectX Interop sample確認了這種行爲。開箱即用的是DXGI_FORMAT_R8G8B8A8_UNORM,並且工作正常,但如果我將後臺緩衝區更改爲DXGI_FORMAT_B8G8R8A8_UNORM,則會中斷。
爲什麼我的視頻卡支持的格式可以在一個API中工作,而不是在另一個API中工作?我怎麼知道D3D9支持哪些格式?