Bonjour,

J'utilise le code suivant pour faire une copie d'écran devant contenir les rendus 3d/accélérés :

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 );
...
En utilisation normale, pas de soucis.

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 :
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);
}
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 ...
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.