This is a small personal game engine. It's mainly a platform for me to experiment with OpenGL and perhaps build small game prototypes. While you can use it too under the MIT license, you probably shouldn't as it's incomplete, inefficient, buggy and largely undocumented.
Many might be unpolished...
- OpenGL 4 forward renderer
- One directional sun light with shadow mapping
- Multiple point lights with omnidirectional shadow maps
- HDR with multiple tonemap functions
- Bloom / glow
- Diffuse / normal / specular / emission / height / AO map support
- Dynamic reflections with reflectivity map support
- Automatic mesh smoothing with tessellation shaders
- LODs
- Postprocessing effects: vignette, sepia, saturation control, chromatic aberration...
- #define based uber shader
- Automatic shader permutation generation based on material properties
- Automatic shader reload on file change
- Mesh loading from Wavefront .obj, Inter-Quake Model .iqm and heightmap images
- Basic skeletal animation (GPU skinning)
- Entity-component based architecture
- Physics through Bullet dynamics library
- Hotloadable gameplay code modules
- JSON based configuration and scene declaration
- ImGui user interface integration
- Sound system: positional audio, sample randomization, contact sounds
- Built-in screenshot and gif movie capture
- Runs on Linux and Windows (mostly)
Here's some things that need work. The list is by no means exhaustive.
- There is little multi-threading going on
- Sun shadow map really needs cascades
- Light system is poor, should implement Forward+
- Tonemapping needs adaptive exposure
- Animation and sound systems are very basic
- Gameplay modules barely work on Windows and hotloading fails in some situations
- Entity/component destroying works poorly as it's currently implemented
- Windows support is fragile as I mainly develop this on a Linux box
You need CMake and C++11 capable compiler. Currently Clang works best as GCC breaks live reload of non-trivial code plugins. Visual Studio is untested.
A number of third-party libraries are included in the repository and built as a part of the build process (see "third-party" subfolder). In addition, you need SDL 2.0.2+ and OpenGL drivers installed.
The core repository only includes some debug assets, so you probably also want to have weep-media
repository (cloned as a sub folder next to this readme).
mkdir build
cd build
cmake ..
cmake --build .
Run "weep" from the build directory. You can give the scene to load as a command line argument or select it from the dev tools. See the Readme in weep-media
repository for some example scenes.
Renderer code, especially shader code owes a lot to various tutorials, among others:
MIT, see LICENSE file for details.