+++ /dev/null
-#include "vertexarray.h"
-#include "vertexarraybuilder.h"
-
-namespace Msp {
-namespace GL {
-
-VertexArrayBuilder::VertexArrayBuilder(VertexArray &a):
- array(a)
-{ }
-
-void VertexArrayBuilder::vertex_(const Vector4 &v)
-{
- float *ptr = array.append();
- for(const unsigned char *c=array.get_format().begin(); c!=array.get_format().end(); ++c)
- {
- unsigned sz = (*c&3)+1;
- unsigned t = *c>>2;
- switch(t)
- {
- case 0:
- *ptr++ = v.x;
- *ptr++ = v.y;
- if(sz>=3) *ptr++ = v.z;
- if(sz>=4) *ptr++ = v.w;
- break;
- case 1:
- *ptr++ = nor.x;
- *ptr++ = nor.y;
- *ptr++ = nor.z;
- break;
- case 2:
- if(sz==1)
- {
- union { unsigned char c[4]; float f; } u;
- u.c[0] = static_cast<unsigned char>(col.r*255);
- u.c[1] = static_cast<unsigned char>(col.g*255);
- u.c[2] = static_cast<unsigned char>(col.b*255);
- u.c[3] = static_cast<unsigned char>(col.a*255);
- *ptr++ = u.f;
- }
- else
- {
- *ptr++ = col.r;
- *ptr++ = col.g;
- *ptr++ = col.b;
- if(sz>=4) *ptr++ = col.a;
- }
- break;
- default:
- const Vector4 &a = (t<11 ? texc[t-3] : attr[t-11]);
- *ptr++ = a.x;
- if(sz>=2) *ptr++ = a.y;
- if(sz>=3) *ptr++ = a.z;
- if(sz>=4) *ptr++ = a.w;
- break;
- }
- }
-}
-
-} // namespace GL
-} // namespace Msp