Giter Club home page Giter Club logo

mace's Introduction

Build Status Build status

MACE

MACE stands for MACE is A C++ Engine, Modular Abstract Components Engine, Many Amazing Classes Everywhere, Many Acronyms Can Exist, or the medievel weapon. Choose whichever one you like best.

What is in it?

It has many things:

  • Hardware accelerated graphics library
  • Subpixel text renderer using Freetype
  • Audio player
  • Serial communication
  • DLL and process hanlding
  • Vector and Matrix math library
  • Macros to determine compilers and systems
  • Module loader

You can implement your own modules to make MACE whatever you want!

Compatibility

The graphics capabilities target hardware with OpenGL 3.3 compatibility

The following compilers are unit tested automatically. The master branch will always have a release that passes all unit tests.

  • G++ 5 and 6 on Linux
  • Clang 4.0 and 3.5 on Linux
  • Clang 3.5 on OSX
  • Latest and second latest version of VS 2015 and 2017 on Windows

MACE requires a C++ 11 compliant compiler

Installation

For install instructions, consult INSTALLATION.md in the root folder.

Documentation

Documentation is located here.

To generate documentation on your own, download Doxygen. Then, run Doxygen with Doxyfile located in docs branch.

A new folder called out should have been created. Subfolders contain the different documentation types, like html or xml.

Important Notes

  • You should never delete any pointer given to you by MACE and MACE will never delete any pointer you give it unless explicitely specified.
  • MACE has varying levels on abstraciton, and gives you the power to change most of these levels. You can completely change how MACE works without touching the source code. Doing this may be dangerous if you don't know what you are doing

mace's People

Contributors

liavt avatar sharhar avatar smerkousdavid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

mace's Issues

Vulkan support?

I have been teaching myself vulkan for a while now, and I think that I would be able to implement a vulkan back-end to the engine. Should I try to do it, or is OpenGL good enough? (I do not think that there will be a significant performance increase, it will just be cool to have)

Does not work on Mac

The glfwPollEvents function must be called from the main thread. (Windows should also only be created on the main thread). Since the WIndowModule class uses a thread callback to do the per frame rendering, this function is called from a secondary thread. On Windows and Linux this is not an issue, but on OSX calling this function for another thread leads to an invalid pointer. For a full list of the threading limitations with glfw functions, go to the glfw website: http://www.glfw.org/docs/latest/group__window.html#ga5c336fddf2cbb5b92f65f10fb6043344

Audio

Add Audio support.

I think I can do this if I understood the structure of the engine. If you created some template classes to put te audio code I could write the OpenAL code. What do you think?

Generate CMake file

In order for automated unit testing, we need a Makefile to build on Unix.

Anything other than Windows doesn't build

Doesn't work on anything other than Windows!

Here are the Linux errors (with GCC:)

