Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/prime31/zig-gamekit

Companion repo for zig-renderkit for making 2D games
https://github.com/prime31/zig-gamekit

Last synced: about 2 months ago
JSON representation

Companion repo for zig-renderkit for making 2D games

Awesome Lists containing this project

README

        

# Zig GameKit
Companion repo and example implementation for [zig-renderkit](https://github.com/prime31/zig-renderkit). `GameKit` provides an example implementation of a game framework built on top of `RenderKit`. It includes the core render loop, window (via SDL), input, Dear ImGui and timing support. You can use it as a base to make a 2D game as-is or create your own 2D framework based on it.

`GameKit` provides the following wrappers around `RenderKit`'s API showing how it can be abstracted away in a real world project: `Texture`, `Shader` and `OffscreenPass`. Building on top of those types, `GameKit` then provides `Mesh` and `DynamicMesh` which manage buffers and bindings for you. Finally, the high level types utilize `DynamicMesh` and cover pretty much all that any 2D game would require: `Batcher` (quad/sprite batch) and `TriangleBatcher`.

Some basic utilities and a small math lib with just the types required for the renderer (`Vec2`, `Vec3`, `Color`, `3x2 Matrix`, `Quad`) are also included.

## Dependencies
GameKit has just one external dependency: SDL. You can install SDL with the package manager of your choice.

### Usage
- clone the repository recursively: `git clone --recursive https://github.com/prime31/zig-gamekit`
- `zig build help` to see what examples are availble
- `zig build EXAMPLE_NAME` to run an example

### Minimal GameKit Project File
```zig
var texture: Texture = undefined;

pub fn main() !void {
try gamekit.run(.{ .init = init, .render = render });
}

fn init() !void {
texture = Texture.initFromFile(std.heap.HeapAllocator, "texture.png", .nearest) catch unreachable;
}

fn render() !void {
gamekit.gfx.beginPass(.{ .color = Color.lime });
gamekit.gfx.draw.tex(texture, .{ .x = 50, .y = 50 });
gamekit.gfx.endPass();
}
```