2010-03-18 5 views
2

SlimDX를 사용하여 잠시 동안 WinForms에서 SlimDX를 사용하고 있지만 WPF로 전환하려고합니다. 그러나 WPF로 작업하는 DX10/11을 얻는 방법을 알 수는 없습니다. SlimDX의 2 월 릴리스에서는 DX 9에서만 작동하는 WPF 예제를 제공합니다. 다음 솔루션을 찾았습니다 : 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; 
} 

, (나는이 해결책이라고 생각하기 때문에) 내가하고 싶은 것,되고 WPF 렌더링에 (A Direct3d9DeviceEx 사이의 텍스처를 공유 할 수 D3DImage) 및 Direct3d10Device (내 장면의 질감 렌더링 대상).

올바른 방향으로 어떤 포인터가 크게 감사하겠습니다.

답변

2

그들은 slimdx/directx10을 WPF와 함께 사용하는 방법에 대한 몇 가지 샘플 코드를 게시했습니다. 여기에 link

0

WindowsFormsHost라는 컨트롤이 있습니다. 어쩌면 현재 WinForm 컨트롤을 그런 방식으로 통합 할 수 있습니까?

+0

하지만 작동하지만 WPF와 잘 통합되지는 않습니다. WinForms 컨트롤은 맨 위에 있어야하며 다른 WPF 컨트롤 등으로 오버레이 될 수 없습니다. 그러나 DX10/WPF가 제대로 실행되도록 관리했습니다. SlimDX에서 GetSharedHandle을 사용할 수 있는지 알 수 없기 때문에 소스 코드를 확인하고 C++ 코드를 추가하여 필요한 기능을 제공했습니다. 시간을 찾을 수 있으면 게시하고 업데이트하고 내 솔루션에 대해 자세히 설명합니다. – slurmomatic

0

D3DImageEx를 살펴보십시오. http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx 렌더 타겟에 대한 참조를 제공하지만 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