]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/vertexsetup.h
Use default member initializers for simple types
[libs/gl.git] / source / core / vertexsetup.h
index bae4c5f36c2245d194eacc6b08b1df25658dade7..208e55d3cd676729d4299024feaad06a273bf3d2 100644 (file)
@@ -1,59 +1,62 @@
 #ifndef MSP_GL_VERTEXSETUP_H_
 #define MSP_GL_VERTEXSETUP_H_
 
-#include "bindable.h"
+#include "datatype.h"
 #include "vertexformat.h"
+#include "vertexsetup_backend.h"
 
 namespace Msp {
 namespace GL {
 
+class Buffer;
 class VertexArray;
 
 /**
 Combines a VertexArray with an index buffer.  This wraps OpenGL's vertex array
 objects.  Intended for internal use.
 */
-class VertexSetup: public Bindable<VertexSetup>
+class VertexSetup: public VertexSetupBackend
 {
+       friend VertexSetupBackend;
+
 private:
        enum ComponentMask
        {
                VERTEX_ARRAY = 1,
                INSTANCE_ARRAY = 2,
-               INDEX_BUFFER = 4,
-               UNUSED_ATTRIBS = 8,
-               ATTRIB_SHIFT = 4
+               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;
+       const Buffer *index_buffer = 0;
+       DataType index_type = UNSIGNED_SHORT;
 
 public:
-       VertexSetup();
-       ~VertexSetup();
+       void set_format(const VertexFormat &);
+       void set_format_instanced(const VertexFormat &, const VertexFormat &);
 
        void set_vertex_array(const VertexArray &);
-       void set_instance_array(const VertexArray *);
-       void set_index_buffer(const Buffer &);
-       void refresh();
+       void set_instance_array(const VertexArray &);
+       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; }
+       DataType get_index_type() const { return index_type; }
 
 private:
-       static unsigned get_attribs(const VertexFormat &);
-       static unsigned get_update_mask(unsigned, const VertexFormat &, const VertexArray &);
-       void update(unsigned) const;
-       void update_vertex_array(const VertexArray &, unsigned, unsigned, bool) const;
+       static bool verify_format(const VertexFormat &);
+       void update() const;
 
 public:
-       void bind() const;
-       static void unbind();
+       void refresh() const { if(dirty) update(); }
+
+       void unload();
+
+       using VertexSetupBackend::set_debug_name;
 };
 
 } // namespace GL