# unigi unigi (Universal Graphics & Input) is a collection of headers, that implement a cross-platform API for drawing to the screen (framebuffer or window), and taking inputs (keyboard, mouse, joypad). This repository contains documentation, links and example applications. # Compatibility * Highly compatible with compilers (C89, simple preprocessors) * No `make` required, entirely configurable from your compiler, or header files * Supports wide range of hardware (16-bit+, little/big endian) * Standardized 16-bit color format (AAAARRRRGGGGBBBB, effectively 12-bit on most platforms) * Screen coordinates are standardized * Decent performance (Though some performance is sacrificed for standardization) # Layers A unigi app is built from different layers: * [Headers](https://git.lumen.sh/Fierelier/unigi.headers) - The functions to be implemented by the Platform * Platform - Implements the functions from Headers to work on a particular system (see below for a list) * ... - Optionally, more layers * App - Your code, uses other layers for input/output # Platforms Platforms act as the translation layer for different systems. The idea is to minimize the amount of work it takes to port graphical applications. ## Official platforms * [SDL1](https://git.lumen.sh/Fierelier/unigi.platform.sdl1) - The highly compatible SDL 1.2, works on old Linux and Windows 95+ * SDL2 (soon) - SDL 2.x, works on somewhat recent Linux and Windows XP+ * DOS (soon) - DOS (Disk Operating System), compatible with FreeDOS and MS-DOS * PSP (soon) - PlayStation Portable gaming console * Null (soon) - A placeholder that does "nothing", good if you want to test basic compilation for an unsupported platform ## Third party platforms ...