Esempio n. 1
0
size_t plDrawableSpans::buildDIIndex(const hsTArray < std::shared_ptr<plGeometrySpan> >& spans) {
    plDISpanIndex di_idx;
    for (size_t i=0; i<spans.getSize(); ++i) {
        di_idx.fIndices.append(fSourceSpans.find(spans[i]));
    }
    size_t result = fDIIndices.getSize();
    fDIIndices.append(di_idx);
    return result;
}
Esempio n. 2
0
void plSpanInstance::setPosDeltas(const hsTArray<hsVector3>& verts) {
    delete[] fPosDelta;
    fNumVerts = verts.getSize();
    fPosDelta = new unsigned char[fNumVerts * CalcPosStride(fEncoding)];

    switch (fEncoding.getCode() & plSpanEncoding::kPosMask) {
    case plSpanEncoding::kPos888:
        {
            unsigned char* pp = fPosDelta;
            for (unsigned int i=0; i<fNumVerts; i++) {
                pp[0] = (unsigned char)(verts[i].X / fEncoding.getPosScale());
                pp[1] = (unsigned char)(verts[i].Y / fEncoding.getPosScale());
                pp[2] = (unsigned char)(verts[i].Z / fEncoding.getPosScale());
                pp += 3;
            }
        }
        break;
    case plSpanEncoding::kPos161616:
        {
            unsigned short* pp = (unsigned short*)fPosDelta;
            for (unsigned int i=0; i<fNumVerts; i++) {
                pp[0] = (unsigned short)(verts[i].X / fEncoding.getPosScale());
                pp[1] = (unsigned short)(verts[i].X / fEncoding.getPosScale());
                pp[2] = (unsigned short)(verts[i].X / fEncoding.getPosScale());
                pp += 3;
            }
        }
        break;
    case plSpanEncoding::kPos101010:
        {
            unsigned int* pp = (unsigned int*)fPosDelta;
            for (unsigned int i=0; i<fNumVerts; i++) {
                *pp = ((unsigned int)(verts[i].Z / fEncoding.getPosScale()) & 0x3F) << 20
                    | ((unsigned int)(verts[i].Y / fEncoding.getPosScale()) & 0x3F) << 10
                    | ((unsigned int)(verts[i].X / fEncoding.getPosScale()) & 0x3F);
                pp++;
            }
        }
        break;
    case plSpanEncoding::kPos008:
        {
            unsigned char* pp = fPosDelta;
            for (unsigned int i=0; i<fNumVerts; i++) {
                *pp = (unsigned char)(verts[i].Z / fEncoding.getPosScale());
                pp++;
            }
        }
        break;
    }
}
Esempio n. 3
0
void plLeafController::setEaseControllers(const hsTArray<class plEaseController*>& controllers) {
    DeallocControllers();
    AllocControllers(controllers.getSize());
    for (size_t i=0; i<controllers.getSize(); i++)
        fEaseControllers[i] = controllers[i];
}
Esempio n. 4
0
void plLeafController::setKeys(const hsTArray<hsKeyFrame*>& keys, unsigned int type) {
    DeallocKeys();
    AllocKeys(keys.getSize(), type);
    for (size_t i=0; i<keys.getSize(); i++)
        fKeys[i] = keys[i];
}
Esempio n. 5
0
 void append(const hsTArray<T>& items) {
     size_t ins = getSize();
     incSize(items.getSize());
     for (size_t i=0; i<items.getSize(); i++)
         data[ins + i] = items.get(i);
 }