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():
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 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; } }
Donc je detruis mes vertex buffers avec Release(), je fais un Reset sur mon device et je re-cree mes vertex buffers.
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; }
Quand je minimise la fenetre, j'obtiens le message:
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.
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
Quelqu'un voit-il le probleme ?
merci
Partager