Example #1
0
void plSpanTemplate::setVertices(const std::vector<Vertex>& verts) {
    delete[] fData;
    if (verts.empty()) {
        fData = NULL;
        return;
    }

    fStride = CalcStride(fFormat);
    fNumVerts = verts.size();
    fData = new unsigned char[fNumVerts * fStride];

    unsigned char* dataPtr = fData;
    for (size_t i=0; i<fNumVerts; i++) {
        if (fFormat & kPosMask) {
            *(float*)dataPtr = verts[i].fPosition.X;
            dataPtr += sizeof(float);
            *(float*)dataPtr = verts[i].fPosition.Y;
            dataPtr += sizeof(float);
            *(float*)dataPtr = verts[i].fPosition.Z;
            dataPtr += sizeof(float);
        }
        if (fFormat & kWeightMask) {
            for (size_t j=0; j<(size_t)((fFormat & kWeightMask) / 0x100); j++) {
                *(float*)dataPtr = verts[i].fWeights[j];
                dataPtr += sizeof(float);
            }
        }
        if (fFormat & kWgtIdxMask) {
            *(int*)dataPtr = verts[i].fWeightIdx;
            dataPtr += sizeof(int);
        }
        if (fFormat & kNormMask) {
            *(float*)dataPtr = verts[i].fNormal.X;
            dataPtr += sizeof(float);
            *(float*)dataPtr = verts[i].fNormal.Y;
            dataPtr += sizeof(float);
            *(float*)dataPtr = verts[i].fNormal.Z;
            dataPtr += sizeof(float);
        }
        if (fFormat & kColorMask) {
            *(unsigned int*)dataPtr = verts[i].fColor1;
            dataPtr += sizeof(unsigned int);
        }
        if (fFormat & kColor2Mask) {
            *(unsigned int*)dataPtr = verts[i].fColor2;
            dataPtr += sizeof(unsigned int);
        }
        if (fFormat & kUVWMask) {
            for (size_t j=0; j<(size_t)((fFormat & kUVWMask) / 0x10); j++) {
                *(float*)dataPtr = verts[i].fUVWs[j].X;
                dataPtr += sizeof(float);
                *(float*)dataPtr = verts[i].fUVWs[j].Y;
                dataPtr += sizeof(float);
                *(float*)dataPtr = verts[i].fUVWs[j].Z;
                dataPtr += sizeof(float);
            }
        }
    }
}
static int
GuessAlignment(int width, int pixelSize, int stride)
{
    int alignment = 8; // Max GLES allows.
    while (CalcStride(width, pixelSize, alignment) != stride) {
        alignment /= 2;
        if (!alignment) {
            MOZ_ASSERT(alignment);
            return 1;
        }
    }
    return alignment;
}
Example #3
0
void plSpanTemplate::setFormat(unsigned short fmt) {
    fFormat = fmt;
    fStride = CalcStride(fFormat);
}