Suite à mon previous question, je peux sauvegarder le backbuffer d'un Direct3DDevice sur une surface.Direct3D: Enregistrement dans des fichiers AVI
J'ai déjà trouvé le D3DXSaveSurfaceToFile dans le SDK DirectX et ça marche très bien! Cependant, je veux enregistrer les surfaces obtenues dans un fichier AVI.
J'ai également trouvé le AVIFile reference mais ils ne sont évidemment pas directement compatibles avec les surfaces DirectX.
Quelle serait la meilleure façon d'aborder ce problème? J'ai vu un certain nombre de solutions basées sur GDI +/MVC de grabbing HDCs, mais ceux-ci sont hors de question. Je ne sais pas non plus quel type de données AVIFile attend et comment l'extraire de la D3DSurface.
S'il vous plaît aviser! :)
modifier:
post-traitement est également une option. Je peux capturer les données de surface dans un certain nombre de formats, spécifié here, en mémoire avec D3DXSaveSurfaceToFileInMemory. Ensuite, je pourrais compresser ces données et les stocker sur le disque.
Comment compresser mes données? Comment dois-je le stocker? Est-ce que je stocke un horodatage avec? Après l'enregistrement, comment dois-je transformer les données générées dans un fichier AVI?
J'ai regardé ceci et cela implique de changer la cible de rendu, puis de recopier le backbuffer. Ce n'est pas une possibilité pour moi, car je ne fais que croquer les API et je n'ai aucun contrôle sur le backbuffer d'origine. Je peux obtenir le backbuffer actuel et le nourrir à quelque chose de très bien cependant. –
En outre, il faut que je me connecte à CreateDevice/Reset/etc, ce que je ne veux pas vraiment faire (mettre des restrictions sur quand je devrais commencer à injecter/hooker). –
@Daniel: Mise à jour ma réponse. – Goz