Использование WPF и SlimDx (DirectX 10/11) - PullRequest
2 голосов
/ 18 марта 2010

Я уже некоторое время использую SlimDX с WinForms, но сейчас хочу перейти на WPF. Однако я не могу понять, как заставить DX10 / 11 работать с WPF. В февральском выпуске SlimDX представлен пример WPF, который работает только с DX 9. Я нашел следующее решение: http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx но не могу заставить его работать с SlimDX. Моя главная проблема - дескриптор общего ресурса, так как я не знаю, как извлечь общий дескриптор из текстуры SlimDX. Я не могу найти информацию по этой теме.

В 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 (целью рендеринга текстуры для моей сцены).

Любые указатели в правильном направлении приветствуются.

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

Они опубликовали пример кода о том, как использовать slimdx / directx10 с WPF. Вот ссылка

0 голосов
/ 09 июня 2010

Посмотрите на D3DImageEx. http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx Вы предоставляете ссылку на вашу цель визуализации, но она должна быть создана с флагом Shared. Я не смог использовать swapchain таким образом.

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 голосов
/ 30 марта 2010

Существует элемент управления WindowsFormsHost, может быть, вы могли бы таким образом интегрировать свой текущий элемент управления WinForm?

...