我現在在WinForms中使用SlimDX一段時間,但現在想切換到WPF。但是,我無法弄清楚如何讓DX10/11與WPF一起工作。 SlimDX的2月份版本提供了一個WPF示例,但只適用於DX 9。 我發現了以下解決方案:http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx 但無法使其與SlimDX配合使用。我的主要問題是共享資源句柄,因爲我不知道如何從SlimDX紋理檢索共享句柄。我無法找到任何有關此主題的信息。使用WPF和SlimDx(DirectX 10/11)
在C++代碼看起來是這樣的:
HRESULT D3DImageEx::GetSharedHandle(IUnknown *pUnknown, HANDLE * pHandle)
{
HRESULT hr = S_OK;
*pHandle = NULL;
IDXGIResource* pSurface;
if (FAILED(hr = pUnknown->QueryInterface(__uuidof(IDXGIResource), (void**)&pSurface)))
return hr;
hr = pSurface->GetSharedHandle(pHandle);
pSurface->Release();
return hr;
}
基本上,我想要做的(因爲我認爲這是解決方案),是共享Direct3d9DeviceEx之間的紋理(渲染的WPF D3DImage)和一個Direct3d10Device(我的場景的紋理渲染目標)。
任何正確的方向指針非常讚賞。
這樣的工作,但它並沒有很好地與WPF集成。 WinForms控件必須位於最前面,不能與其他WPF控件等重疊。 但是,我設法讓DX10/WPF很好地運行。我無法弄清楚SlimDX中是否提供了GetSharedHandle,所以我檢查了源代碼並添加了一些C++代碼,以便爲我提供所需的功能。 如果我能找到時間,我會更詳細地發佈和更新並解釋我的解決方案。 – slurmomatic 2010-03-31 09:00:47