inline void plVertCoder::IEncodeFloat(hsStream* s, const uint32_t vertsLeft, const int field, const int chan, const uint8_t*& src, const uint32_t stride) { if( !fFloats[field][chan].fCount ) { ICountFloats(src, (uint16_t)vertsLeft, kQuanta[field], stride, fFloats[field][chan].fOffset, fFloats[field][chan].fAllSame, fFloats[field][chan].fCount); s->WriteLEScalar(fFloats[field][chan].fOffset); s->WriteBool(fFloats[field][chan].fAllSame); s->WriteLE16(fFloats[field][chan].fCount); } if (!fFloats[field][chan].fAllSame) IWriteFloat(s, src, fFloats[field][chan].fOffset, kQuanta[field]); else src += 4; fFloats[field][chan].fCount--; }
void plVertCoder::IEncodeFloat(hsStream* S, unsigned int vertsLeft, int field, int chan, const unsigned char*& src, unsigned int stride) { if (fFloats[chan][field].fCount == 0) { ICountFloats(vertsLeft, src, FieldScales[field], stride, fFloats[chan][field].fOffset, fFloats[chan][field].fAllSame, fFloats[chan][field].fCount); S->writeFloat(fFloats[chan][field].fOffset); if (S->getVer().isLive()) S->writeBool(fFloats[chan][field].fAllSame); S->writeShort(fFloats[chan][field].fCount); } if (!S->getVer().isLive() || (!fFloats[chan][field].fAllSame)) { float flt = *(float*)src; flt = (flt - fFloats[chan][field].fOffset) * FieldScales[field]; S->writeShort((unsigned short)(flt + 0.5f)); } src += sizeof(float); fFloats[chan][field].fCount--; }