buffer, and this object is inserted after it. */
void use_buffer(Buffer *buf, Bufferable *prev = 0);
+ /** Uploads new data into the buffer if necessary. */
+ void refresh() const { if(dirty) update_buffer(); }
+
private:
void unlink_from_buffer();
/** Returns the amount of data to be stored in the buffer, in bytes. */
virtual unsigned get_data_size() const = 0;
+ /** Returns a pointer to the start of data in client memory. */
+ virtual const void *get_data_pointer() const = 0;
+
/** Returns the alignment required for the data, in bytes. The offset is
guaranteed to be a multiple of this. */
virtual unsigned get_alignment() const { return 1; }
/** Called when the offset for the data has changed. */
virtual void offset_changed() { }
+private:
+ bool resize_buffer() const;
+
+protected:
/** Resizes the buffer if necessary and calls upload_data(). */
void update_buffer() const;
/** Uploads data to the buffer. */
- virtual void upload_data() const = 0;
+ virtual void upload_data() const;
};
} // namespace GL