X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbufferable.h;h=66a6db1871952a2a7e7940bd5f9f931cd88eb808;hp=9b2f0bf8bfe2fb58323a3be15f781d8b5aa83091;hb=HEAD;hpb=9be04243c92f024327e74ad8d48861581d83b7ed diff --git a/source/bufferable.h b/source/bufferable.h deleted file mode 100644 index 9b2f0bf8..00000000 --- a/source/bufferable.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef MSP_GL_BUFFERABLE_H_ -#define MSP_GL_BUFFERABLE_H_ - -namespace Msp { -namespace GL { - -class Buffer; - -/** -Base class for things that can store data in buffers. Supports buffer sharing. -A dirty flag is provided for derived classes. It should be set when the data -in the buffer is considered out of date, and is cleared by Bufferable after -uploading fresh data to the buffer. -*/ -class Bufferable -{ -public: - class AsyncUpdater - { - private: - const Bufferable &bufferable; - char *mapped_address; - bool buffer_resized; - - public: - AsyncUpdater(const Bufferable &); - ~AsyncUpdater(); - - void upload_data(); - }; - -private: - Buffer *buffer; - unsigned offset; - Bufferable *next_in_buffer; - Bufferable *prev_in_buffer; - mutable bool location_dirty; -protected: - mutable bool dirty; - - Bufferable(); -public: - virtual ~Bufferable(); - - /** Sets the buffer to use. If prev is not null, it must use the same - 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(buffer && dirty) upload_data(0); } - - AsyncUpdater *refresh_async() const; - -private: - void unlink_from_buffer(); - -public: - /** Returns the buffer in which the data is stored. */ - 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 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; } - - /** Updates the offsets for the chain so that data from different objects - does not overlap. Should be called if either data size or alignment - changes. */ - void update_offset(); - - /** Returns the offset where the data should be uploaded. */ - unsigned get_offset() const { return offset; } - - /** Called when the target buffer or offset within it has changed. */ - virtual void location_changed(Buffer *, unsigned, unsigned) const { } - -private: - bool resize_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. */ - void upload_data(char *) const; -}; - -} // namespace GL -} // namespace Msp - -#endif