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: public VertexSetupBackend
{
INDEX_BUFFER = 4
};
- 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();
-
+ /** 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; }