コード例 #1
0
ファイル: Model.cs プロジェクト: jpernst/GameStack
		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);
		}