]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/vertexarray.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / core / vertexarray.h
index 290fa10c455f07b56f95c6ab0da3cfa9cc8f5fab..575a716e86f42a125a81b976d8965085b61a936f 100644 (file)
@@ -11,14 +11,17 @@ namespace Msp {
 namespace GL {
 
 /**
-Stores vertex data.
+Stores vertex data.  Each vertex has one or more attributes defined by a
+VertexFormat.
 
 The array's contents can be modified with the append and modify methods.  To
 obtain the location of an individual component within the vertex, use
 VertexFormat::offset.
 
-A higher-level interface for filling in vertex data is available in the
-VertexArrayBuilder class.
+VertexArrayBuilder provides a convenient way of filling in vertex data.
+
+Applications normally don't need to deal with VertexArrays directly.  They're
+managed by the Mesh and InstanceArray classes.
 */
 class VertexArray: public Bufferable
 {
@@ -32,40 +35,42 @@ public:
 private:
        VertexFormat format;
        std::vector<char> data;
-       unsigned stride;
+       unsigned stride = 0;
 
-       VertexArray(const VertexArray &);
-       VertexArray &operator=(const VertexArray &);
 public:
-       VertexArray();
+       VertexArray() = default;
 
-       /// Construct a VertexArray and set its format.
+       /** Constructs a VertexArray and sets its format. */
        VertexArray(const VertexFormat &);
 
-       /// Sets the format of the VertexArray.
+       /** Sets the format of the VertexArray.  The format cannot be changed once
+       set. */
        void set_format(const VertexFormat &);
 
        const VertexFormat &get_format() const { return format; }
 
-       /// Clears all vertices from the array.
+       /** Clears all vertices from the array.  Vertex format is retained. */
        void clear();
 
-       /// Reserve space for vertices.
-       void reserve(unsigned);
+       /** Reserve space for vertices.  If n is smaller than the current size,
+       nothing is done. */
+       void reserve(std::size_t n);
 
-       /// Append a new vertex at the end of the array and return its location.
+       /** Append a new vertex at the end of the array and return a pointer to it.
+       The array is marked as dirty. */
        char *append();
 
-       /// Returns the location of a vertex for modification.
-       char *modify(unsigned);
+       /** Returns a pointer to a vertex for modification.  The array is marked as
+       dirty. */
+       char *modify(std::size_t);
 private:
-       virtual unsigned get_data_size() const;
+       virtual std::size_t get_data_size() const;
        virtual const void *get_data_pointer() const { return &data[0]; }
 
 public:
-       unsigned size() const { return data.size()/stride; }
+       std::size_t size() const { return data.size()/stride; }
        const std::vector<char> &get_data() const { return data; }
-       const char *operator[](unsigned i) const { return &data[0]+i*stride; }
+       const char *operator[](std::size_t i) const { return &data[0]+i*stride; }
 };
 
 } // namespace GL