Bonjour,
J'utilise le code suivant pour faire une copie d'écran devant contenir les rendus 3d/accélérés :
En utilisation normale, pas de soucis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... g_pDirect3D_Device->CreateOffscreenPlainSurface(nX2, nY2, D3DFMT_A8R8G8B8 /*D3DFMT_A8B8G8R8*/, D3DPOOL_SCRATCH, &frontbuf, NULL); g_pDirect3D_Device->GetFrontBufferData(NULL, frontbuf); D3DXSaveSurfaceToFileInMemory(&out, D3DXIFF_BMP, frontbuf, NULL, NULL ); ...
Je dois afficher le résultat après transformations à l'écran. Ce processus boucle à l'infini, donc pour éviter un effet type Larsen, je switche de desktop comme ceci :
Et la se passe un truc étrange : Le rendu accéléré me donne uniquement sa première image mais tout le reste autour fonctionne bien, bouge etc ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void goNextDesktop() { /*Backup du desktop d'origine */ hOriginalThread = GetThreadDesktop(GetCurrentThreadId()); /* Ouverture des E/S du desktop courant */ hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP); hOriginalDesktopWindow = GetDesktopWindow(); hOriginalDC = GetDC(hOriginalDesktopWindow); SetProcessWindowStation(CreateWindowStation("W2W station", CWF_CREATE_ONLY, DELETE|READ_CONTROL|WRITE_DAC|WRITE_OWNER|GENERIC_ALL, NULL)); /* Hop, un desktop tout propre tout neuf encore sous le plastique */ hNewDesktop = CreateDesktop("W2W Desktop", NULL,NULL,0,DELETE|READ_CONTROL|WRITE_DAC|WRITE_OWNER|GENERIC_ALL,NULL); /* les deux vont de paire */ /* Assignation du processus au desktop indiqué */ SetThreadDesktop(hNewDesktop); /* Et go sur ledesktop */ SwitchDesktop(hNewDesktop); }
Autre chose étrange : avec le switch de desktop, dwm.exe voit son utilisation RAM osciller entre 350Mo et 2Go (graphe mémoire en dents de scie)
Quelqu'un a t il une idée ?
Merci.
Partager