J'ai un probleme quand ma feentre est minimisee, avec, apparemment, une perte de focus.

Concernant mes ressources, j'ai des vertex buffers que je gere moi-meme, et des textures gerees par le device.


J'ai regarde la faq de directX sur ce site. Ce que je fais:

je teste l'etat du device avec le code suivant avant l'appel du Begin():

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
int
evas_d3d_device_check(Evas_D3D_Device *device)
{
   HRESULT state = device->device->TestCooperativeLevel();
 
   switch (state)
     {
     case D3D_OK :
       return 1;
     case D3DERR_DEVICELOST :
       Sleep(100);
       return 0;
     case D3DERR_DEVICENOTRESET :
       _evas_d3d_device_viewport_set(device);
       return 0;
     default:
       return 0;
     }
}
la fonction _evas_d3d_device_viewport_set, qui est appelee lors de la minimisation de la fenetre, est la suivante:

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
22
static void
_evas_d3d_device_viewport_set(Evas_D3D_Device *device)
{
   D3DPRESENT_PARAMETERS pp;
 
   if (!device->change.size ||
       (device->current.w == 0) ||
       (device->current.h == 0)) return;
 
   _evas_d3d_device_vertex_buffers_release(device);
 
   if (!_evas_d3d_device_parameters_get(device, &pp, NULL))
     return;
 
   if (FAILED(device->device->Reset(&pp)))
     return;
 
   if (!_evas_d3d_device_vertex_buffers_create(device))
     return;
 
   device->change.size = 0;
}
Donc je detruis mes vertex buffers avec Release(), je fais un Reset sur mon device et je re-cree mes vertex buffers.

Quand je minimise la fenetre, j'obtiens le message:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
warning: Direct3D9: (ERROR) :Failed to create driver surface
 
warning: Direct3D9: (ERROR) :Reset failed and Reset/TestCooperativeLevel/Release are the only legal APIs to be called subsequently
et le programme plante sur le premier appel a Release() de mes vertex buffers (dans _evas_d3d_device_vertex_buffers_release), avant le Reset(), donc.

Quelqu'un voit-il le probleme ?

merci