FAQ DirectX

FAQ DirectXConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 63, dernière mise à jour : 14 juin 2021
Sommaire→DirectGraphics→TechniquesAfin de capturer la scène courante avec DirectX, il faut récupérer le contenu du front buffer ou du back buffer, puis enregistrer celui-ci dans un fichier à l'aide des fonctions de D3DX.
Voici une fonction effectuant cette tâche :
void ScreenShot(const std::string& Filename)
{
// Surface de destination
LPDIRECT3DSURFACE9 Surface = NULL;
// Si on est en mode fenêtré alors on récupère le backbuffer, sinon on prend le frontbuffer (qui permet d'avoir l'anti-aliasing)
if (Windowed)
{
// Récupération du backbuffer
Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &Surface);
// Sauvegarde de la surface dans le fichier
D3DXSaveSurfaceToFile(Filename.c_str(), D3DXIFF_BMP, Surface, NULL, NULL);
}
else
{
// Récupération des dimensions du bureau (la surface doit impérativement avoir ces dimensions)
int Width = GetSystemMetrics(SM_CXSCREEN);
int Height = GetSystemMetrics(SM_CYSCREEN);
// Création de la surface de destination (doit impérativement être en D3DFMT_A8R8G8B8)
Device->CreateOffscreenPlainSurface(Width, Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &Surface, NULL);
// Récupération des données du front buffer
Device->GetFrontBufferData(NULL, Surface);
// Sauvegarde de l'image dans un fichier, au format BMP
D3DXSaveSurfaceToFile(Filename.c_str(), D3DXIFF_BMP, Surface, NULL, NULL);
}
// Destruction de la surface
SAFE_RELEASE(Surface);
}Ce code est séparé en deux parties : en effet si l'on se trouve en mode plein écran, seule la récupération du front buffer permet d'obtenir l'image finale en cas d'utilisation de l'anti-aliasing. Sinon, le back buffer fait parfaitement l'affaire.