/home/travis/build/liavt/MACE/include/MC-System/Constants.h:17:8: error: expected nested-name-specifier before ‘Byte’
/home/travis/build/liavt/MACE/include/MC-System/Constants.h:17:8: error: ‘Byte’ has not been declared
/home/travis/build/liavt/MACE/include/MC-System/Constants.h:17:13: error: expected ‘;’ before ‘=’ token
/home/travis/build/liavt/MACE/include/MC-System/Constants.h:17:13: error: expected unqualified-id before ‘=’ token
/home/travis/build/liavt/MACE/include/MC-System/Constants.h:22:8: error: expected nested-name-specifier before ‘Size’
/home/travis/build/liavt/MACE/include/MC-System/Constants.h:22:8: error: ‘Size’ has not been declared
/home/travis/build/liavt/MACE/include/MC-System/Constants.h:22:13: error: expected ‘;’ before ‘=’ token
/home/travis/build/liavt/MACE/include/MC-System/Constants.h:22:13: error: expected unqualified-id before ‘=’ token
In file included from /home/travis/build/liavt/MACE/MC-System/System.cpp:1:0:
/home/travis/build/liavt/MACE/include/MC-System/System.h:49:11: error: ‘string’ in namespace ‘std’ does not name a type
/home/travis/build/liavt/MACE/include/MC-System/System.h:55:15: error: variable ‘mc::System mc::final’ has initializer but incomplete type
/home/travis/build/liavt/MACE/include/MC-System/System.h:56:2: error: expected primary-expression before ‘public’
/home/travis/build/liavt/MACE/include/MC-System/System.h:56:2: error: expected ‘}’ before ‘public’
/home/travis/build/liavt/MACE/include/MC-System/System.h:56:2: error: expected ‘,’ or ‘;’ before ‘public’
/home/travis/build/liavt/MACE/include/MC-System/System.h:80:33: error: variable or field ‘removeModule’ declared void
/home/travis/build/liavt/MACE/include/MC-System/System.h:80:28: error: ‘string’ is not a member of ‘std’
/home/travis/build/liavt/MACE/include/MC-System/System.h:96:28: error: ‘string’ is not a member of ‘std’
/home/travis/build/liavt/MACE/include/MC-System/System.h:103:42: error: ‘mc::Module* mc::getModule(unsigned int)’ redeclared as different kind of symbol
/home/travis/build/liavt/MACE/include/MC-System/System.h:96:18: error: previous declaration of ‘mc::Module* mc::getModule’
/home/travis/build/liavt/MACE/include/MC-System/System.h:109:28: error: ‘string’ is not a member of ‘std’
/home/travis/build/liavt/MACE/include/MC-System/System.h:120:48: error: ‘bool mc::moduleExists(const mc::Module*)’ redeclared as different kind of symbol
/home/travis/build/liavt/MACE/include/MC-System/System.h:109:15: error: previous declaration of ‘bool mc::moduleExists’
/home/travis/build/liavt/MACE/include/MC-System/System.h:125:10: error: ‘Size’ does not name a type
/home/travis/build/liavt/MACE/include/MC-System/System.h:142:36: error: ‘unsigned int mc::indexOf’ redeclared as different kind of symbol
/home/travis/build/liavt/MACE/include/MC-System/System.h:136:23: error: previous declaration of ‘unsigned int mc::indexOf(const mc::Module&)’
/home/travis/build/liavt/MACE/include/MC-System/System.h:142:31: error: ‘string’ is not a member of ‘std’
/home/travis/build/liavt/MACE/include/MC-System/System.h:152:33: error: variable or field ‘assertModule’ declared void
/home/travis/build/liavt/MACE/include/MC-System/System.h:152:28: error: ‘string’ is not a member of ‘std’
/home/travis/build/liavt/MACE/include/MC-System/System.h:152:47: error: ‘string’ is not a member of ‘std’
/home/travis/build/liavt/MACE/include/MC-System/System.h:158:33: error: variable or field ‘assertModule’ declared void
/home/travis/build/liavt/MACE/include/MC-System/System.h:158:28: error: ‘string’ is not a member of ‘std’
/home/travis/build/liavt/MACE/include/MC-System/System.h:181:2: error: expected unqualified-id before ‘private’
/home/travis/build/liavt/MACE/include/MC-System/System.h:193:1: error: expected declaration before ‘}’ token
make[2]: *** [MC-System/CMakeFiles/MC-System.dir/System.cpp.o] Error 1
make[2]: Leaving directory `/home/travis/build/liavt/MACE/build'
make[1]: *** [MC-System/CMakeFiles/MC-System.dir/all] Error 2
make[1]: Leaving directory `/home/travis/build/liavt/MACE/build'
make: *** [all] Error 2

And here are the OSX errors (I also presume with GCC:)

/Users/shahar/Git/MACE/include/MC-System/Constants.h:17:15: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
        using Byte = uint8_t;
                     ^
