#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 #include "Math/Math.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 /** @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 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 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; #ifndef MAGNUM_TARGET_GLES /** @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; #endif /** @brief 3x3 float matrix */ typedef Math::Matrix3 Matrix3; /** @brief 4x4 float matrix */ typedef Math::Matrix4 Matrix4; #ifndef MAGNUM_TARGET_GLES /** @brief 3x3 double matrix */ typedef Math::Matrix3 Matrix3d; /** @brief 4x4 double matrix */ typedef Math::Matrix4 Matrix4d; #endif /** @brief %Complex number */ typedef Math::Complex Complex; /** @brief %Quaternion */ typedef Math::Quaternion Quaternion; /** @brief %Dual quaternion */ typedef Math::DualQuaternion DualQuaternion; /** @brief Floating-point constants */ /* Using float instead of GLfloat to not break KDevelop autocompletion */ typedef Math::Constants Constants; /** @brief Angle in single-precision degrees */ typedef Math::Deg Deg; /** @brief Angle in single-precision radians */ typedef Math::Rad Rad; /** @brief Floating-point rectangle */ typedef Math::Geometry::Rectangle Rectangle; /** @brief Integer rectangle */ typedef Math::Geometry::Rectangle Rectanglei; /* 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