2010-03-18 134 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