Beispiel #1
0
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--;
}
Beispiel #2
0
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--;
}