X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fbufferable.h;h=60ce307292d900f3d5df4e01b6df412f80e778e5;hb=be6ffe96ecb4707599fe1a6f620c348760213d46;hp=47e2770c58675fd128d16afa6b50446e7f53a62f;hpb=9b3bce7ae76ff8c0c81315d2505ea96bf422a318;p=libs%2Fgl.git diff --git a/source/core/bufferable.h b/source/core/bufferable.h index 47e2770c..60ce3072 100644 --- a/source/core/bufferable.h +++ b/source/core/bufferable.h @@ -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(); @@ -67,7 +67,7 @@ public: const Buffer *get_buffer() const { return buffer; } /** Returns the size of the data, in bytes. */ - virtual unsigned get_data_size() const = 0; + virtual std::size_t get_data_size() const = 0; protected: /** Returns a pointer to the start of data in client memory. */ @@ -75,7 +75,7 @@ protected: /** 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 @@ -84,12 +84,9 @@ protected: public: /** Returns the offset of the data from the beginning of the buffer. */ - unsigned get_offset() const { return offset; } + std::size_t get_offset() const { return offset; } private: - /** Called when the target buffer or offset within it has changed. */ - virtual void location_changed(Buffer *, unsigned, unsigned) const { } - /** Uploads data to the buffer. Receives pointer to mapped buffer memory as parameter, or null to use the buffer upload interface. */ void upload_data(char *) const;