X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fvertexsetup.h;h=1cdedc79e7bf2c4186f78c0b59304d800a58564e;hp=d0ed870378034334b6935b092dcfbcae80909c80;hb=HEAD;hpb=e92de029768eef5f0fd744329e589161b46d0762 diff --git a/source/core/vertexsetup.h b/source/core/vertexsetup.h index d0ed8703..1cdedc79 100644 --- a/source/core/vertexsetup.h +++ b/source/core/vertexsetup.h @@ -3,6 +3,7 @@ #include "datatype.h" #include "vertexformat.h" +#include "vertexsetup_backend.h" namespace Msp { namespace GL { @@ -11,11 +12,16 @@ class Buffer; class VertexArray; /** -Combines a VertexArray with an index buffer. This wraps OpenGL's vertex array -objects. Intended for internal use. +Combines vertex and instance attributes and an index buffer for a complete +description of vertex input state. + +Applications normally don't need to deal with VertexSetups directly. They're +managed by the Mesh and InstanceArray classes. */ -class VertexSetup +class VertexSetup: public VertexSetupBackend { + friend VertexSetupBackend; + private: enum ComponentMask { @@ -24,25 +30,34 @@ private: INDEX_BUFFER = 4 }; - unsigned id; - mutable unsigned dirty; - const VertexArray *vertex_array; + mutable unsigned dirty = 0; + const VertexArray *vertex_array = 0; VertexFormat vertex_format; - const VertexArray *inst_array; + const VertexArray *inst_array = 0; VertexFormat inst_format; - const Buffer *index_buffer; - DataType index_type; + const Buffer *index_buffer = 0; + DataType index_type = UNSIGNED_SHORT; public: - VertexSetup(); - ~VertexSetup(); - + /** Sets format for vertex data. Instance attributes won't be used. The + format cannot be changed once set. */ void set_format(const VertexFormat &); + + /** Sets formats for both vertex and instance data. The formats cannot be + changed once set. */ void set_format_instanced(const VertexFormat &, const VertexFormat &); + /** Sets the VertexArray to use as the source of vertex attribute values. + The array's format must match the VertexSetup's vertex format. */ void set_vertex_array(const VertexArray &); + + /** Sets the VertexArray to use as the source of instance attribute values. + An instance format must be defined and the array's format must match it. */ void set_instance_array(const VertexArray &); + + /** Sets the buffer containing index data and the type of indices. */ void set_index_buffer(const Buffer &, DataType); + const VertexArray *get_vertex_array() const { return vertex_array; } const VertexArray *get_instance_array() const { return inst_array; } const Buffer *get_index_buffer() const { return index_buffer; } @@ -50,18 +65,14 @@ public: private: static bool verify_format(const VertexFormat &); - static void require_format(const VertexFormat &); void update() const; - void update_vertex_array(const VertexArray &, unsigned, unsigned, bool) const; public: void refresh() const { if(dirty) update(); } - unsigned get_id() const { return id; } - void unload(); - void set_debug_name(const std::string &); + using VertexSetupBackend::set_debug_name; }; } // namespace GL