+ /**
+ An RAII handle for asynchronously writing texel data into a texture.
+ */
+ class AsyncTransfer: public Texture2DBackend::AsyncTransfer
+ {
+ friend Texture2DBackend;
+ friend class Texture2D;
+ friend class Texture2DBackend::AsyncTransfer;
+
+ private:
+ Texture2D *texture = 0;
+ unsigned level = 0;
+ unsigned x = 0;
+ unsigned y = 0;
+ unsigned width = 0;
+ unsigned height = 0;
+ std::size_t data_size = 0;
+ void *dest_addr = 0;
+
+ AsyncTransfer(Texture2D &, unsigned, unsigned, unsigned, unsigned, unsigned);
+ public:
+ AsyncTransfer() = default;
+ AsyncTransfer(AsyncTransfer &&);
+ AsyncTransfer &operator=(AsyncTransfer &&);
+ ~AsyncTransfer();
+
+ public:
+ /** Returns an address for writing the texel data. It should not be used
+ beyond the lifetime of the object. */
+ void *get_address() { return dest_addr; }
+ };
+