A cross-platform game engine written in modern C++17 from scratch.
Welcome to the Zeus game engine! The Zeus game engine strives to provide a modern approach to writing game engines in C++ using modern techniques. It is important to state a project's general design goals and I think below is perfect for this project.
General Decision Rationale:
- User friendly (well-documented and intuitive)
- Keep It Simple Stupid (KISS)
- Speed & Efficiency
- Extensibility
Yes! It has always been a dream of mine to write a cross-platform 3D game engine in C++ from scratch! One of the main goals of this project is to create the most well-documented game engine in history. This includes the architecture, general design decisions and of course the internal frameworks and APIs. It is extremely important that everything is documented. It should be super easy for someone to contribute/understand this project. One of the main goals is to not close doors, but to open them as much as possible. Nothing is a secret.
My definition of from "scratch" is only using low-level libraries provided by the OS for help. For example X11 for creating/managing windows in Linux. I do not mean doing everything in assembly. I am not that crazy...probably not.
Below contains everything you need to know in order to build the project. The project is mainly developed on Linux. That is why a lot of the examples involve CMake and makefiles. This project's main compiler is Clang. Of course, the project will be tested on other compilers also.
If you want to build the project in its entirely and use all of its features you will need the following:
- CMake (at least version 3.22) - Cross-platform build system
- GoogleTest - For unit and integration testing
- Doxygen - To build the documentation
- PowerShell - To run the build scripts
- Valgrind - Memory leak detection
- A compiler that supports C++17
There are specific packages that need to be downloaded in order to build the project.
Windows
Linux
There are two ways to setup/configure the project. There are scripts created with predefined settings to get the project up and running quickly. Then there is the manual way which is using CMake's GUI or changing the settings on the main CMakeLists.txt
file located in the project's root directory.
There are many PowerShell scripts created to build the project with CMake using different settings located in the build_scripts
folder.
release_build.ps1
- Builds the project in release mode with optimizations turned on- This will also turn off all of the logging except for INFO, WARNING and FATAL ERROR
- This will also turn off building examples and tests.
debug_build.ps1
- Builds the project in debug mode with optimizations turned offhybrid_build.ps1
- Builds the project in hybrid mode with optimizations turned on for certain parts of the engine
Run the build_scripts/release_build.ps1
file to build the project with predefined settings.
# From the root directory of the project
# 'pwsh' is PowerShell
pwsh build_scripts/release_build.ps1
CMakeLists.txt
# From the root directory
# Create a folder called "build" to build the project in and then change to
# that directory
mkdir build && cd build
# Call CMake using CMake's default settings
cmake ..
Now the project should be setup with your favorite build system. Below is how to build the targets with CMake using your build system.
Makefile
# Run `make help` for targets that can be built if you are using makefiles (common on Linux)
make help
# Run 'make' in the build folder to trigger the building
make
Testing is done using GoogleTest. There are unit tests and integration tests for the project. The tests can be found in the tests
folder in the root directory.
The documentation is inside the docs
folder in the main directory. The documentation is generated using Doxygen.
Makefile
# Build the documentation using make
make Doxygen
Examples are provided to show how to use the engine located in the examples
folder in the root directory. The examples are dependent on the project. Any changes to the main project will require the examples to be rebuilt.
One of the big goals of Zeus is to support as many platforms as possible. Currently the main focus will be on Windows & Linux. macOS will be added soon after along with support for consoles and for mobile devices (in that order).
Supported Platforms:
- Windows
- Linux
Planned Platforms:
- macOS
- Xbox
- Playstation
- Switch
- Android
- iPhone
Zeus is not accepting contributors at this time. The project needs to have a foundation before accepting contributors. But please come back often to check to see if the engine is accepting contributors! If you want an idea on how someone would contribute please review the CONTRIBUTING before making any contributions. This document will explain the project's directory, coding style and how to contribute. Big contributors will be added to the CONTRIBUTORS document.
- Tristan F. - Main engine architect & developer - programmersunited
This project currently uses the GPLv3 license. Please look at the LICENSE for more details. This is subject to change in the future. It could become more restrictive or more relaxed. If the engine becomes more restrictive then a repository will be created to keep the code that was created while the project was under the GPLv3 license.
The project currently is in its early stages. Changes make take a while. Please be patient :).