79482d1c4d | ||
---|---|---|
.vscode | ||
assets | ||
build | ||
src | ||
.clang-format | ||
.gitignore | ||
.gn | ||
BUILD.gn | ||
LICENSE | ||
README.md | ||
kaliber.png | ||
privacy.md |
README.md
A simple, cross-platform 2D game engine with OpenGL and Vulkan renderers. Supports Linux 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-requisities:
This project uses GN build system
for all platforms except Android
(I want to add support for APKs, Java code etc. to the GN configuration and use
it for all platforms).
Building GN from source:
https://gn.googlesource.com/gn/
Pre-built GN binaries:
https://chrome-infra-packages.appspot.com/p/gn/gn/
Gradle
, Android SDK
and NDK
are required for Android.
If you prefer, you can install Android Studio
which includes all the
requirements.
Building from the command-line:
All platforms except Android:
Setup:
gn gen out/release
gn gen --args='is_debug=true' out/debug
Building and running:
ninja -C out/debug
./out/debug/hello_world
./out/debug/demo
Android:
cd build/android
./gradlew :app:installDebug
Third-party libraries:
glew, jsoncpp, minimp3, oboe, stb, texture-compressor, minizip, glslang, spirv-reflect, vma, vulkan-sdk, volk
Hello World example:
Shows a smoothly rotating "Hello Wolrd!".
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");
hello_world_.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_;
};
DECLARE_GAME_BEGIN
DECLARE_GAME(HelloWorld)
DECLARE_GAME_END