static VertexFormat GetVertexFormat (VertexFlags flags, int boneSlotCount) { uint elemCount = 0, f = (uint)flags; for (elemCount = 0; f != 0; elemCount++) f &= f - 1; var elems = new VertexElement[(int)elemCount + 1 + (boneSlotCount * 2)]; int offset = 3, idx = 1; elems[0] = new VertexElement("Position", 0, 3); if ((flags & VertexFlags.Normal) != 0) { elems[idx++] = new VertexElement("Normal", offset, 3); offset += 3; } for (var i = 0; i < 4; i++) { if (((int)flags & ((int)VertexFlags.TexCoord0 << i)) != 0) { elems[idx++] = new VertexElement("TexCoord" + i, offset, 2); offset += 2; } } for (var i = 0; i < 4; i++) { if (((int)flags & ((int)VertexFlags.Color0 << i)) != 0) { elems[idx++] = new VertexElement("Color" + i, offset, 4); offset += 4; } } for (var i = 0; i < boneSlotCount; i++) elems[idx++] = new VertexElement("BoneWeight" + i, offset++, 1); for (var i = 0; i < boneSlotCount; i++) elems[idx++] = new VertexElement("BoneIndex" + i, offset++, 1); return new VertexFormat(offset, elems); }