]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/bufferable.h
Use size_t to store sizes of buffers and such
[libs/gl.git] / source / core / bufferable.h
index cbbde4e1b93f1e07266c097c150774f2b5621d3c..60ce307292d900f3d5df4e01b6df412f80e778e5 100644 (file)
@@ -29,15 +29,15 @@ public:
        };
 
 private:
-       Buffer *buffer;
-       unsigned offset;
-       Bufferable *next_in_buffer;
-       Bufferable *prev_in_buffer;
-       mutable bool location_dirty;
+       Buffer *buffer = 0;
+       std::size_t offset = 0;
+       Bufferable *next_in_buffer = 0;
+       Bufferable *prev_in_buffer = 0;
+       mutable bool location_dirty = false;
 protected:
-       mutable bool dirty;
+       mutable bool dirty = false;
 
-       Bufferable();
+       Bufferable() = default;
 public:
        virtual ~Bufferable();
 
@@ -50,14 +50,14 @@ public:
 
        /** Returns the total amount of storage required by this object and others
        in the same chain, including any alignment between objects. */
-       unsigned get_required_buffer_size() const;
+       std::size_t get_required_buffer_size() const;
 
        /** Uploads new data into the buffer if necessary. */
-       void refresh() const { if(buffer && dirty) upload_data(0); }
+       void refresh() const { if(dirty) upload_data(0); }
 
        /** Returns an object which can be used to upload data to the buffer using
        mapped memory. */
-       AsyncUpdater *refresh_async() const;
+       AsyncUpdater *refresh_async() const { return dirty ? new AsyncUpdater(*this) : 0; }
 
 private:
        void unlink_from_buffer();
@@ -66,27 +66,25 @@ 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 the size of the data, in bytes. */
+       virtual std::size_t get_data_size() const = 0;
 
+protected:
        /** 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; }
+       virtual std::size_t 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 { }
+public:
+       /** Returns the offset of the data from the beginning of the buffer. */
+       std::size_t get_offset() const { return offset; }
 
 private:
        /** Uploads data to the buffer.  Receives pointer to mapped buffer memory as