Welcome to gintonic! This is a personal render engine of me. The current render strategy is deferred rendering.
Install the latest version of Xcode and brew
. Then install boost and CMake
with brew:
$ brew install boost
$ brew install cmake
Make sure have a modern compiler (modern GCC or modern clang). Install boost, cmake and git with your package manager.
Install the latest version of Visual Studio C++. Install the latest version of CMake. Install a fairly recent version of boost. Make sure you have a git client.
Clone this repository recursively in order to clone all the submodules too:
$ git clone --recursive https://github.com/rwols/gintonic.git
We use CMake in the most standard way possible, no surprises. That means that you should execute the following commands on the command line in order to build the project:
$ cd path/to/gintonic
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build .
It's recommended to build with Ninja:
$ cmake .. -G "Ninja"
On Windows, the freetype library cannot be built as a shared library, so use the following command line invocation for CMake:
$ cmake .. -DBUILD_SHARED_LIBS=OFF
You can optionally build release versions (the default is Debug):
$ cmake .. -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release
In graphical form, the directory structure looks like this:
gintonic:
- assets:
- CMakeLists.txt
- <more directories>
- examples:
- CMakeLists.txt
- <cpp files, each of which is a separate example executable>
- include:
- CMakeLists.txt
- cmake:
- <Doxygen related files>
- Foundation:
- <header files>
- Graphics:
- GUI:
- <header files, deprecated>
- OpenGL:
- <header files>
- Shaders:
- <glsl shader files>
- <header files>
- Math:
- <header files>
- <header files>
- lib:
- <third party git submodules live here>
- CMakeLists.txt
- <implementation files, mirrors the include directory structure>
- test:
- CMakeLists.txt
- <various unit test cpp files>
- tools:
- <various subprojects for tools development>
- CMakeLists.txt # The root cmake file.
- README.md # <-- You are here.
The example executables are located in examples
. Each .cpp
file is a single
example. When building has finished, and assuming the project was built in the
build
folder, the example executables are located in build/examples
.
I'm currently in the process of refactoring a lot of code. Most notably, the
Renderer object (located in include/Graphics/Renderer.hpp
and
lib/Graphics/Renderer.cpp
) has become so large that it has become infeasible
to move the project forward. Moreover, Entities are in the process of getting a
facelift. The current implementation has a bunch of hard-coded pointers to
component objects; this should just be a vector. Dynamic casting will then be
handled via dynCast
in include/Casting.hpp
. Next, a general Asset system is
needed to make this engine data-driven. Take a look at the issues page to see
what is being worked on.