2017-08-14 4 views
0

Fondamentalement, ce que je veux faire est de forcer une application source fermée qui utilise un Direct3D9Ex contexte (CreateD3D9Ex) mais un simple dispositif « non-ex » (IDirect3DDevice9) utiliser un Direct3DDevice9Ex à la place. J'ai placé un proxy dll dans le répertoire de l'application qui fonctionne généralement bien. Maintenant, je suis en train de rediriger l'appel pour CreateDevice à CreateDeviceEx de la dll d'origine, puis juste retourner un pointeur "non-ex" (de sorte que l'application utilise un périphérique "Ex" sans le savoir). À mon avis, cela devrait fonctionner parce que le périphérique "Ex" implémente toutes les méthodes que contient le périphérique "non-ex" - mais apparemment il doit y avoir une différence, car la seule chose qui est rendue si le "Ex" caché périphérique est en cours d'utilisation est le curseur.force application source fermée à utiliser Direct3DDevice9Ex au lieu de dispositif non Ex

Q: Quelqu'un pourrait-il me dire ce que je fais de mal ou donner des conseils?

Contexte

J'utilise une application D3D9 dont je veux copier la mémoire tampon de profondeur. Malheureusement, son format est D24S8 ce qui implique qu'une copie directe est impossible.

J'ai donc décidé d'essayer s'il est possible de créer une texture profondeur/pochoir à un niveau et d'accéder à cette texture avec les méthodes D3D10/D3D11 qui sont en fait capables de copier les surfaces profondeur/pochoir. Toutefois, seuls D3D9Ex périphériques sont capables de créer des textures avec des poignées partagées ...

Annexe

En raison du fait Direct3D9Ex ne supporte pas la piscine gérée, il est impossible. Merci @VuVirt

Répondre

2

Je pense que le problème est principalement causé par le fait que le périphérique D3D9Ex ne prend pas en charge les ressources D3DPOOL_MANAGED. C'est la raison pour laquelle vous ne voyez rien affiché à l'écran. La création de ressource avec D3DPOOL_MANAGED échouera réellement. Vous pouvez également connecter toutes les routines de création de ressources et supprimer le drapeau D3DPOOL_MANAGED des appels et éventuellement ajouter D3DUSAGE_DYNAMIC si quelqu'un veut les verrouiller. Ceci cependant, pourrait causer un autre ensemble de problèmes. Recherchez "Différences entre Direct3D 9 et Direct3D 9Ex" dans les liens MSDN fournis.

+0

Ok, je n'ai pas pensé à cette partie. Eh bien, le temps de la prochaine approche;) Merci quand même. – Apollo13