|
|
|
|
/*
|
|
|
|
|
This file is part of Magnum.
|
|
|
|
|
|
|
|
|
|
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
|
|
|
|
Vladimír Vondruš <mosra@centrum.cz>
|
|
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
|
copy of this software and associated documentation files (the "Software"),
|
|
|
|
|
to deal in the Software without restriction, including without limitation
|
|
|
|
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
|
and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
|
Software is furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included
|
|
|
|
|
in all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
|
DEALINGS IN THE SOFTWARE.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace Magnum {
|
|
|
|
|
/** @mainpage Magnum
|
|
|
|
|
|
|
|
|
|
Magnum is a 2D/3D graphics engine written in C++11/C++14 and modern OpenGL. Its
|
|
|
|
|
goal is to simplify low-level graphics development and interaction with OpenGL
|
|
|
|
|
using recent C++11/C++14 features and to abstract away platform-specific
|
|
|
|
|
issues.
|
|
|
|
|
|
|
|
|
|
@section mainpage-design-goals Design goals
|
|
|
|
|
|
|
|
|
|
- **2D is not an ugly stepchild.** Many engines out there were created as
|
|
|
|
|
pure 2D or 3D and the alternative is usually just an afterthought, if it is
|
|
|
|
|
present at all. If you want to do your next project in 2D only, you have to
|
|
|
|
|
either relearn another engine from scratch or emulate it in 3D, leaving
|
|
|
|
|
many things overly complicated. Magnum treats 2D equivalently to 3D so you
|
|
|
|
|
can reuse what you already learned for 3D and even combine 2D and 3D in one
|
|
|
|
|
project.
|
|
|
|
|
|
|
|
|
|
- **Forward compatibility.** If newer technology makes things faster, simpler
|
|
|
|
|
or more intuitive, it is the way to go. Magnum by default relies on decent
|
|
|
|
|
C++11 support and modern OpenGL features and if some feature isn't
|
|
|
|
|
available, it tries to emulate it using older functionality. However, you
|
|
|
|
|
are not restricted to use the older functionality directly, if you really
|
|
|
|
|
want to.
|
|
|
|
|
|
|
|
|
|
- **Intuitive, but not restrictive API.** Scripting languages are often
|
|
|
|
|
preferred to C/C++ because they are designed to have less complicated APIs
|
|
|
|
|
and less boilerplate code. Magnum is designed with intuitivity in mind, but
|
|
|
|
|
also with speed and static checks that strongly-typed native code offers.
|
|
|
|
|
It wraps OpenGL into less verbose and more type-safe API, which is easier
|
|
|
|
|
to use. Usually the most common way is the most simple, but if you need
|
|
|
|
|
full control, you can have it.
|
|
|
|
|
|
|
|
|
|
- **Extensible and replaceable components.** If you want to use different
|
|
|
|
|
mathematical library for specific purposes, that new windowing toolkit,
|
|
|
|
|
your own file formats or another physics library, you can. Conversion of
|
|
|
|
|
math structures between different libraries can be done on top of pre-made
|
|
|
|
|
skeleton classes, support for file formats is done using plugins and
|
|
|
|
|
platform support is done by writing simple wrapper class.
|
|
|
|
|
|
|
|
|
|
@section mainpage-platforms Supported platforms
|
|
|
|
|
|
|
|
|
|
Graphics APIs:
|
|
|
|
|
|
|
|
|
|
- **OpenGL** 2.1 through 4.5, core profile functionality and modern
|
|
|
|
|
extensions
|
|
|
|
|
- **OpenGL ES** 2.0, 3.0, 3.1 and extensions to match desktop OpenGL
|
|
|
|
|
functionality
|
|
|
|
|
- **WebGL** 1.0, 2.0 and extensions to match desktop OpenGL functionality
|
|
|
|
|
|
|
|
|
|
Platforms:
|
|
|
|
|
|
|
|
|
|
- **Linux** and embedded Linux (natively using GLX/EGL and Xlib or through
|
|
|
|
|
SDL2, GLFW or GLUT toolkit)
|
|
|
|
|
- **Windows** using both MSVC and MinGW, natively or using ANGLE (through
|
|
|
|
|
SDL2, GLFW or GLUT toolkit)
|
|
|
|
|
- **macOS** (through SDL2 or GLFW toolkit)
|
|
|
|
|
- **iOS** (through SDL2 toolkit)
|
|
|
|
|
- **Android**
|
|
|
|
|
- **Windows RT** (Store/Phone) using ANGLE (through SDL2 toolkit)
|
|
|
|
|
- **Web** (asm.js or WebAssembly), through [Emscripten](http://kripken.github.io/emscripten-site/)
|
|
|
|
|
|
|
|
|
|
@section mainpage-features Features
|
|
|
|
|
|
|
|
|
|
- Vector and matrix library with implementation of complex numbers,
|
|
|
|
|
quaternions and their dual counterparts for representing transformations.
|
|
|
|
|
- Classes wrapping OpenGL using RAII principle and simplifying its usage with
|
|
|
|
|
direct state access and automatic fallback for unavailable features.
|
|
|
|
|
- Extensible scene graph which can be modified for each specific usage.
|
|
|
|
|
- Plugin-based data exchange framework, tools for manipulating meshes,
|
|
|
|
|
textures and images.
|
|
|
|
|
- Pre-made shaders, primitives and other tools for easy prototyping and
|
|
|
|
|
debugging.
|
|
|
|
|
|
|
|
|
|
@section mainpage-getting-started Getting started
|
|
|
|
|
|
|
|
|
|
Read the thorough @ref getting-started "guide to download, build, install and start using Magnum"
|
|
|
|
|
in your project.
|
|
|
|
|
|
|
|
|
|
@section mainpage-hacking Hacking Magnum
|
|
|
|
|
|
|
|
|
|
If you want to hack on this engine, if you spotted a bug, need an feature or
|
|
|
|
|
have an awesome idea, you can get a copy of the sources from GitHub and start
|
|
|
|
|
right now! There is the already mentioned guide about
|
|
|
|
|
@ref building "how to download and build Magnum" and also guide about
|
|
|
|
|
@ref coding-style "coding style and best practices" which you should follow to
|
|
|
|
|
make the library as consistent and maintainable as possible.
|
|
|
|
|
|
|
|
|
|
Feel free to get more information or contact the team at:
|
|
|
|
|
|
|
|
|
|
- Website --- http://magnum.graphics
|
|
|
|
|
- GitHub --- https://github.com/mosra/magnum
|
|
|
|
|
- Gitter --- https://gitter.im/mosra/magnum
|
|
|
|
|
- IRC --- join `#magnum-engine` channel on freenode
|
|
|
|
|
- Google Groups --- https://groups.google.com/forum/#!forum/magnum-engine
|
|
|
|
|
- Twitter --- https://twitter.com/czmosra
|
|
|
|
|
- E-mail --- mosra@centrum.cz
|
|
|
|
|
- Jabber --- mosra@jabbim.cz
|
|
|
|
|
|
|
|
|
|
@section mainpage-license License
|
|
|
|
|
|
|
|
|
|
Magnum is licensed under the MIT/Expat license:
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
> Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
|
|
|
|
> Vladimír Vondruš <mosra@centrum.cz>
|
|
|
|
|
>
|
|
|
|
|
> Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
|
> copy of this software and associated documentation files (the "Software"),
|
|
|
|
|
> to deal in the Software without restriction, including without limitation
|
|
|
|
|
> the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
|
> and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
|
> Software is furnished to do so, subject to the following conditions:
|
|
|
|
|
>
|
|
|
|
|
> The above copyright notice and this permission notice shall be included
|
|
|
|
|
> in all copies or substantial portions of the Software.
|
|
|
|
|
>
|
|
|
|
|
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
|
> THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
|
> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
|
> DEALINGS IN THE SOFTWARE.
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
}
|