unsigned offset;
Bufferable *next_in_buffer;
Bufferable *prev_in_buffer;
+ mutable bool location_dirty;
protected:
mutable bool dirty;
void use_buffer(Buffer *buf, Bufferable *prev = 0);
/** Uploads new data into the buffer if necessary. */
- void refresh() const { if(dirty) update_buffer(); }
+ void refresh() const { if(buffer && dirty) upload_data(0); }
AsyncUpdater *refresh_async() const;
private:
void unlink_from_buffer();
-protected:
+public:
/** Returns the buffer in which the data is stored. */
- Buffer *get_buffer() const { return buffer; }
+ const Buffer *get_buffer() const { return buffer; }
+protected:
/** Returns the amount of data to be stored in the buffer, in bytes. */
virtual unsigned get_data_size() const = 0;
/** Returns the offset where the data should be uploaded. */
unsigned get_offset() const { return offset; }
- /** Called when the offset for the data has changed. */
- virtual void offset_changed() { }
+ /** Called when the target buffer or offset within it has changed. */
+ virtual void location_changed(Buffer *, unsigned, unsigned) const { }
private:
bool resize_buffer() const;
-protected:
- /** Resizes the buffer if necessary and calls upload_data(). */
- void update_buffer() const;
+ void update_buffer_size() const;
/** Uploads data to the buffer. Receives pointer to mapped buffer memory as
parameter. If null, buffer interface should be used instead. */
- virtual void upload_data(char *) const;
+ void upload_data(char *) const;
};
} // namespace GL