diff --git a/doc/compilation-speedup.dox b/doc/compilation-speedup.dox index c1a0802f6..2ad9b2960 100644 --- a/doc/compilation-speedup.dox +++ b/doc/compilation-speedup.dox @@ -17,7 +17,10 @@ Math/Vector3.h. You are encouraged to use forward declarations also in your code. However, for some types it can be too cumbersome -- e.g. too many template parameters, typedefs etc. In this case a header with forward declarations is usually -available: see SceneGraph/SceneGraph.h for example. +available, each namespace has its own: + + - Magnum.h + - SceneGraph/SceneGraph.h @section compilation-speedup-templates Templates diff --git a/src/AbstractShaderProgram.h b/src/AbstractShaderProgram.h index 28b3a63b1..7729a25cb 100644 --- a/src/AbstractShaderProgram.h +++ b/src/AbstractShaderProgram.h @@ -19,7 +19,6 @@ * @brief Class Magnum::AbstractShaderProgram */ -#include #include #include @@ -38,11 +37,6 @@ namespace Math { template class Vector; } -template class Color3; -template class Color4; -class Context; -class Shader; - #ifndef DOXYGEN_GENERATING_OUTPUT namespace Implementation { template struct Attribute; diff --git a/src/AbstractTexture.h b/src/AbstractTexture.h index cce734fde..a9942dffe 100644 --- a/src/AbstractTexture.h +++ b/src/AbstractTexture.h @@ -19,16 +19,12 @@ * @brief Class Magnum::AbstractTexture */ -#include - #include "Magnum.h" #include "Color.h" #include "AbstractImage.h" namespace Magnum { -class Context; - /** @brief Base for textures diff --git a/src/Buffer.h b/src/Buffer.h index bf426f2d4..7473543ff 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -29,8 +29,6 @@ namespace Magnum { -class Context; - /** @brief %Buffer diff --git a/src/BufferedTexture.h b/src/BufferedTexture.h index 170f606b9..87f478ee0 100644 --- a/src/BufferedTexture.h +++ b/src/BufferedTexture.h @@ -26,9 +26,6 @@ #ifndef MAGNUM_TARGET_GLES namespace Magnum { -class Buffer; -class Context; - /** @brief Buffered texture diff --git a/src/Color.h b/src/Color.h index 6af5ba7d5..36d4ad4c8 100644 --- a/src/Color.h +++ b/src/Color.h @@ -24,11 +24,10 @@ #include "Math/MathTypeTraits.h" #include "Math/Math.h" #include "Math/Vector4.h" +#include "Magnum.h" namespace Magnum { -template class Color3; - #ifndef DOXYGEN_GENERATING_OUTPUT namespace Implementation { diff --git a/src/DimensionTraits.h b/src/DimensionTraits.h index d3c794950..016fc1ee0 100644 --- a/src/DimensionTraits.h +++ b/src/DimensionTraits.h @@ -15,8 +15,6 @@ GNU Lesser General Public License version 3 for more details. */ -#include - #include "Magnum.h" /** @file diff --git a/src/Framebuffer.h b/src/Framebuffer.h index e18fe083d..6099ecea1 100644 --- a/src/Framebuffer.h +++ b/src/Framebuffer.h @@ -29,20 +29,6 @@ namespace Magnum { -#ifndef MAGNUM_TARGET_GLES2 -template class BufferedImage; -#endif -template class Image; - -#ifndef MAGNUM_TARGET_GLES2 -typedef BufferedImage<1> BufferedImage1D; -typedef BufferedImage<2> BufferedImage2D; -typedef BufferedImage<3> BufferedImage3D; -#endif -typedef Image<1> Image1D; -typedef Image<2> Image2D; -typedef Image<3> Image3D; - /** @nosubgrouping @brief %Framebuffer diff --git a/src/Magnum.h b/src/Magnum.h index 4a442f629..56579b81e 100644 --- a/src/Magnum.h +++ b/src/Magnum.h @@ -16,9 +16,11 @@ */ /** @file - * @brief Basic definitions + * @brief Basic definitions and forward declarations for Magnum namespace */ +#include + #include "magnumConfigure.h" #ifndef MAGNUM_TARGET_GLES @@ -94,6 +96,71 @@ typedef Math::Matrix4 Matrix4; using Math::deg; using Math::rad; +/* Forward declarations for all types in root namespace */ +class AbstractImage; +class AbstractShaderProgram; +class AbstractTexture; +class Buffer; + +#ifndef MAGNUM_TARGET_GLES2 +template class BufferedImage; +typedef BufferedImage<1> BufferedImage1D; +typedef BufferedImage<2> BufferedImage2D; +typedef BufferedImage<3> BufferedImage3D; +#endif + +#ifndef MAGNUM_TARGET_GLES +class BufferedTexture; +#endif + +template class Color3; +template class Color4; + +enum class Version: GLint; +class Context; +class Extension; + +class CubeMapTexture; + +#ifndef MAGNUM_TARGET_GLES +class CubeMapTextureArray; +#endif + +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 IndexedMesh; +class Mesh; +class Profiler; +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; +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 diff --git a/src/Mesh.h b/src/Mesh.h index 2a1104548..d33c94115 100644 --- a/src/Mesh.h +++ b/src/Mesh.h @@ -27,9 +27,6 @@ namespace Magnum { -class Buffer; -class Context; - /** @brief Non-indexed mesh diff --git a/src/ResourceManager.h b/src/ResourceManager.h index f603a8616..19147bb11 100644 --- a/src/ResourceManager.h +++ b/src/ResourceManager.h @@ -29,7 +29,7 @@ namespace Magnum { * * @see Resource::state(), ResourceManager::state() */ -enum class ResourceState { +enum class ResourceState: std::uint8_t { /** The resource is not yet loaded. */ NotLoaded, @@ -48,7 +48,7 @@ enum class ResourceState { * * @see ResourceManager::set() */ -enum class ResourceDataState { +enum class ResourceDataState: std::uint8_t { /** * The resource can be changed by the manager in the future. This is * slower, as Resource needs to ask the manager for new version every time @@ -70,7 +70,7 @@ enum class ResourceDataState { @see ResourceManager::set(), ResourceManager::free() */ -enum class ResourcePolicy { +enum class ResourcePolicy: std::uint8_t { /** The resource will stay resident for whole lifetime of resource manager. */ Resident, diff --git a/src/TypeTraits.h b/src/TypeTraits.h index 23f882df5..49e75e871 100644 --- a/src/TypeTraits.h +++ b/src/TypeTraits.h @@ -30,9 +30,6 @@ namespace Math { template class Vector; } -template class Color3; -template class Color4; - /** @brief Traits class for plain OpenGL types