Modular game development framework/engine written with C++. Bebone implements high-level abstractions, as well as provides access to low-level internal abstractions for flexible and highly customizable game development
- Modular code base, every bebone module is a self contained library with minimal dependency on third-party libraries. All bebone abstractions inherit same interfaces, for better integration with user defined abstractions
- Designed with real-world use in mind for small hobby projects, as well as professional/enterprise projects.
- User-Friendly for all experience levels. Designed to be intuitive and easy to use for beginners, as well as experienced professionals
Bebone is not a new javascript framework btw. It is a game development one!
- Source code available at github.com/Maksasj/bebone
- Community Discord discord.gg/bebone
- Bebone documentation available at github.com/Maksasj/bebone
Bebone provides multi layer APIs where each level build on top of previous:
- Abstraction - basic abstraction layer. Abstracts most basic things, such as OpenGL or Vulkan
- System - advance abstraction layer. Implements generalized systems on top of abstraction layer, such as Renderer
- App - complete application layer. Combines multiple systems into self-contained application
For now bebone has several modules:
- Core module. Core bebone module implements most important abstractions which are widely used across all other modules. Implements Memory, Debug, Types, Event, Input abstractions
- Graphics module (GFX module). Abstraction layer module, implements basic abstractions on top of Graphical APIs such as OpenGL and Vulkan. GFX module depends on Core, Assets modules
- Assets module. Module designed for loading and managing different assets such as images, models, materals. Assets module depends on Core module only
- Renderer module System layer module, provides high-level generalized graphical functionality. It abstracts all low-level OpenGL or Vulkan under one convenient interface. This module is build on top of GFX module
- Sound module Todo
First of all requirements
- CMake (At least version 3.21)
- Ninja (At least version 1.11.1)
- C++ compiler (Have test with Clang 15.0.5 and GCC 12.2.0)
- Vulkan SDK (if you want to build GFX module)
Firstly lets clone bebone locally (note that you also need to clone all bebone git submodules with --recursive flag)
git clone --recursive git@github.com:Maksasj/bebone.gitSecondly lets configure our CMake configuration with
cmake -B build -G NinjaFinally you can simply build project with cmake
cmake --build buildThe testing process is similar to the Building. After a successful build, all you have to do is run CTest from build\tests\unit directory
As for integration tests we use our examples, so see Examples section
For convenience, we tried to reduce the use of third-party libraries, as it complicates code management and readability. At the moment, bebone is only dependent on these third-party libraries:
- Glad (OpenGL function header)
- Vulkan-Headers (Vulkan function header)
- GLFW (Window management library)
- Glslang (SPIR-V shader compiler library)
- imgui (Debug GUI library)
- stb (Image management library and others)
- miniaudio (Sound and Music library)
You can find examples in examples directory.
#include "bebone/bebone.h"
using namespace bebone::renderer;
using namespace bebone::gfx;
int main() {
auto window = WindowFactory::create_window("Example", 800, 600);
auto renderer = RendererFactory::create_renderer(window);
auto sprite = renderer->load_sprite("sprite.png");
while(!window->closing()) {
renderer->render(sprite, { .position = Vec3f::zero });
renderer->present();
}
return 0;
}For full documentation see DOCUMENTATION.md file
Since for now no one cares about bebone we do not have any instructions or pull request templates, so just open issue.
Bebone is free and open source game development framework. All code in this repository is licensed under
- Apache-2.0 license (LICENSE.md or http://www.apache.org/licenses/LICENSE-2.0)
Copyright 2023 © Maksim Jaroslavcevas, Oskaras Vištorskis