2010-03-18 4 views
2

J'utilise SlimDX avec WinForms depuis un moment maintenant, mais je souhaite maintenant passer à WPF. Cependant, je n'arrive pas à comprendre comment utiliser DX10/11 avec WPF. La version de février de SlimDX fournit un exemple de WPF, qui ne fonctionne qu'avec le DX 9. J'ai trouvé la solution suivante: http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx mais je n'arrive pas à l'utiliser avec SlimDX. Mon problème principal est le handle de ressource partagé car je ne sais pas comment récupérer le handle partagé à partir d'une texture SlimDX. Je ne trouve aucune information sur ce sujet.Utilisation de WPF et SlimDx (DirectX 10/11)

En C++ le code ressemble à ceci:

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; 
} 

Fondamentalement, ce que je veux faire (parce que je pense que c'est la solution), est de partager une texture entre un Direct3d9DeviceEx (pour rendre le WPF D3DImage) et un Direct3d10Device (une cible de rendu de texture pour ma scène).

Tous les pointeurs dans la bonne direction sont grandement appréciés.

Répondre

2

Ils ont publié un exemple de code sur l'utilisation de slimdx/directx10 avec WPF. Voici le link

0

Il existe un contrôle appelé WindowsFormsHost, peut-être que vous pourriez intégrer votre contrôle WinForm actuel de cette façon?

+0

Cela fonctionne, mais il ne s'intègre pas bien avec WPF. Le contrôle WinForms doit être sur le dessus, ne peut pas être superposé avec d'autres contrôles WPF, etc. Cependant, j'ai réussi à faire tourner correctement le DX10/WPF. Je ne pouvais pas comprendre si GetSharedHandle était disponible dans SlimDX, donc j'ai vérifié le code source et ajouté du code C++ pour me fournir les fonctionnalités nécessaires. Si je peux trouver l'heure, je vais poster et mettre à jour et expliquer ma solution en détail. – slurmomatic

0

Jetez un coup d'œil à D3DImageEx. http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/437/Direct3D-10-11-Direct2D-in-WPF.aspx Vous fournissez une référence à votre objectif de rendu, mais il doit être créé avec le drapeau partagé. Je ne pouvais pas utiliser un swapchain de cette façon.

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

J'ai posté le même lien dans ma question ci-dessus, malheureusement, il fournit une solution à mon problème. – slurmomatic

Questions connexes