+void VertexSetup::unload()
+{
+ if(ARB_direct_state_access)
+ {
+ glVertexArrayVertexBuffer(id, 0, 0, 0, 0);
+ glVertexArrayVertexBuffer(id, 1, 0, 0, 0);
+ glVertexArrayElementBuffer(id, 0);
+ }
+ else
+ {
+ BindRestore _bind(*this);
+ Buffer::unbind_from(ARRAY_BUFFER);
+
+ for(const unsigned char *a=vertex_format.begin(); a!=vertex_format.end(); ++a)
+ {
+ unsigned sem = get_attribute_semantic(*a);
+ glDisableVertexAttribArray(sem);
+ glVertexAttribPointer(sem, 1, GL_FLOAT, false, 0, 0);
+ }
+ for(const unsigned char *a=inst_format.begin(); a!=inst_format.end(); ++a)
+ {
+ unsigned sem = get_attribute_semantic(*a);
+ glDisableVertexAttribArray(sem);
+ glVertexAttribPointer(sem, 1, GL_FLOAT, false, 0, 0);
+ }
+
+ glBindBuffer(ELEMENT_ARRAY_BUFFER, 0);
+ }
+
+ vertex_array = 0;
+ vertex_format = VertexFormat();
+ inst_array = 0;
+ inst_format = VertexFormat();
+ index_buffer = 0;
+}
+
+void VertexSetup::set_debug_name(const string &name)
+{
+#ifdef DEBUG
+ if(KHR_debug)
+ glObjectLabel(GL_VERTEX_ARRAY, id, name.size(), name.c_str());
+#else
+ (void)name;
+#endif
+}
+