gittech. site

for different kinds of informations and explorations.

Easy to use cross-platform 2D game library for C++

Published at
Feb 20, 2025

JNGL - Just a Neat Game Library

🌐 Website πŸƒ Quickstart πŸŽ“ Tutorial πŸ“š Documentation

Chat

An easy to use C++ game library for Linux, Windows, macOS, Android, iOS, Xbox, the Nintendo Switch, LG webOS and the Web.

Portal Dogs running on the Switch

Building from Source

cmake -Bbuild
cmake --build build
./build/jngl-test

Linux

Ubuntu

sudo apt-get install libgl1-mesa-dev libfreetype6-dev libfontconfig1-dev libpng-dev \
libxxf86vm-dev libvorbis-dev cmake g++ libwebp-dev git libsdl2-dev

Fedora

sudo dnf install fontconfig-devel freetype-devel libvorbis-devel libwebp-devel \
cmake SDL2-devel gcc-c++ libatomic

Arch Linux

pacman -Syu --needed cmake gcc sdl2 pkg-config fontconfig libwebp libvorbis

Windows

MSYS2 / MinGW-w64

Set up MSYS2 and install the following in a MinGW-w64 Win64 Shell:

pacman -Syu --needed mingw-w64-x86_64-gcc \
mingw-w64-x86_64-freetype mingw-w64-x86_64-libvorbis mingw-w64-x86_64-libwebp \
mingw-w64-x86_64-dlfcn mingw-w64-x86_64-cmake make mingw-w64-x86_64-gdb \
mingw-w64-x86_64-libtheora mingw-w64-x86_64-SDL2

Visual Studio 2017 or newer

cmake -Bbuild -DFETCHCONTENT_QUIET=0

Then open build/jngl.sln in Visual Studio.

macOS

Use Homebrew to install the build dependencies:

brew install sdl2 freetype libvorbis webp pkg-config cmake

Android

  1. Install the Android SDK and set ANDROID_HOME to point to it.
  2. In the Android SDK Manager, install the NDK build tools.
  3. Run the following command to test via ADB:
make -C android run

Alternatively, open android/test in Android Studio and build from there.

iOS

Generate an Xcode project using CMake:

cmake -Bbuild-ios -GXcode -DCMAKE_TOOLCHAIN_FILE=cmake/iOS.toolchain.cmake -DIOS_PLATFORM=SIMULATOR

Then open and build build-ios/jngl.xcodeproj in Xcode.

Xbox

cmake -Bbuild-uwp -DCMAKE_SYSTEM_NAME=WindowsStore "-DCMAKE_SYSTEM_VERSION=10.0"

Then open build-uwp/jngl.sln in Visual Studio.

Example Usage

Here's a simple "Hello, World!" example in JNGL:

#include <jngl.hpp>
#include <jngl/init.hpp>

class MyGame : public jngl::Work {
    void step() override {
        // game logic
    }
    void draw() const override {
        text.draw(jngl::modelview().translate({ -100, 0 }));
    }
    jngl::Font font{ "Arial.ttf", 12 };
    jngl::TextLine text{ font, "Hello World!" };
};

jngl::AppParameters jnglInit() {
    jngl::AppParameters params;
    params.start = []() {
        return std::make_shared<MyGame>();
    };
    return params;
}

For a more complete starting point (i.e. project structure, etc.) check out the JNGL project template.