> + switch (FVF & 0xe) You should use D3DFVF_POSITION_MASK instead of 0xe here.
> + texture = FVF >> 16; > + > + for (i = 0; i < ((FVF&D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT); > i++) > + { > + switch (texture & 3) > + { > + case D3DFVF_TEXTUREFORMAT1: > + size = size + sizeof(FLOAT); > + break; > + case D3DFVF_TEXTUREFORMAT2: > + size = size + sizeof(FLOAT) * 2; > + break; > + case D3DFVF_TEXTUREFORMAT3: > + size = size + sizeof(FLOAT) * 3; > + break; > + case D3DFVF_TEXTUREFORMAT4: > + size = size + sizeof(FLOAT) * 4; > + break; > + default: > + break; > + } > + texture = texture >> 2; > + } It's not completely obvious where you get the different shifts and masks here, a comment wouldn't hurt.