/* $Id$
This file is part of libmspgl
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2010 Mikko Rasa, Mikkosoft Productions
Distributed under the LGPL
*/
#include "except.h"
#include "vertexformat.h"
+using namespace std;
+
namespace Msp {
namespace GL {
delete[] data;
}
+unsigned VertexFormat::stride() const
+{
+ uint s=0;
+ for(const unsigned char *i=begin(); i!=end(); ++i)
+ s+=(*i&3)+1;
+ return s;
+}
+
VertexFormat operator,(const VertexFormat &f, VertexComponent c)
{
VertexFormat r=f;
if(*c<ATTRIB1)
throw InvalidState("Last component is not a generic attribute");
// VertexArray uses an unsigned to store flags for enabled arrays
- if(i<1 || i>28)
+ if(i>=28)
throw InvalidParameterValue("Generic attribute index out of range");
- *c+=(i-1)*4;
+ *c+=i*4;
return r;
}
-uint get_stride(const VertexFormat &f)
-{
- uint stride=0;
- for(const unsigned char *i=f.begin(); i!=f.end(); ++i)
- stride+=(*i&3)+1;
- return stride;
-}
-
-std::istream &operator>>(std::istream &in, VertexFormat &f)
+istream &operator>>(istream &in, VertexFormat &f)
{
- std::string str;
+ string str;
in>>str;
unsigned start=0;
while(1)
{
- unsigned underscore=str.find('_', start);
+ string::size_type underscore=str.find('_', start);
bool fail=false;
if(!str.compare(start, underscore-start, "VERTEX2"))
f=(f,VERTEX2);
if(fail)
{
- in.setstate(std::ios_base::failbit);
+ in.setstate(ios_base::failbit);
break;
}
- if(underscore==std::string::npos)
+ if(underscore==string::npos)
break;
start=underscore+1;
}