X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fvertexarray.h;h=575a716e86f42a125a81b976d8965085b61a936f;hp=107d1851f8a70b99a2d5bb24533034a86cc1c883;hb=HEAD;hpb=a3cc9f4469153396c7ad0868f3cbb2d2f698d710 diff --git a/source/core/vertexarray.h b/source/core/vertexarray.h index 107d1851..575a716e 100644 --- a/source/core/vertexarray.h +++ b/source/core/vertexarray.h @@ -1,30 +1,27 @@ #ifndef MSP_GL_VERTEXARRAY_H_ #define MSP_GL_VERTEXARRAY_H_ -#include #include -#include #include #include "bufferable.h" -#include "datatype.h" -#include "primitivetype.h" #include "vertexarraybuilder.h" #include "vertexformat.h" namespace Msp { namespace GL { -class Buffer; - /** -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 { @@ -37,41 +34,43 @@ public: private: VertexFormat format; - std::vector data; - unsigned stride; + std::vector data; + 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. - float *append(); + /** 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. - float *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; } - const std::vector &get_data() const { return data; } - const float *operator[](unsigned i) const { return &data[0]+i*stride; } + std::size_t size() const { return data.size()/stride; } + const std::vector &get_data() const { return data; } + const char *operator[](std::size_t i) const { return &data[0]+i*stride; } }; } // namespace GL