Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/erkkah/tigr
TIGR - the TIny GRaphics library for Windows, macOS, Linux, iOS and Android.
https://github.com/erkkah/tigr
2d-graphics android cross-platform ios linux osx tigr tiny-graphics-library windows
Last synced: 9 days ago
JSON representation
TIGR - the TIny GRaphics library for Windows, macOS, Linux, iOS and Android.
- Host: GitHub
- URL: https://github.com/erkkah/tigr
- Owner: erkkah
- License: other
- Created: 2018-12-09T23:08:46.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-12-16T03:40:51.000Z (11 months ago)
- Last Synced: 2024-10-05T02:35:26.522Z (about 1 month ago)
- Topics: 2d-graphics, android, cross-platform, ios, linux, osx, tigr, tiny-graphics-library, windows
- Language: C
- Homepage:
- Size: 1.8 MB
- Stars: 755
- Watchers: 22
- Forks: 46
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# TIGR - TIny GRaphics library
![](./tigr.png)
TIGR is a tiny cross-platform graphics library,
providing a unified API for Windows, macOS, Linux, iOS and Android.TIGR's core is a simple framebuffer library.
On top of that, we provide a few helpers for the common tasks that 2D programs generally need:- Bitmap-backed windows.
- Direct access to bitmaps, no locking.
- Basic drawing helpers (plot, line, blitter).
- Text output using bitmap fonts.
- Mouse, touch and keyboard input.
- PNG loading and saving.
- Easy pixel shader access.TIGR is designed to be small and independent.
The 'hello world' example is less than 100kB:| *Platform* | *Size* |
| --- | --- |
| windows x86_64 | 48k |
| linux x86_64 | 43k |
| macOS arm64 | 90k |
| macOS x86_64 | 74k |There are no additional libraries to include; everything is baked right into your program.
TIGR is free to copy with no restrictions; see [tigr.h](tigr.h).
## How do I program with TIGR?
![](./demo.gif)Here's an example Hello World program. For more information, just read [tigr.h](tigr.h) to see the APIs available.
```C
#include "tigr.h"int main(int argc, char *argv[])
{
Tigr *screen = tigrWindow(320, 240, "Hello", 0);
while (!tigrClosed(screen))
{
tigrClear(screen, tigrRGB(0x80, 0x90, 0xa0));
tigrPrint(screen, tfont, 120, 110, tigrRGB(0xff, 0xff, 0xff), "Hello, world.");
tigrUpdate(screen);
}
tigrFree(screen);
return 0;
}
```## How to set up TIGR
### Desktop (Windows, macOS, Linux)
TIGR is supplied as a single .c and corresponding .h file.
To use it, you just drop them right into your project.
1. Grab **tigr.c** and **tigr.h**
2. Throw them into your project.
3. Link with
- -lopengl32 and -lgdi32 on Windows
- -framework OpenGL and -framework Cocoa on macOS
- -lGLU -lGL -lX11 on Linux
4. You're done!### Android
Due to the complex lifecycle and packaging of Android apps
(there is no such thing as a single source file Android app),
a tiny wrapper around TIGR is needed. Still - the TIGR API stays the same!To keep TIGR as tiny and focused as it is, the Android wrapper lives in a separate repo.
To get started on Android, head over to the [TIMOGR](https://github.com/erkkah/timogr) repo and continue there.
### iOS
On iOS, TIGR is implemented as an app delegate, which can be used in your app with just a few lines of code.
Building an iOS app usually requires quite a bit of tinkering in Xcode just to get up and running. To get up and running **fast**, there is an iOS starter project with a completely commandline-based tool chain, and VS Code configurations for debugging.
To get started on iOS, head over to the [TIMOGRiOS](https://github.com/erkkah/timogrios) repo and continue there.
> NOTE: TIGR is included in TIMOGR and TIMOGRiOS, there is no need to install TIGR separately.
## Fonts and shaders
### Custom fonts
TIGR comes with a built-in bitmap font, accessed by the `tfont` variable. Custom fonts can be loaded from bitmaps using `tigrLoadFont`. A font bitmap contains rows of characters separated by same-colored borders. TIGR assumes that the borders use the same color as the top-left pixel in the bitmap. Each character is assumed to be drawn in white on a transparent background to make tinting work.
Use the [tigrfont](https://github.com/erkkah/tigrfont) tool to create your own bitmap fonts from TTF or BDF font files.
Since TIGR version 3.1, unicode-encoded font sheets are supported, making it possible to render any glyph in your fonts. Text is still just rendered LTR, though.
### Custom pixel shaders
TIGR uses a built-in pixel shader that provides a couple of stock effects as controlled by `tigrSetPostFX`.
These stock effects can be replaced by calling `tigrSetPostShader` with a custom shader.
The custom shader is in the form of a shader function: `void fxShader(out vec4 color, in vec2 uv)` and has access to the four parameters from `tigrSetPostFX` as a `uniform vec4` called `parameters`.See the [shader example](examples/shader/shader.c) for more details.
## Known issues
On macOS, seemingly depending on SDK version and if you use TIGR in an Xcode project, you need to define `OBJC_OLD_DISPATCH_PROTOTYPES` to avoid problems with `objc_msgSend` prototypes.