2011-01-29 2 views
4

J'écris une application vidéo en utilisant D3DImage. Les cadres proviennent de la mémoire et sont rendus sous forme de textures en code natif avec DirectX9, enfin exposés par D3DImage à l'interface graphique de WPF. J'ai des superpositions sur le dessus, créées avec le cadre de peinture de WPF (texte, formes, etc.). Jusqu'à présent, cela fonctionne comme un charme. Maintenant, je voudrais encoder l'image composite de mon code C++ natif sous-jacent. La vidéo est 640x480 BGR, 25 FPS et doit être rendue et encodée en parallèle, même sur des versions plus anciennes de matériel avec Windows jusqu'à XP/SP3.Problème d'interopérabilité WPF-DirectX (D3DImage)

Le problème est que je ne trouve aucune documentation décrivant le processus de composition entre WPF et D3DImage. Ils «se fondent» dans un certain sens, mais quel est le sens de cela? Et est-ce qu'il est possible de maîtriser la partie WPF du dessin ou même l'image composite dans mon code C++ natif?

p.s: Je suis également ouvert aux solutions gérées, mais je n'ai pas trouvé grand-chose jusqu'à présent.

Répondre

2

Il existe une méthode statique globale appelée "CompositionTarget.Rendering". Ajoutez un événement à cela et à chaque fois que WPF rend cette méthode appelée avant la présentation de WPF (le FPS peut toutefois varier). Donc juste mis à jour votre renderTarget en conséquence. Il pourrait y avoir un meilleur moyen, mais je ne suis pas au courant. REMARQUE: Pour D3DImage sur WindowsXP, vous utilisez également un périphérique D3D9 avec un renderTarget verrouillable. Sous Vista/7, vous utilisez un périphérique D3D9Ex avec un renderTarget non verrouillable. Juste une note.