#ifndef Magnum_Magnum_h #define Magnum_Magnum_h /* Copyright © 2010, 2011, 2012 Vladimír Vondruš This file is part of Magnum. Magnum is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 3 only, as published by the Free Software Foundation. Magnum is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License version 3 for more details. */ /** @file * @brief Basic definitions and forward declarations for Magnum namespace */ #include #include "Math/Math.h" #include "Types.h" #include "magnumConfigure.h" #ifndef MAGNUM_TARGET_GLES #include #include #else #ifndef MAGNUM_TARGET_GLES2 #include #else #include #include #endif #endif namespace Corrade { namespace Utility { class Debug; class Warning; class Error; } } namespace Magnum { /** @todoc Remove `ifndef` when Doxygen is sane again */ #ifndef DOXYGEN_GENERATING_OUTPUT namespace Math { template struct Constants; constexpr Rad operator "" _rad(long double); constexpr Rad operator "" _radf(long double); constexpr Deg operator "" _deg(long double); constexpr Deg operator "" _degf(long double); } /* Bring debugging facility from Corrade::Utility namespace */ using Corrade::Utility::Debug; using Corrade::Utility::Warning; using Corrade::Utility::Error; #endif /** @{ @name Basic type definitions See @ref types for more information. */ /** @brief Unsigned byte (8bit) */ typedef std::uint8_t UnsignedByte; /** @brief Signed byte (8bit) */ typedef std::int8_t Byte; /** @brief Unsigned short (16bit) */ typedef std::uint16_t UnsignedShort; /** @brief Signed short (16bit) */ typedef std::int16_t Short; /** @brief Unsigned int (32bit) */ typedef std::uint32_t UnsignedInt; /** @brief Signed int (32bit) */ typedef std::int32_t Int; /** @brief Unsigned long (64bit) */ typedef std::uint64_t UnsignedLong; /** @brief Signed long (64bit) */ typedef std::int64_t Long; /** @brief Float (32bit) */ typedef float Float; /** @brief Two-component float vector */ typedef Math::Vector2 Vector2; /** @brief Three-component float vector */ typedef Math::Vector3 Vector3; /** @brief Four-component float vector */ typedef Math::Vector4 Vector4; /** @brief Two-component unsigned integer vector */ typedef Math::Vector2 Vector2ui; /** @brief Three-component unsigned integer vector */ typedef Math::Vector3 Vector3ui; /** @brief Four-component unsigned integer vector */ typedef Math::Vector4 Vector4ui; /** @brief Two-component signed integer vector */ typedef Math::Vector2 Vector2i; /** @brief Three-component signed integer vector */ typedef Math::Vector3 Vector3i; /** @brief Four-component signed integer vector */ typedef Math::Vector4 Vector4i; /** @brief 2x2 float matrix */ typedef Math::Matrix<2, Float> Matrix2; /** @brief 3x3 float matrix */ typedef Math::Matrix3 Matrix3; /** @brief 4x4 float matrix */ typedef Math::Matrix4 Matrix4; /** @brief Float matrix with 2 columns and 3 rows */ typedef Math::RectangularMatrix<2, 3, Float> Matrix2x3; /** @brief Float matrix with 3 columns and 2 rows */ typedef Math::RectangularMatrix<3, 2, Float> Matrix3x2; /** @brief Float matrix with 2 columns and 4 rows */ typedef Math::RectangularMatrix<2, 4, Float> Matrix2x4; /** @brief Float matrix with 4 columns and 2 rows */ typedef Math::RectangularMatrix<4, 2, Float> Matrix4x2; /** @brief Float matrix with 3 columns and 4 rows */ typedef Math::RectangularMatrix<3, 4, Float> Matrix3x4; /** @brief Float matrix with 4 columns and 3 rows */ typedef Math::RectangularMatrix<4, 3, Float> Matrix4x3; /** @brief Float complex number */ typedef Math::Complex Complex; /** @brief Float dual complex number */ typedef Math::DualComplex DualComplex; /** @brief Float quaternion */ typedef Math::Quaternion Quaternion; /** @brief Float dual quaternion */ typedef Math::DualQuaternion DualQuaternion; /** @brief Float constants */ typedef Math::Constants Constants; /** @brief Angle in float degrees */ typedef Math::Deg Deg; /** @brief Angle in float radians */ typedef Math::Rad Rad; /** @brief Float rectangle */ typedef Math::Geometry::Rectangle Rectangle; /** @brief Signed integer rectangle */ typedef Math::Geometry::Rectangle Rectanglei; /*@}*/ #ifndef MAGNUM_TARGET_GLES /** @{ @name Double-precision types See @ref types for more information. @requires_gl Only single-precision types are available in OpenGL ES. */ /** @brief Double (64bit) */ typedef double Double; /** @brief Two-component double vector */ typedef Math::Vector2 Vector2d; /** @brief Three-component double vector */ typedef Math::Vector3 Vector3d; /** @brief Four-component double vector */ typedef Math::Vector4 Vector4d; /** @brief 2x2 double matrix */ typedef Math::Matrix<2, Double> Matrix2d; /** @brief 3x3 double matrix */ typedef Math::Matrix3 Matrix3d; /** @brief 4x4 double matrix */ typedef Math::Matrix4 Matrix4d; /** @brief Double matrix with 2 columns and 3 rows */ typedef Math::RectangularMatrix<2, 3, Double> Matrix2x3d; /** @brief Double matrix with 3 columns and 2 rows */ typedef Math::RectangularMatrix<3, 2, Double> Matrix3x2d; /** @brief Double matrix with 2 columns and 4 rows */ typedef Math::RectangularMatrix<2, 4, Double> Matrix2x4d; /** @brief Double matrix with 4 columns and 2 rows */ typedef Math::RectangularMatrix<4, 2, Double> Matrix4x2d; /** @brief Double matrix with 3 columns and 4 rows */ typedef Math::RectangularMatrix<3, 4, Double> Matrix3x4d; /** @brief Double matrix with 4 columns and 3 rows */ typedef Math::RectangularMatrix<4, 3, Double> Matrix4x3d; /** @brief Double complex number */ typedef Math::Complex Complexd; /** @brief Double dual complex number */ typedef Math::DualComplex DualComplexd; /** @brief Double quaternion */ typedef Math::Quaternion Quaterniond; /** @brief Double dual quaternion */ typedef Math::DualQuaternion DualQuaterniond; /** @brief Double constants */ typedef Math::Constants Constantsd; /** @brief Angle in double degrees */ typedef Math::Deg Degd; /** @brief Angle in double radians */ typedef Math::Rad Radd; /** @brief Double rectangle */ typedef Math::Geometry::Rectangle Rectangled; /*@}*/ #endif /* Using angle literals from Math namespace */ using Math::operator "" _deg; using Math::operator "" _degf; using Math::operator "" _rad; using Math::operator "" _radf; /** @todoc Remove `ifndef` when Doxygen is sane again */ #ifndef DOXYGEN_GENERATING_OUTPUT /* Forward declarations for all types in root namespace */ class AbstractFramebuffer; class AbstractImage; class AbstractShaderProgram; class AbstractTexture; template class Array; template class Array1D; template class Array2D; template class Array3D; class Buffer; #ifndef MAGNUM_TARGET_GLES2 template class BufferImage; typedef BufferImage<1> BufferImage1D; typedef BufferImage<2> BufferImage2D; typedef BufferImage<3> BufferImage3D; #endif #ifndef MAGNUM_TARGET_GLES class BufferTexture; #endif template class Color3; template class Color4; enum class Version: GLint; class Context; class CubeMapTexture; #ifndef MAGNUM_TARGET_GLES class CubeMapTextureArray; #endif /* DebugMarker forward declaration is not needed */ /* DefaultFramebuffer is available only through global instance */ /* DimensionTraits forward declaration is not needed */ class Extension; class Framebuffer; template class Image; typedef Image<1> Image1D; typedef Image<2> Image2D; typedef Image<3> Image3D; template class ImageWrapper; typedef ImageWrapper<1> ImageWrapper1D; typedef ImageWrapper<2> ImageWrapper2D; typedef ImageWrapper<3> ImageWrapper3D; class Mesh; class Query; class Renderbuffer; enum class ResourceState: std::uint8_t; enum class ResourceDataState: std::uint8_t; enum class ResourcePolicy: std::uint8_t; template class Resource; class ResourceKey; template class ResourceManager; class Shader; template class Texture; #ifndef MAGNUM_TARGET_GLES typedef Texture<1> Texture1D; #endif typedef Texture<2> Texture2D; typedef Texture<3> Texture3D; class Timeline; #endif } #endif