I am 开发者_StackOverflowusing SlimDX with WinForms for a while now, but want to make the switch to WPF now. However, I can't figure out how to get DX10/11 working with WPF. The February release of SlimDX provides a WPF example, which only works with DX 9 though. I found the following solution: http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx but can't get it to work with SlimDX. My main problem is the shared resource handle as I don't know how to retrieve the shared handle from a SlimDX texture. I can't find any information to this topic.
In C++ the code looks like this:
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;
}
Basically, what I want to do (because I think that this is the solution), is to share a texture between a Direct3d9DeviceEx (for rendering the WPF D3DImage) and a Direct3d10Device (a texture render target for my scene).
Any pointers in the right direction are greatly appreciated.
They posted some sample code on how to use slimdx/directx10 with WPF. Here's the link
There is a control called WindowsFormsHost, maybe you could integrate your current WinForm control that way?
Have a look at D3DImageEx. http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx You provide a reference to your rendertarget, but it has to be created with the Shared flag. I was not able to use a swapchain in this way though.
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)
精彩评论