HEY!
A kovetkezo jelensegbe botlottam 3D cuccos irasa kozben.
Adva vagyon 2 fajta vertex formatum, az egyik 2d-s a masik nem (3D)
Az iment kozolt modon lettek definialva:
const FVF_3DVERTEX_FORMAT = D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1;
const FVF_2DVERTEX_FORMAT = D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1;
Ennek futas kozben kutya baja, teljesen jol muxik, hanem aztan ALT-TAB nyomkods
a kozben
app errorokat ir ki, nagy dirrel-durral, de csak Win2K es XP alatt, Win98-on to
keletesen szuperal.
A konkret hiba az volt, hogy olyan mem teruletre akart irni a progi, ahova nem
lehetett.
Erre, mit tettem en, elkezdtem kidebugolni a dolgot es erdekes felfedezeseket t
ettem:
Csak a 3D-s vertex buffer (FVF_3DVERTEX_FORMAT) lockolasakor adodik a hiba,
megpedig nem hibat ad vissza, hanem egy "invalid" pointert, ahova a program bat
ran beirkalja
a kello dolgokat. A 2d-s vertex buffert siman lehet irkalni, de a 3D-set az nem
?!?!?!?!
Egy frappans ALT-TAB lekezelest szerettem volna veghezvinni. Legjobb tudomasom
szerint ezt ugy szokas megoldani, hogy D3D8Device->Present(...) visszjon egy ad
ott hibaval,
(D3DERR_DEVICELOST) ha a programrol elkerult a fokusz, ami egy ALT-TAB nyomassa
l
konnyeden eloidezheto. Ezutan csak hivni kell a D3D8Device->TestCooperativeLeve
l()-t ami
egyszercsak azt mondja, hogy D3DERR_DEVICENOTRESET, ilyenkor jon egy D3D8Device
->Reset(),
es nosza a program futhat tovabb nagy sebbel-lobbal.
Minden ezzel kapcsolatos otletet szivesen fogadok :)
udv:
-marci
|