Loader(VertexArray &);
};
+private:
+ VertexFormat format;
+ std::vector<float> data;
+ uint stride;
+ VertexBuffer *vbuf;
+ bool own_vbuf;
+
+ VertexArray(const VertexArray &);
+ VertexArray &operator=(const VertexArray &);
+public:
VertexArray(VertexFormat);
~VertexArray();
unsigned size() const { return data.size()/stride; }
void clear();
void reset(VertexFormat);
- RefPtr<VertexArrayBuilder> modify();
void apply() const;
void update_data();
+ float *append();
+ float *operator[](unsigned i) { return &data[0]+i*stride; }
+ const float *operator[](unsigned i) const { return &data[0]+i*stride; }
private:
- VertexFormat format;
- std::vector<float> data;
- uint stride;
- VertexBuffer *vbuf;
- bool own_vbuf;
-
- VertexArray(const VertexArray &);
- VertexArray &operator=(const VertexArray &);
void set_array(unsigned, unsigned, unsigned) const;
static unsigned enabled_arrays;
};
+void array_element(int);
+void draw_arrays(PrimitiveType, int, sizei);
+void draw_elements(PrimitiveType, sizei, DataType, const void *);
+void draw_range_elements(PrimitiveType, uint, uint, sizei, DataType, const void *);
+
+inline void draw_elements(PrimitiveType mode, sizei count, const unsigned *indices)
+{ draw_elements(mode, count, UNSIGNED_INT, indices); }
+
+inline void draw_elements(PrimitiveType mode, sizei count, const unsigned short *indices)
+{ draw_elements(mode, count, UNSIGNED_SHORT, indices); }
+
+inline void draw_range_elements(PrimitiveType mode, uint low, uint high, sizei count, const unsigned short *indices)
+{ draw_range_elements(mode, low, high, count, UNSIGNED_SHORT, indices); }
+
+inline void draw_range_elements(PrimitiveType mode, uint low, uint high, sizei count, const unsigned *indices)
+{ draw_range_elements(mode, low, high, count, UNSIGNED_INT, indices); }
+
} // namespace GL
} // namespace Msp