]> git.tdb.fi Git - libs/gl.git/blobdiff - source/vertexformat.cpp
Use DSA for binding textures if available
[libs/gl.git] / source / vertexformat.cpp
index 8cc0cec990157719b87ffe70e640b4c579829f77..037305f8d74251c9e6cd882540df733e292afc30 100644 (file)
@@ -11,72 +11,33 @@ namespace Msp {
 namespace GL {
 
 VertexFormat::VertexFormat():
-       data(0)
+       count(0)
 { }
 
 VertexFormat::VertexFormat(VertexComponent c):
-       data(new unsigned char[8])
+       count(1)
 {
-       data[0] = 1;
-       data[1] = c;
-}
-
-VertexFormat::VertexFormat(const VertexFormat &f):
-       data(0)
-{
-       *this = f;
-}
-
-VertexFormat &VertexFormat::operator=(const VertexFormat &f)
-{
-       delete[] data;
-       if(f.data)
-       {
-               data = new unsigned char[(f.data[0]&~7)+8];
-               copy(f.data, f.data+f.data[0]+1, data);
-       }
-       else
-               data = 0;
-
-       return *this;
-}
-
-VertexFormat::~VertexFormat()
-{
-       delete[] data;
+       components[0] = c;
 }
 
 VertexFormat VertexFormat::operator,(VertexComponent c) const
 {
+       if(count>=MAX_COMPONENTS)
+               throw invalid_operation("VertexFormat::operator,");
+
        VertexFormat r = *this;
-       if(r.data)
-       {
-               const unsigned char n = ++r.data[0];
-               if((n&7)==0)
-               {
-                       unsigned char *newdt = new unsigned char[n+8];
-                       copy(r.data, r.data+n, newdt);
-                       delete r.data;
-                       r.data = newdt;
-               }
-               r.data[n] = c;
-       }
-       else
-       {
-               r.data = new unsigned char[8];
-               r.data[0] = 1;
-               r.data[1] = c;
-       }
+       r.components[r.count++] = c;
 
        return r;
 }
 
 VertexFormat VertexFormat::operator,(unsigned i) const
 {
-       if(!data)
+       if(!count)
                throw invalid_operation("VertexFormat::operator,");
+
        VertexFormat r = *this;
-       unsigned char *c = r.data+r.data[0];
+       unsigned char *c = &r.components[r.count-1];
        *c = make_indexed_component(static_cast<VertexComponent>(*c), i);
 
        return r;