From f7122d3ce6f38747c1ea6eda8052ae7cbe95f82f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 15 Jun 2018 17:15:50 +0200 Subject: [PATCH] Shaders: explicitly list deleted/defaulted copy/move constructor. Two reasons: * documentation * making it actually work because the rules are so complex and ever changing that a thing I thought "just worked" in fact did not work at all The Vector tests now compile again. --- src/Magnum/Shaders/AbstractVector.h | 12 ++++++++++++ src/Magnum/Shaders/DistanceFieldVector.h | 12 ++++++++++++ src/Magnum/Shaders/Flat.h | 12 ++++++++++++ src/Magnum/Shaders/MeshVisualizer.h | 12 ++++++++++++ src/Magnum/Shaders/Phong.h | 12 ++++++++++++ src/Magnum/Shaders/Vector.h | 18 +++++++++++++++--- src/Magnum/Shaders/VertexColor.h | 12 ++++++++++++ 7 files changed, 87 insertions(+), 3 deletions(-) diff --git a/src/Magnum/Shaders/AbstractVector.h b/src/Magnum/Shaders/AbstractVector.h index 07369dc20..69e664fce 100644 --- a/src/Magnum/Shaders/AbstractVector.h +++ b/src/Magnum/Shaders/AbstractVector.h @@ -57,6 +57,18 @@ template class AbstractVector: public GL::AbstractShader */ typedef typename Generic::TextureCoordinates TextureCoordinates; + /** @brief Copying is not allowed */ + AbstractVector(const AbstractVector&) = delete; + + /** @brief Move constructor */ + AbstractVector(AbstractVector&&) noexcept = default; + + /** @brief Copying is not allowed */ + AbstractVector& operator=(const AbstractVector&) = delete; + + /** @brief Move assignment */ + AbstractVector& operator=(AbstractVector&&) noexcept = default; + /** * @brief Bind vector texture * @return Reference to self (for method chaining) diff --git a/src/Magnum/Shaders/DistanceFieldVector.h b/src/Magnum/Shaders/DistanceFieldVector.h index 44559e813..050c0df7a 100644 --- a/src/Magnum/Shaders/DistanceFieldVector.h +++ b/src/Magnum/Shaders/DistanceFieldVector.h @@ -87,6 +87,18 @@ template class MAGNUM_SHADERS_EXPORT DistanceFieldVector #endif {} + /** @brief Copying is not allowed */ + DistanceFieldVector(const DistanceFieldVector&) = delete; + + /** @brief Move constructor */ + DistanceFieldVector(DistanceFieldVector&&) noexcept = default; + + /** @brief Copying is not allowed */ + DistanceFieldVector& operator=(const DistanceFieldVector&) = delete; + + /** @brief Move assignment */ + DistanceFieldVector& operator=(DistanceFieldVector&&) noexcept = default; + /** * @brief Set transformation and projection matrix * @return Reference to self (for method chaining) diff --git a/src/Magnum/Shaders/Flat.h b/src/Magnum/Shaders/Flat.h index ac51a623b..9e9d83ac2 100644 --- a/src/Magnum/Shaders/Flat.h +++ b/src/Magnum/Shaders/Flat.h @@ -142,6 +142,18 @@ template class MAGNUM_SHADERS_EXPORT Flat: public GL::Ab */ explicit Flat(NoCreateT) noexcept: GL::AbstractShaderProgram{NoCreate} {} + /** @brief Copying is not allowed */ + Flat(const Flat&) = delete; + + /** @brief Move constructor */ + Flat(Flat&&) noexcept = default; + + /** @brief Copying is not allowed */ + Flat& operator=(const Flat&) = delete; + + /** @brief Move assignment */ + Flat& operator=(Flat&&) noexcept = default; + /** @brief Flags */ Flags flags() const { return _flags; } diff --git a/src/Magnum/Shaders/MeshVisualizer.h b/src/Magnum/Shaders/MeshVisualizer.h index 62a603fa6..eb965c28d 100644 --- a/src/Magnum/Shaders/MeshVisualizer.h +++ b/src/Magnum/Shaders/MeshVisualizer.h @@ -170,6 +170,18 @@ class MAGNUM_SHADERS_EXPORT MeshVisualizer: public GL::AbstractShaderProgram { */ explicit MeshVisualizer(NoCreateT) noexcept: GL::AbstractShaderProgram{NoCreate} {} + /** @brief Copying is not allowed */ + MeshVisualizer(const MeshVisualizer&) = delete; + + /** @brief Move constructor */ + MeshVisualizer(MeshVisualizer&&) noexcept = default; + + /** @brief Copying is not allowed */ + MeshVisualizer& operator=(const MeshVisualizer&) = delete; + + /** @brief Move assignment */ + MeshVisualizer& operator=(MeshVisualizer&&) noexcept = default; + /** * @brief Set transformation and projection matrix * @return Reference to self (for method chaining) diff --git a/src/Magnum/Shaders/Phong.h b/src/Magnum/Shaders/Phong.h index 778e6c06c..3e3a6a7fb 100644 --- a/src/Magnum/Shaders/Phong.h +++ b/src/Magnum/Shaders/Phong.h @@ -149,6 +149,18 @@ class MAGNUM_SHADERS_EXPORT Phong: public GL::AbstractShaderProgram { */ explicit Phong(NoCreateT) noexcept: GL::AbstractShaderProgram{NoCreate} {} + /** @brief Copying is not allowed */ + Phong(const Phong&) = delete; + + /** @brief Move constructor */ + Phong(Phong&&) noexcept = default; + + /** @brief Copying is not allowed */ + Phong& operator=(const Phong&) = delete; + + /** @brief Move assignment */ + Phong& operator=(Phong&&) noexcept = default; + /** @brief Flags */ Flags flags() const { return _flags; } diff --git a/src/Magnum/Shaders/Vector.h b/src/Magnum/Shaders/Vector.h index d294008d7..1ed0194aa 100644 --- a/src/Magnum/Shaders/Vector.h +++ b/src/Magnum/Shaders/Vector.h @@ -84,11 +84,23 @@ template class MAGNUM_SHADERS_EXPORT Vector: public Abst #endif {} + /** @brief Copying is not allowed */ + Vector(const Vector&) = delete; + + /** @brief Move constructor */ + Vector(Vector&&) noexcept = default; + + /** @brief Copying is not allowed */ + Vector& operator=(const Vector&) = delete; + + /** @brief Move assignment */ + Vector& operator=(Vector&&) noexcept = default; + /** * @brief Set transformation and projection matrix * @return Reference to self (for method chaining) */ - Vector& setTransformationProjectionMatrix(const MatrixTypeFor& matrix) { + Vector& setTransformationProjectionMatrix(const MatrixTypeFor& matrix) { GL::AbstractShaderProgram::setUniform(_transformationProjectionMatrixUniform, matrix); return *this; } @@ -100,7 +112,7 @@ template class MAGNUM_SHADERS_EXPORT Vector: public Abst * Default is transparent black. * @see @ref setColor() */ - Vector& setBackgroundColor(const Color4& color) { + Vector& setBackgroundColor(const Color4& color) { GL::AbstractShaderProgram::setUniform(_backgroundColorUniform, color); return *this; } @@ -111,7 +123,7 @@ template class MAGNUM_SHADERS_EXPORT Vector: public Abst * * @see @ref setBackgroundColor() */ - Vector& setColor(const Color4& color) { + Vector& setColor(const Color4& color) { GL::AbstractShaderProgram::setUniform(_colorUniform, color); return *this; } diff --git a/src/Magnum/Shaders/VertexColor.h b/src/Magnum/Shaders/VertexColor.h index ca2cc9b78..2d87c2139 100644 --- a/src/Magnum/Shaders/VertexColor.h +++ b/src/Magnum/Shaders/VertexColor.h @@ -96,6 +96,18 @@ template class MAGNUM_SHADERS_EXPORT VertexColor: public */ explicit VertexColor(NoCreateT) noexcept: AbstractShaderProgram{NoCreate} {} + /** @brief Copying is not allowed */ + VertexColor(const VertexColor&) = delete; + + /** @brief Move constructor */ + VertexColor(VertexColor&&) noexcept = default; + + /** @brief Copying is not allowed */ + VertexColor& operator=(const VertexColor&) = delete; + + /** @brief Move assignment */ + VertexColor& operator=(VertexColor&&) noexcept = default; + /** * @brief Set transformation and projection matrix * @return Reference to self (for method chaining)