VertexDeclaration (uint vertexstride, uint count, ...) : elements(count), stride(vertexstride) {
int byteoffset = 0;
va_list elems;
va_start(elems, count);
for (uint n = 0; n < count; n++) {
elements[n] = va_arg(elems, VertexElement);
if (elements[n].offset == -1) {
elements[n].offset = byteoffset;
}
elements[n].inputslot = VertexDataUsages::PerVertex;
byteoffset += elements[n].Size();
}
va_end(elems);
}
/* And some Usage! */
#ifdef FURROVINECOMPILE
const VertexDeclaration VertexColorNormalBinormal::Declaration(VertexColorNormalBinormal::Stride,
4, VertexElement(),
VertexElement(sizeof(float) * 3, VertexElementFormats::Vector4, VertexElementUsages::Color, 0),
VertexElement(sizeof(float) * 7, VertexElementFormats::Vector3, VertexElementUsages::Normal, 0),
VertexElement(sizeof(float) * 10, VertexElementFormats::Vector3, VertexElementUsages::Binormal, 0));
#endif /* FURROVINECOMPILE */
VmVydGV4RGVjbGFyYXRpb24gKHVpbnQgdmVydGV4c3RyaWRlLCB1aW50IGNvdW50LCAuLi4pIDogZWxlbWVudHMoY291bnQpLCBzdHJpZGUodmVydGV4c3RyaWRlKSB7CgkKCWludCBieXRlb2Zmc2V0ID0gMDsKCXZhX2xpc3QgZWxlbXM7Cgl2YV9zdGFydChlbGVtcywgY291bnQpOwoJZm9yICh1aW50IG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewoJCWVsZW1lbnRzW25dID0gdmFfYXJnKGVsZW1zLCBWZXJ0ZXhFbGVtZW50KTsKCQlpZiAoZWxlbWVudHNbbl0ub2Zmc2V0ID09IC0xKSB7CgkJCWVsZW1lbnRzW25dLm9mZnNldCA9IGJ5dGVvZmZzZXQ7IAoJCX0KCQllbGVtZW50c1tuXS5pbnB1dHNsb3QgPSBWZXJ0ZXhEYXRhVXNhZ2VzOjpQZXJWZXJ0ZXg7CgkJYnl0ZW9mZnNldCArPSBlbGVtZW50c1tuXS5TaXplKCk7Cgl9Cgl2YV9lbmQoZWxlbXMpOwoKfQoKLyogQW5kIHNvbWUgVXNhZ2UhICovCgojaWZkZWYgRlVSUk9WSU5FQ09NUElMRQoKY29uc3QgVmVydGV4RGVjbGFyYXRpb24gVmVydGV4Q29sb3JOb3JtYWxCaW5vcm1hbDo6RGVjbGFyYXRpb24oVmVydGV4Q29sb3JOb3JtYWxCaW5vcm1hbDo6U3RyaWRlLAoJCTQsIFZlcnRleEVsZW1lbnQoKSwgCgkJVmVydGV4RWxlbWVudChzaXplb2YoZmxvYXQpICogMywgVmVydGV4RWxlbWVudEZvcm1hdHM6OlZlY3RvcjQsIFZlcnRleEVsZW1lbnRVc2FnZXM6OkNvbG9yLCAwKSwgCgkJVmVydGV4RWxlbWVudChzaXplb2YoZmxvYXQpICogNywgVmVydGV4RWxlbWVudEZvcm1hdHM6OlZlY3RvcjMsIFZlcnRleEVsZW1lbnRVc2FnZXM6Ok5vcm1hbCwgMCksIAoJCVZlcnRleEVsZW1lbnQoc2l6ZW9mKGZsb2F0KSAqIDEwLCBWZXJ0ZXhFbGVtZW50Rm9ybWF0czo6VmVjdG9yMywgVmVydGV4RWxlbWVudFVzYWdlczo6Qmlub3JtYWwsIDApKTsKCiNlbmRpZiAvKiBGVVJST1ZJTkVDT01QSUxFICov