A simple, cross-platform 2D game engine.
Go to file
Attila Uygun 214ae33246 Fix for compiler warning 2023-11-04 00:12:55 +01:00
.vscode Support for Windows platform 2023-08-13 00:06:04 +02:00
assets Implement ImguiBackend 2023-10-14 21:04:11 +02:00
build Implement AudioDeviceWASAPI 2023-10-04 19:58:56 +02:00
src Fix for compiler warning 2023-11-04 00:12:55 +01:00
.clang-format Remove OpenGL threaded rendering 2023-06-26 20:03:22 +02:00
.gitignore Cleanup gn config and .gitignore 2023-09-11 19:32:36 +02:00
.gn Replace the build system with gn 2023-08-03 11:32:28 +02:00
BUILD.gn Add support for Android build to GN config 2023-08-31 22:05:53 +02:00
LICENSE Initial commit. 2020-09-08 21:08:07 +02:00
README.md Add imgui to the list of third-party libraries 2023-10-14 21:07:05 +02:00
privacy.md Update. 2021-02-10 00:39:04 +01:00

README.md

Kaliber

A simple, cross-platform 2D game engine with OpenGL and Vulkan renderers. Supports Linux, Windows and Android platforms. This is a personal hobby project. I've published a little game on Google Play based on this engine. Full game code and assets are included in this repository.

Pre-requisites:

GN build system is required for all platforms:
https://gn.googlesource.com/gn/

Building from the command-line:

All platforms except Android:

Setup:

Generate build files for Ninja in release and debug modes.

gn gen out/release
gn gen --args='is_debug=true' out/debug

Building and running:

Build all games in release mode and run "hello_world".

ninja -C out/release
./out/release/hello_world

Build "demo" in debug mode and run.

ninja -C out/debug demo
./out/debug/demo

Android:

Build "hello_world" in debug mode for all ABIs and install. GN will be run by Gradle so no setup is required. Location of gn and ninja executables can be specified via "gn" and "ninja" properties (-Pgn="path/gn").

cd build/android
./gradlew :app:installHelloWorldAllArchsDebug

Build "demo" in debug mode for x86_64 ABI and install. Valid ABI targets are Arm7, Arm8, X86, X86_64, AllArchs, ArmOnly, X86Only.

./gradlew :app:installDemoX86_64Debug

Generate Visual Studio solution:

gn.exe gen --args="is_debug=true" --ide=vs2022 out\vs
devenv out\vs\all.sln

Hello World example:

Shows a smoothly rotating "Hello World".

class HelloWorld final : public eng::Game {
 public:
  bool Initialize() final {
    eng::Engine::Get().SetImageSource(
        "hello_world_image",
        std::bind(&eng::Engine::Print, &eng::Engine::Get(), "Hello World",
                  /*bg_color*/ base::Vector4f(1, 1, 1, 0)));

    hello_world_.Create("hello_world_image").SetVisible(true);
    animator_.Attach(&hello_world_);
    animator_.SetRotation(base::PI2f, /*duration*/ 3,
                          std::bind(base::SmootherStep, std::placeholders::_1));
    animator_.Play(eng::Animator::kRotation, /*loop*/ true);
    return true;
  }

 private:
  eng::ImageQuad hello_world_;
  eng::Animator animator_;
};

GAME_FACTORIES{GAME_CLASS(HelloWorld)};

Third-party libraries:

glew, jsoncpp, minimp3, oboe, stb, texture-compressor, minizip, glslang, spirv-reflect, vma, vulkan-sdk, volk, imgui