]> git.tdb.fi Git - libs/gl.git/blobdiff - source/bufferable.h
Refactor the internal interface of Bufferable a bit
[libs/gl.git] / source / bufferable.h
index 0a30e80e817e8343b374094651008a7d03935714..d7d7e45fe2183fa606395bda73f184a1f3ace282 100644 (file)
@@ -31,6 +31,9 @@ public:
        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();
 
@@ -41,6 +44,9 @@ 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; }
@@ -56,11 +62,15 @@ protected:
        /** 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