Question

J'appelle cette méthode:

http://msdn.microsoft.com/en -us / bibliothèque / dd371264 (VS.85) .aspx

L'appel échoue avec E_NOINTERFACE. La documentation est particulièrement inutile pour expliquer pourquoi cela peut se produire. J'ai mis tous les trucs de débogage DirectX 11 et c'est le meilleur que je suis arrivé. Je sais que j'ai un IDXGISurface1* valide (également essayé de IDXGISurface) et les autres paramètres sont correctement réglés. Toutes les idées pour lesquelles cet appel peut échouer?

Edit:

Je suis également eu des problèmes en créant des dispositifs D3D11. Si je passe nullptr comme IDXGIAdapter * argument D3D11CreateDeviceAndSwapChain, il fonctionne très bien, mais si j'énumèrent les adaptateurs et moi-même passer un pointeur (le seul retourné), il échoue avec l'argument invalide. La documentation MSDN dit explicitement que si nullptr est passé, le système utilise le premier retour de EnumAdapters1. Je courais un système DX11.

Était-ce utile?

La solution

Direct2D utilise D3D10 appareils non D3D11 appareils. dispositif D3D11 est probablement qui est rapporté que l'interface manque par cette E_NOINTERFACE.

Autres conseils

Direct2D ne fonctionne que lorsque vous créez un périphérique Direct3D 10.1, mais il peut surfaces d'actions avec Direct3D 11. Tout ce que vous devez faire est de créer deux appareils et rendre l'ensemble de votre contenu Direct2D à une texture vous partagez entre eux. J'utilise cette technique dans mes propres applications à utiliser Direct2D avec Direct3D 11. Il encourt une légère coût, mais il est faible et constant par image.

Un schéma de base du processus, vous devez utiliser est:

  1. Créez votre appareil Direct3D 11 comme vous le faites normalement.
  2. Créer une texture avec l'option D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX afin de permettre l'accès à l'interface ID3D11KeyedMutex.
  3. Utilisez le GetSharedHandle pour obtenir une poignée à la texture qui peut être partagée entre plusieurs périphériques.
  4. Créer un dispositif Direct3D 10.1, assurant qu'il est créé sur le même adaptateur.
  5. Utilisez la fonction OpenSharedResource sur l'appareil Direct3D 10.1 pour obtenir une version de la texture pour Direct3D 10.1.
  6. Accédez à l'interface D3D10 KeyedMutex pour la texture.
  7. Utilisez la version Direct3D 10.1 de la texture pour créer le RenderTarget en utilisant Direct2D.
  8. Lorsque vous voulez rendre D2D, utilisez le mutex à clé pour verrouiller la texture du dispositif de D3D10. Puis, l'acquérir dans D3D11 et de rendre la texture comme vous essayez de faire probablement déjà.

Ce n'est pas trivial, mais il fonctionne bien, et il est la façon dont ils vous l'intention d'interopérer entre eux. Windows 8 ressemble il introduira la compatibilité D3D11 complète, il sera tout aussi simple que vous attendez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top