]> git.tdb.fi Git - libs/gl.git/blobdiff - source/bufferable.h
Further refactor Bufferable's API for derived classes
[libs/gl.git] / source / bufferable.h
index f157c6281d2197d17b56bd78a7d61cd1754ee186..9b2f0bf8bfe2fb58323a3be15f781d8b5aa83091 100644 (file)
@@ -34,10 +34,10 @@ private:
        unsigned offset;
        Bufferable *next_in_buffer;
        Bufferable *prev_in_buffer;
+       mutable bool location_dirty;
 protected:
        mutable bool dirty;
 
-protected:
        Bufferable();
 public:
        virtual ~Bufferable();
@@ -47,17 +47,18 @@ public:
        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;
 
@@ -76,19 +77,17 @@ protected:
        /** 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