A simple, cross-platform 2D game engine.
Go to file
Attila Uygun ae825faf32 Always run ninja 2023-09-02 17:14:39 +02:00
.vscode Support for Windows platform 2023-08-13 00:06:04 +02:00
assets Add support for Android build to GN config 2023-08-31 22:05:53 +02:00
build Always run ninja 2023-09-02 17:14:39 +02:00
src Add support for Android build to GN config 2023-08-31 22:05:53 +02:00
.clang-format Remove OpenGL threaded rendering 2023-06-26 20:03:22 +02:00
.gitignore Update android build 2023-05-09 22:22:02 +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 Always run ninja 2023-09-02 17:14:39 +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 only "demo" in debug mode and run.

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

Android:

Build the default game ("hello_world") in debug mode for all ABIs and install. GN will be run by Gradle so no setup is required.

cd build/android
./gradlew :app:installDebug

Build configuration can be changed via project properties. The following command will build "demo" in debug mode for x86_64 ABI and install. "targetArchs" property can be set to any combination of Arm7, Arm8, X86_64, X86. Location of gn and ninja executables can also be specified via "gn" and "ninja" properties.

./gradlew :app:installDebug -PtargetArchs="X86_64" -PtargetGame="demo"

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:
  ~HelloWorld() final = default;

  bool Initialize() final {
    eng::Engine::Get().SetImageSource(
        "hello_world_image",
        std::bind(&eng::Engine::Print, &eng::Engine::Get(), "Hello World!",
                  base::Vector4f(1, 1, 1, 0)));

    hello_world_.Create("hello_world_image").SetVisible(true);
    animator_.Attach(&hello_world_);
    animator_.SetRotation(base::PI2f, 3,
                          std::bind(base::SmootherStep, std::placeholders::_1));
    animator_.Play(eng::Animator::kRotation, 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