/Users/shahar/Git/MACE/include/MC-System/Constants.h:22:15: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
        using Size = unsigned int;
                     ^
In file included from /Users/shahar/Git/MACE/MC-System/System.cpp:1:
/Users/shahar/Git/MACE/include/MC-System/System.h:55:15: warning: 'final' keyword is a C++11 extension [-Wc++11-extensions]
        class System final {
                     ^
In file included from /Users/shahar/Git/MACE/MC-System/System.cpp:3:
/Users/shahar/Git/MACE/include/MC-System/Exceptions.h:19:45: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                explicit AssertionError(const std::string c = "No message was given") : runtime_error(c) {};
                                                          ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
In file included from /Users/shahar/Git/MACE/MC-System/System.cpp:3:
/Users/shahar/Git/MACE/include/MC-System/Exceptions.h:34:52: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                explicit ObjectNotFoundInArray(const std::string c = "No message was given") : runtime_error(c) {};
                                                                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
In file included from /Users/shahar/Git/MACE/MC-System/System.cpp:3:
/Users/shahar/Git/MACE/include/MC-System/Exceptions.h:49:47: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                explicit IndexOutOfBounds(const std::string c = "No message was given") : runtime_error(c) {};
                                                            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:16:18: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                removeModule(m.getName());
                               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:18:40: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
        void System::removeModule(std::string module)
                                              ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:21:20: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                        if (modules[i]->getName()==module) {
                                        ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:30:8: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare]
                if (i<0 || i>numberOfModules())throw IndexOutOfBounds("Input is not a valid index!");
                    ~^~
/Users/shahar/Git/MACE/MC-System/System.cpp:33:41: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
        Module * System::getModule(std::string keyword)
                                               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:36:20: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                        if (modules[i]->getName() == keyword) {
                                        ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:44:8: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare]
                if (i<0 || i>numberOfModules())throw IndexOutOfBounds("Input is not a valid index!");
                    ~^~
/Users/shahar/Git/MACE/MC-System/System.cpp:47:40: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
        bool System::moduleExists(std::string module)
                                              ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:50:20: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                        if (modules[i]->getName() == module) {
                                        ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:58:31: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                return moduleExists(module->getName());
                                            ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:64:40: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
        void System::assertModule(std::string module, std::string errorMessage)
                                              ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:64:60: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
        void System::assertModule(std::string module, std::string errorMessage)
                                                                  ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:70:40: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
        void System::assertModule(std::string module)
                                              ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:76:20: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                return indexOf(m.getName());
                                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:79:43: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
        unsigned int System::indexOf(std::string name) {
                                                 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
/Users/shahar/Git/MACE/MC-System/System.cpp:81:20: error: implicit instantiation of undefined template 'std::__1::basic_string<char,
      std::__1::char_traits<char>, std::__1::allocator<char> >'
                        if (modules[i]->getName() ==name) {
                                        ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:193:33: note: template is declared here
    class _LIBCPP_TYPE_VIS_ONLY basic_string;
                                ^
5 warnings and 17 errors generated.
make[2]: *** [MC-System/CMakeFiles/MC-System.dir/System.cpp.o] Error 1
make[1]: *** [MC-System/CMakeFiles/MC-System.dir/all] Error 2
make: *** [all] Error 2

So literally the same issue! I personally believe its not building with C++11, because all of the errors come from features only found in C++11.

Also view the Travis.ci build at https://travis-ci.org/liavt/MACE

Mac not building

Macs not working. I think its because it is not compiling w/ C++11. Is there a way to tell the compiler to use C++11 in cmake?

Add a UI labrary

Add the GLUI library as a dependency for MACE and use it to render UI.

Libraries don't download

When initially running the cmake project to generate build files, external libraries aren't downloaded if they are not found. This should be fixed to allow for the engine to be used with ease by other people.

Example games

It's very difficult to understand how to use the engine if there aren't any example games in the repo. even just a simple pong game would help a lot in trying to understand how to use it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.