#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 "magnumConfigure.h" #ifndef MAGNUM_TARGET_GLES #include #include #else #ifndef MAGNUM_TARGET_GLES2 #include #else #include #include #endif #endif /** * @todo Link to libGL / libGLES based on which windowcontext is used in app * and whether GLES is enabled or not -- this allows us to use glx with * ES on nvidia/intel. Using libGL and EGL on nvidia is whole another * problem, though. How about windows? It won't allow unlinked DLLs, so * probably always link Magnum itself to GL library there. How about unit * tests not needing any of GL? -- different testing library? */ namespace Corrade { namespace Utility { class Debug; class Warning; class Error; } } namespace Magnum { namespace Math { template class Vector2; template class Vector3; template class Vector4; template class Point2D; template class Point3D; template class Matrix3; template class Matrix4; template constexpr T deg(T value); template constexpr T rad(T value); template struct Constants; } /* Bring debugging facility from Corrade::Utility namespace */ using Corrade::Utility::Debug; using Corrade::Utility::Warning; using Corrade::Utility::Error; /** @brief Two-component floating-point vector */ typedef Math::Vector2 Vector2; /** @brief Three-component floating-point vector */ typedef Math::Vector3 Vector3; /** @brief Four-component floating-point vector */ typedef Math::Vector4 Vector4; /** @brief Two-dimensional floating-point homogeneous coordinates */ typedef Math::Point2D Point2D; /** @brief Three-dimensional floating-point homogeneous coordinates */ typedef Math::Point3D Point3D; /** @brief 3x3 floating-point matrix */ typedef Math::Matrix3 Matrix3; /** @brief 4x4 floating-point matrix */ typedef Math::Matrix4 Matrix4; /** @brief Floating-point constants */ /* Using float instead of GLfloat to not break KDevelop autocompletion */ typedef Math::Constants Constants; /* Copying angle converters from Math namespace */ 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 CubeMapTexture; #ifndef MAGNUM_TARGET_GLES class CubeMapTextureArray; #endif /* DebugMarker forward declaration is not needed */ /* 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 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