2010-03-18 101 views
2

我现在在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(我的场景的纹理渲染目标)。

任何正确的方向指针非常赞赏。

回答

2

他们发布了一些关于如何在WPF中使用slimdx/directx10的示例代码。这是link

0

有一个名为WindowsFormsHost的控件,也许你可以将你当前的WinForm控件以这种方式进行整合?

+0

这样的工作,但它并没有很好地与WPF集成。 WinForms控件必须位于最前面,不能与其他WPF控件等重叠。 但是,我设法让DX10/WPF很好地运行。我无法弄清楚SlimDX中是否提供了GetSharedHandle,所以我检查了源代码并添加了一些C++代码,以便为我提供所需的功能。 如果我能找到时间,我会更详细地发布和更新并解释我的解决方案。 – slurmomatic 2010-03-31 09:00:47

0

看看D3DImageEx。 http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx 您提供了对rendertarget的引用,但必须使用Shared标志创建它。尽管如此,我无法使用交换链。

let renderTargetDescription = Texture2DDescription( Width=width, 
                 Height=height, 
                 MipLevels=1, 
                 ArraySize=1, 
                 Format = Format.B8G8R8A8_UNorm, 
                 SampleDescription = SampleDescription(Count = 1), 
                 BindFlags = (BindFlags.RenderTarget ||| BindFlags.ShaderResource), 
                 OptionFlags = ResourceOptionFlags.Shared) 
+0

我在上面的问题中发布了相同的链接,不幸的是它提供了解决我的问题的方法。 – slurmomatic 2010-06-11 08:33:39