我现在在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