mosra / magnum
- четверг, 9 июня 2016 г. в 03:12:16
C++
C++11/C++14 and OpenGL graphics engine
Magnum is 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.
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.
Graphics APIs:
Platforms:
newlib
and glibc
toolchains are supported)You can either use packaging scripts, which are stored in package/
subdirectory, or compile and install everything manually. Note that
Magnum documentation contains more
comprehensive guide for building, packaging and crosscompiling.
compatibility
branch.Note that full feature set is available only on GCC 4.8.1 and Clang 3.1.
The library (for example with support for SDL2 applications) can be built and installed using these four commands:
mkdir -p build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr \
-DWITH_SDL2APPLICATION=ON
make
make install
See Doxygen documentation for more information about enabling or disabling additional features and targeting different platforms such as OpenGL ES.
If you want to build also unit tests (which are not built by default), pass
-DBUILD_TESTS=ON
to CMake. Unit tests use Corrade's TestSuite framework and
can be run using
ctest --output-on-failure
in build directory. Everything should pass ;-)
The documentation is written in Doxygen (version 1.8 with Markdown support is used, but older versions should do good job too) and additionally uses Graphviz for class diagrams and TeX for math formulas. The documentation can be build by running:
doxygen
in root directory (i.e. where Doxyfile
is). Resulting HTML documentation
will be in build/doc/
directory. You might need to create build/
directory
if it doesn't exist yet.
The Doxygen documentation has a thorough guide how to start using Magnum in your project.
The engine itself is kept as small as possible with only little dependencies. Additional functionality, often depending on external libraries, is provided in separate repositories.
Want to learn more about the library? Found a bug or want to tell me an awesome idea? Feel free to visit my website or contact me at:
#magnum-engine
channel on freenodeSee CREDITS.md file for details. Big thanks to everyone involved!
Magnum is licensed under MIT/Expat license, see COPYING file for details.