From 99eac62b4e0f58b3beaf1d49effe76b6dfdecaae Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 23 Apr 2024 11:17:37 -0700 Subject: [PATCH] give proper move semantics to Handle<> --- filament/backend/include/backend/Handle.h | 15 +++++++++++++++ filament/src/details/VertexBuffer.cpp | 2 +- libs/utils/include/utils/StructureOfArrays.h | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/filament/backend/include/backend/Handle.h b/filament/backend/include/backend/Handle.h index 4b63607a1c..c54e9609ce 100644 --- a/filament/backend/include/backend/Handle.h +++ b/filament/backend/include/backend/Handle.h @@ -75,6 +75,19 @@ protected: HandleBase(HandleBase const& rhs) noexcept = default; HandleBase& operator=(HandleBase const& rhs) noexcept = default; + HandleBase(HandleBase&& rhs) noexcept + : object(rhs.object) { + rhs.object = nullid; + } + + HandleBase& operator=(HandleBase&& rhs) noexcept { + if (this != &rhs) { + object = rhs.object; + rhs.object = nullid; + } + return *this; + } + private: HandleId object; }; @@ -89,8 +102,10 @@ struct Handle : public HandleBase { Handle() noexcept = default; Handle(Handle const& rhs) noexcept = default; + Handle(Handle&& rhs) noexcept = default; Handle& operator=(Handle const& rhs) noexcept = default; + Handle& operator=(Handle&& rhs) noexcept = default; explicit Handle(HandleId id) noexcept : HandleBase(id) { } diff --git a/filament/src/details/VertexBuffer.cpp b/filament/src/details/VertexBuffer.cpp index d718bbe0a8..2edf62d855 100644 --- a/filament/src/details/VertexBuffer.cpp +++ b/filament/src/details/VertexBuffer.cpp @@ -314,7 +314,7 @@ FVertexBuffer::FVertexBuffer(FEngine& engine, const VertexBuffer::Builder& build void FVertexBuffer::terminate(FEngine& engine) { FEngine::DriverApi& driver = engine.getDriverApi(); if (!mBufferObjectsEnabled) { - for (BufferObjectHandle const bo : mBufferObjects) { + for (BufferObjectHandle bo : mBufferObjects) { driver.destroyBufferObject(bo); } } diff --git a/libs/utils/include/utils/StructureOfArrays.h b/libs/utils/include/utils/StructureOfArrays.h index 65e4b3305c..c0b2315ecc 100644 --- a/libs/utils/include/utils/StructureOfArrays.h +++ b/libs/utils/include/utils/StructureOfArrays.h @@ -513,7 +513,7 @@ public: return (soa.elementAt(i) = other); } UTILS_ALWAYS_INLINE Type const& operator = (Type&& other) noexcept { - return (soa.elementAt(i) = other); + return (soa.elementAt(i) = std::forward(other)); } // comparisons UTILS_ALWAYS_INLINE bool operator==(Type const& other) const {