Lepo je znati binarnu aritmetiku...
(Umesto *pData dalje u tekstu koristicu CUSTOM_FVF)
// ne znam tacno kako su definisane ove vrednosti u datoteci DirectX, ali i ovo ce da posluzi
D3DFVF_XYZ = 00000001
D3DFVF_NORMAL = 00000010
1) CUSTOM_FVF |= D3DFVF_XYZ
1) CUSTOM_FVF |= D3DFVF_NORMAL
Ovaj operator "|" postavlja neke bitove na jedinice.
na pocetku CUSTOM_FVF je bio npr: 00000000 ( neka bude 8-bitni )
Posle operacije 1) on je npr. postavljen na 00000001 , a posle 2) na 00000010 ( pretpostavljamo da je vrednost D3DFVF_XYZ = 00000001, a D3DFVF_NORMAL = 00000010 )
( Savetujem ti da pogledas malo binarnu aritmetiku AND, OR, NOT, ... )
E sada, ono sto tebi treba...
Hocemo da ispitamo da li CUSTOM_FVF sadrzi informacije o normalama, tj. da li je drugi bit ukljucen.
Koristimo operator & (AND iliti "i")
Da vidimo prvo binarno:
if( 00000011 & 00000010 ) da li je drugi bit postavljen na 1
-> CUSTOM_FVF sadrzi podatke o normalama!!!
Vazan je ovaj operator "&" jer on sluzi za proveru stanja dok "|" sluzi za postavljanje bitova na jedinicu ( ovde necu da ulazim u to kako rade AND, OR operatori. Vidi negde na Google ako nista drugo ... )
U DirectX biblioteci je D3DFVF_NORMAL vec definisana konstanta koja ima neku vrednost slicnu ovoj binarnoj ( mogu biti i hex. brojevi ).
Znaci, ne moras da vodis racuna o nulama i jedinicama vec su tu konstante da olaksaju stvar.
Na kraju, resenje tvog problema koje uzima u obzir sve ovo do sada receno:
BOOL bHasNormals
--------------------------
if (CUSTOM_FVF & D3DFVF_NORMAL)
bHasNormals = TRUE;
Isto je i za koordinate i ostalo.
Ovo je veoma mocan pristup baratanja sa stanjima programa.
NPR. mogli su da koncipiraju DirectX datoteku i ovako:
BOOL bNormals
BOOL bVertices
...
pa da proveravas na ovaj nacin
if(CUSTOM_FVF->bNormals) bla bla
Ali ova metoda sa setovanjem bitova je mocnija.
Ne znam koliko sa bio jasan ( jesam malo iskomplikovao ) ali vazno je da znas ovo na kraju za dalji rad tvog programa...
EOF