diff --git a/doc/changelog.dox b/doc/changelog.dox index 7b396801b..70605d02a 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -49,6 +49,14 @@ See also: @ref Vector2s, @ref Vector3s, @ref Vector4s, @ref Color3h, @ref Color4h, @ref Color3us, @ref Color4us convenience typedefs for half-float, 8- and 16-bit integer vector and color types +- New storage-only @ref Matrix2x2h, @ref Matrix2x2b, @ref Matrix2x2s, + @ref Matrix2x3h, @ref Matrix2x3b, @ref Matrix2x3s, @ref Matrix2x4h, + @ref Matrix2x4b, @ref Matrix2x4s, @ref Matrix3x2h, @ref Matrix3x2b, + @ref Matrix3x2s, @ref Matrix3x3h. @ref Matrix3x3b, @ref Matrix3x3s, + @ref Matrix3x4h, @ref Matrix3x4b, @ref Matrix3x4s, @ref Matrix4x2h, + @ref Matrix4x2b, @ref Matrix4x2s, @ref Matrix4x3h, @ref Matrix4x3b, + @ref Matrix4x3s, @ref Matrix4x4h, @ref Matrix4x4b, @ref Matrix4x4s + convenience typedefs for half-float, 8- and 16-bit packed matrix types - New @ref VertexFormat enum for vertex formats and related utilities - New @ref MeshPrimitive::Instances, @ref MeshPrimitive::Faces and @ref MeshPrimitive::Edges primitive types for describing per-instance, diff --git a/doc/types.dox b/doc/types.dox index 7441f18ef..2ed63db71 100644 --- a/doc/types.dox +++ b/doc/types.dox @@ -83,14 +83,23 @@ after type name means @ref Float underlying type, `h` means @ref Half, `d` is | Magnum matrix type | Equivalent GLSL type | | ---------------------------------------------------------------- | ------------------------------------- | | @ref Matrix2x2 or @ref Matrix2x2d | @glsl mat2 @ce / @glsl mat2x2 @ce or @glsl dmat2 @ce / @glsl dmat2x2 @ce | +| @ref Matrix2x2h, @ref Matrix2x2b, @ref Matrix2x2s | (*none*) | | @ref Matrix3 / @ref Matrix3x3 or @ref Matrix3d / @ref Matrix3x3d | @glsl mat3 @ce / @glsl mat3x3 @ce or @glsl dmat3 @ce / @glsl dmat3x3 @ce | +| @ref Matrix3x3h, @ref Matrix3x3b, @ref Matrix3x3s | (*none*) | | @ref Matrix4 / @ref Matrix4x4 or @ref Matrix4d / @ref Matrix4x4d | @glsl mat4 @ce / @glsl mat4x4 @ce or @glsl dmat4 @ce / @glsl dmat4x4 @ce | +| @ref Matrix4x4h, @ref Matrix4x4b, @ref Matrix4x4s | (*none*) | | @ref Matrix2x3 or @ref Matrix2x3d | @glsl mat2x3 @ce or @glsl dmat2x3 @ce | +| @ref Matrix2x3h, @ref Matrix2x3b, @ref Matrix2x3s | (*none*) | | @ref Matrix3x2 or @ref Matrix3x2d | @glsl mat3x2 @ce or @glsl dmat3x2 @ce | +| @ref Matrix3x2h, @ref Matrix3x2b, @ref Matrix3x2s | (*none*) | | @ref Matrix2x4 or @ref Matrix2x4d | @glsl mat2x4 @ce or @glsl dmat2x4 @ce | +| @ref Matrix2x4h, @ref Matrix2x4b, @ref Matrix2x4s | (*none*) | | @ref Matrix4x2 or @ref Matrix4x2d | @glsl mat4x2 @ce or @glsl dmat4x2 @ce | +| @ref Matrix4x2h, @ref Matrix4x2b, @ref Matrix4x2s | (*none*) | | @ref Matrix3x4 or @ref Matrix3x4d | @glsl mat3x4 @ce or @glsl dmat3x4 @ce | +| @ref Matrix3x4h, @ref Matrix3x4b, @ref Matrix3x4s | (*none*) | | @ref Matrix4x3 or @ref Matrix4x3d | @glsl mat4x3 @ce or @glsl dmat4x3 @ce | +| @ref Matrix4x3h, @ref Matrix4x3b, @ref Matrix4x3s | (*none*) | Any super- or sub-class of the same size and underlying type can be used equivalently (e.g. @ref Math::Vector "Math::Vector" or @ref Color3 diff --git a/src/Magnum/Magnum.h b/src/Magnum/Magnum.h index 8cfd87da3..abff8906e 100644 --- a/src/Magnum/Magnum.h +++ b/src/Magnum/Magnum.h @@ -522,6 +522,222 @@ Equivalent to GLSL @glsl mat4x3 @ce. */ typedef Math::Matrix4x3 Matrix4x3; +/** +@brief Signed byte matrix with 2 columns and 2 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix2x4b and ignore the bottom two rows. +*/ +typedef Math::Matrix2x2 Matrix2x2b; + +/** +@brief Signed byte matrix with 2 columns and 3 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix2x4b and ignore the bottom row. +*/ +typedef Math::Matrix2x3 Matrix2x3b; + +/** +@brief Signed byte matrix with 2 columns and 4 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix2x4 Matrix2x4b; + +/** +@brief Signed byte matrix with 3 columns and 2 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix3x4b and ignore the bottom two rows. +*/ +typedef Math::Matrix3x2 Matrix3x2b; + +/** +@brief Signed byte matrix with 3 columns and 3 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix3x4b and ignore the bottom row. +*/ +typedef Math::Matrix3x3 Matrix3x3b; + +/** +@brief Signed byte matrix with 3 columns and 4 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix3x4 Matrix3x4b; + +/** +@brief Signed byte matrix with 4 columns and 2 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix4x4b and ignore the bottom two rows. +*/ +typedef Math::Matrix4x2 Matrix4x2b; + +/** +@brief Signed byte matrix with 4 columns and 3 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix4x4b and ignore the bottom row. +*/ +typedef Math::Matrix4x3 Matrix4x3b; + +/** +@brief Signed byte matrix with 4 columns and 4 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 8-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix4x4 Matrix4x4b; + +/** +@brief Signed short matrix with 2 columns and 2 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix2x2 Matrix2x2s; + +/** +@brief Signed short matrix with 2 columns and 3 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix2x4s and ignore the bottom row. +*/ +typedef Math::Matrix2x3 Matrix2x3s; + +/** +@brief Signed short matrix with 2 columns and 4 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix2x4 Matrix2x4s; + +/** +@brief Signed short matrix with 3 columns and 2 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix3x2 Matrix3x2s; + +/** +@brief Signed short matrix with 3 columns and 3 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix3x4s and ignore the bottom row. +*/ +typedef Math::Matrix3x3 Matrix3x3s; + +/** +@brief Signed short matrix with 3 columns and 4 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix3x4 Matrix3x4s; + +/** +@brief Signed short matrix with 4 columns and 2 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix4x2 Matrix4x2s; + +/** +@brief Signed short matrix with 4 columns and 3 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix4x4s and ignore the bottom row. +*/ +typedef Math::Matrix4x3 Matrix4x3s; + +/** +@brief Signed short matrix with 4 columns and 4 rows +@m_since_latest + +Storage only, in ordet to support matrices packed into 16-bit types. For +performing arithmetic on this type use @ref Math::unpack() / @ref Math::unpackInto() to convert to a float type first and then @ref Math::pack() +/ @ref Math::packInto() back again. +*/ +typedef Math::Matrix4x4 Matrix4x4s; + /** @brief Float two-dimensional quadratic Bézier curve */ typedef Math::QuadraticBezier2D QuadraticBezier2D; @@ -596,7 +812,9 @@ typedef Math::Frustum Frustum; /** @{ @name Half-precision types These types are for storage and conversion from / to single-precision types, -no arithmetic operations are implemented. See @ref types for more information. +no arithmetic operations are implemented. See @ref types for more information, +for performing arithmetic on these types use @ref Math::unpackHalf() / @ref Math::unpackHalfInto() to convert to a 32-bit float type first and then +@ref Math::packHalf() / @ref Math::packHalfInto() back again. */ /** @@ -629,6 +847,72 @@ typedef Math::Color3 Color3h; */ typedef Math::Color4 Color4h; +/** +@brief Half-float matrix with 2 columns and 2 rows +@m_since_latest +*/ +typedef Math::Matrix2x2 Matrix2x2h; + +/** +@brief Half-float matrix with 2 columns and 3 rows +@m_since_latest + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix2x4h and ignore the bottom row. +*/ +typedef Math::Matrix2x3 Matrix2x3h; + +/** +@brief Half-float matrix with 2 columns and 4 rows +@m_since_latest +*/ +typedef Math::Matrix2x4 Matrix2x4h; + +/** +@brief Half-float matrix with 3 columns and 2 rows +@m_since_latest +*/ +typedef Math::Matrix3x2 Matrix3x2h; + +/** +@brief Half-float matrix with 3 columns and 3 rows +@m_since_latest + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix3x4h and ignore the bottom row. +*/ +typedef Math::Matrix3x3 Matrix3x3h; + +/** +@brief Half-float matrix with 3 columns and 4 rows +@m_since_latest +*/ +typedef Math::Matrix3x4 Matrix3x4h; + +/** +@brief Half-float matrix with 4 columns and 2 rows +@m_since_latest +*/ +typedef Math::Matrix4x2 Matrix4x2h; + +/** +@brief Half-float matrix with 4 columns and 3 rows +@m_since_latest + +Note that this type doesn't have the columns four-byte aligned, which may +negatively affect performance in some cases. For better alignment use +@ref Matrix4x4h and ignore the bottom row. +*/ +typedef Math::Matrix4x3 Matrix4x3h; + +/** +@brief Half-float matrix with 4 columns and 4 rows +@m_since_latest +*/ +typedef Math::Matrix4x4 Matrix4x4h; + /*@}*/ /** @{ @name Double-precision types diff --git a/src/Magnum/Math/Matrix.h b/src/Magnum/Math/Matrix.h index e07a407a7..43d4797bd 100644 --- a/src/Magnum/Math/Matrix.h +++ b/src/Magnum/Math/Matrix.h @@ -54,7 +54,12 @@ namespace Implementation { See @ref matrix-vector for brief introduction. @configurationvalueref{Magnum::Math::Matrix} -@see @ref Matrix2x2, @ref Matrix3x3, @ref Matrix4x4 +@see @ref Matrix2x2, @ref Matrix3x3, @ref Matrix4x4, @ref Magnum::Matrix2x2, + @ref Magnum::Matrix2x2d, @ref Magnum::Matrix2x2h, @ref Magnum::Matrix2x2b, + @ref Magnum::Matrix2x2s, @ref Magnum::Matrix3x3, @ref Magnum::Matrix3x3d, + @ref Magnum::Matrix3x3h, @ref Magnum::Matrix3x3b, @ref Magnum::Matrix3x3s, + @ref Magnum::Matrix4x4, @ref Magnum::Matrix4x4d, @ref Magnum::Matrix4x4h, + @ref Magnum::Matrix4x4b, @ref Magnum::Matrix4x4s */ template class Matrix: public RectangularMatrix { public: @@ -301,7 +306,8 @@ template class Matrix: public RectangularMatrix`. See @ref Matrix for more information. -@see @ref Magnum::Matrix2x2, @ref Magnum::Matrix2x2d +@see @ref Magnum::Matrix2x2, @ref Magnum::Matrix2x2d, @ref Magnum::Matrix2x2h, + @ref Magnum::Matrix2x2b, @ref Magnum::Matrix2x2s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix2x2 = Matrix<2, T>; @@ -313,7 +319,8 @@ template using Matrix2x2 = Matrix<2, T>; Convenience alternative to `Matrix<3, T>`. See @ref Matrix for more information. Note that this is different from @ref Matrix3, which contains additional functions for transformations in 2D. -@see @ref Magnum::Matrix3x3, @ref Magnum::Matrix3x3d +@see @ref Magnum::Matrix3x3, @ref Magnum::Matrix3x3d, @ref Magnum::Matrix3x3h, + @ref Magnum::Matrix3x3b, @ref Magnum::Matrix3x3s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix3x3 = Matrix<3, T>; @@ -325,7 +332,8 @@ template using Matrix3x3 = Matrix<3, T>; Convenience alternative to `Matrix<4, T>`. See @ref Matrix for more information. Note that this is different from @ref Matrix4, which contains additional functions for transformations in 3D. -@see @ref Magnum::Matrix4x4, @ref Magnum::Matrix4x4d +@see @ref Magnum::Matrix4x4, @ref Magnum::Matrix4x4d, @ref Magnum::Matrix4x4h, + @ref Magnum::Matrix4x4b, @ref Magnum::Matrix4x4s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix4x4 = Matrix<4, T>; diff --git a/src/Magnum/Math/RectangularMatrix.h b/src/Magnum/Math/RectangularMatrix.h index 486ccef82..b38e9a6d0 100644 --- a/src/Magnum/Math/RectangularMatrix.h +++ b/src/Magnum/Math/RectangularMatrix.h @@ -50,7 +50,17 @@ The data are stored in column-major order, to reflect that, all indices in math formulas are in reverse order (i.e. @f$ \boldsymbol A_{ji} @f$ instead of @f$ \boldsymbol A_{ij} @f$). @see @ref Matrix2x3, @ref Matrix3x2, @ref Matrix2x4, @ref Matrix4x2, - @ref Matrix3x4, @ref Matrix4x3 + @ref Matrix3x4, @ref Matrix4x3, @ref Magnum::Matrix2x3, + @ref Magnum::Matrix2x3d, @ref Magnum::Matrix2x3h, @ref Magnum::Matrix2x3b, + @ref Magnum::Matrix2x3s, @ref Magnum::Matrix3x2, @ref Magnum::Matrix3x2d, + @ref Magnum::Matrix3x2h, @ref Magnum::Matrix3x2b, @ref Magnum::Matrix3x2s, + @ref Magnum::Matrix2x4, @ref Magnum::Matrix2x4d, @ref Magnum::Matrix2x4h, + @ref Magnum::Matrix2x4b, @ref Magnum::Matrix2x4s, @ref Magnum::Matrix4x2, + @ref Magnum::Matrix4x2d, @ref Magnum::Matrix4x2h, @ref Magnum::Matrix4x2b, + @ref Magnum::Matrix4x2s, @ref Magnum::Matrix3x4, @ref Magnum::Matrix3x4d, + @ref Magnum::Matrix3x4h, @ref Magnum::Matrix3x4b, @ref Magnum::Matrix3x4s, + @ref Magnum::Matrix4x3, @ref Magnum::Matrix4x3d, @ref Magnum::Matrix4x3h, + @ref Magnum::Matrix4x3b, @ref Magnum::Matrix4x3s */ template class RectangularMatrix { static_assert(cols != 0 && rows != 0, "RectangularMatrix cannot have zero elements"); @@ -470,7 +480,8 @@ template class RectangularMatrix { Convenience alternative to @cpp RectangularMatrix<2, 3, T> @ce. See @ref RectangularMatrix for more information. -@see @ref Magnum::Matrix2x3, @ref Magnum::Matrix2x3d +@see @ref Magnum::Matrix2x3, @ref Magnum::Matrix2x3d, @ref Magnum::Matrix2x3h, + @ref Magnum::Matrix2x3b, @ref Magnum::Matrix2x3s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix2x3 = RectangularMatrix<2, 3, T>; @@ -481,7 +492,8 @@ template using Matrix2x3 = RectangularMatrix<2, 3, T>; Convenience alternative to @cpp RectangularMatrix<3, 2, T> @ce. See @ref RectangularMatrix for more information. -@see @ref Magnum::Matrix3x2, @ref Magnum::Matrix3x2d +@see @ref Magnum::Matrix3x2, @ref Magnum::Matrix3x2d, @ref Magnum::Matrix3x2h, + @ref Magnum::Matrix3x2b, @ref Magnum::Matrix3x2s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix3x2 = RectangularMatrix<3, 2, T>; @@ -492,7 +504,8 @@ template using Matrix3x2 = RectangularMatrix<3, 2, T>; Convenience alternative to @cpp RectangularMatrix<2, 4, T> @ce. See @ref RectangularMatrix for more information. -@see @ref Magnum::Matrix2x4, @ref Magnum::Matrix2x4d +@see @ref Magnum::Matrix2x4, @ref Magnum::Matrix2x4d, @ref Magnum::Matrix2x4h, + @ref Magnum::Matrix2x4b, @ref Magnum::Matrix2x4s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix2x4 = RectangularMatrix<2, 4, T>; @@ -503,7 +516,8 @@ template using Matrix2x4 = RectangularMatrix<2, 4, T>; Convenience alternative to @cpp RectangularMatrix<4, 2, T> @ce. See @ref RectangularMatrix for more information. -@see @ref Magnum::Matrix4x2, @ref Magnum::Matrix4x2d +@see @ref Magnum::Matrix4x2, @ref Magnum::Matrix4x2d, @ref Magnum::Matrix4x2h, + @ref Magnum::Matrix4x2b, @ref Magnum::Matrix4x2s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix4x2 = RectangularMatrix<4, 2, T>; @@ -514,7 +528,8 @@ template using Matrix4x2 = RectangularMatrix<4, 2, T>; Convenience alternative to @cpp RectangularMatrix<3, 4, T> @ce. See @ref RectangularMatrix for more information. -@see @ref Magnum::Matrix3x4, @ref Magnum::Matrix3x4d +@see @ref Magnum::Matrix3x4, @ref Magnum::Matrix3x4d, @ref Magnum::Matrix3x4h, + @ref Magnum::Matrix3x4b, @ref Magnum::Matrix3x4s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix3x4 = RectangularMatrix<3, 4, T>; @@ -525,7 +540,8 @@ template using Matrix3x4 = RectangularMatrix<3, 4, T>; Convenience alternative to @cpp RectangularMatrix<4, 3, T> @ce. See @ref RectangularMatrix for more information. -@see @ref Magnum::Matrix4x3, @ref Magnum::Matrix4x3d +@see @ref Magnum::Matrix4x3, @ref Magnum::Matrix4x3d, @ref Magnum::Matrix4x3h, + @ref Magnum::Matrix4x3b, @ref Magnum::Matrix4x3s */ #ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */ template using Matrix4x3 = RectangularMatrix<4, 3, T>;