Skip to content
/ bebone Public

☠️ game development framework/engine aimed for flexible and highly customizable game development

License

Notifications You must be signed in to change notification settings

bebone0/bebone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bebone 💀

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!

Cool looking widgets GitHub Repo stars GitHub Actions Workflow Status GitHub License Discord

Links

  1. Source code available at github.com/Maksasj/bebone
  2. Community Discord discord.gg/bebone
  3. Bebone documentation available at github.com/Maksasj/bebone

Architecture ⚙️

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

Features ✨

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

Planned modules

Build 🛠

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.git

Secondly lets configure our CMake configuration with

cmake -B build -G Ninja

Finally you can simply build project with cmake

cmake --build build

Testing 💊

Unit testing

The testing process is similar to the Building. After a successful build, all you have to do is run CTest from build\tests\unit directory

Integration testing

As for integration tests we use our examples, so see Examples section

Dependencies 🗃

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)

Examples 🤡

You can find examples in examples directory.

Minimal example

#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;
}

Documentation 📑

For full documentation see DOCUMENTATION.md file

Contribution 🫶

Since for now no one cares about bebone we do not have any instructions or pull request templates, so just open issue.

License 🛡

Bebone is free and open source game development framework. All code in this repository is licensed under

Copyright 2023 © Maksim Jaroslavcevas, Oskaras Vištorskis

About

☠️ game development framework/engine aimed for flexible and highly customizable game development

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •