开发者

Using WPF and SlimDx (DirectX 10/11)

开发者 https://www.devze.com 2022-12-24 11:36 出处:网络
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 S

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)
0

精彩评论

暂无评论...
验证码 换一张
取 消