/imagini

Cross-platform .NET Standard game/app engine based on SDL2

Primary LanguageC#MIT LicenseMIT

Stability: alpha

Imagini - cross-platform .NET game/app framework

Imagini is a modular solution for building games and multimedia apps using .NET Core/Standard. It's based on SDL2 library and should run pretty much everywhere where the .NET runtime and SDL2 library is present.

Line coverage Branch coverage

NuGet packages will be published when this project reaches RC or stable state (whatever will come first). For now it can be tinkered with, but the API may change (hopefully not much).

Note: SDL2 native binary should be present on the system. This project doesn't bundle it, so you may need to provide it by yourself.


Packages

Imagini.Core

Base module. It implements the following functionality:

  • Window creation with ability to choose backend
  • Event handling - mouse, keyboard, gamepads, touch, window state and others
  • App/game loop - variable and fixed timesteps, works similar to XNA/MonoGame loop
  • Display device enumeration - queries available display devices and their modes

API Documentation

Imagini.2D

2D rendering module. Built around SDL2's Render and Surface APIs.

It provides the following features:

  • Drawing sprites at any position and angle, from the whole texture or it's part
  • Several blend modes and modulation
  • Drawing single-pixel points, single-pixel lines, wireframe and filled rectangles
  • Render-to-texture if the underlying backend supports it
  • Texture and surface pixel data manipulation

It does not contain image file loaders.

API Documentation

Imagini.ImageSharp

Texture and surface loader module. Allows for texture and surface creations from image files and streams. Powered by SixLabors/ImageSharp.

The following image file formats are supported:

  • PNG
  • JPEG
  • BMP
  • GIF

API Documentation

Imagini.Fonts

Sprite font generator and renderer module. Powered by SixLabors/Fonts and SixLabors/ImageSharp.

Features include:

  • TTF and WOFF font loading
  • Font bitmap generation based on font size and style specified
  • ITextRenderer interface and it's implementation for Imagini.2D Graphics API

API Documentation

Imagini.Veldrid

Veldrid integration - the only difference in the usage between this and Imagini.2D is that app's Graphics field exposes the Veldrid GraphicsDevice. You can see it in action in the following samples:

Samples\HelloVeldrid
Samples\VeldridGettingStarted

Unimplemented features

Sound API

Check out the vox project. It provides a full 3D sound solution based on OpenAL.


Samples


Building

This project uses Cake building system. To build the project, use:

./build.sh
# OR
./build.ps1

Refer to the build script for command line options.

Don't forget to init and pull Git submodules!