Companion repo and example implementation for 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.
GameKit has just one external dependency: SDL. You can install SDL with the package manager of your choice. On macOS if you intend to use the Metal renderer you will need to build from source until the next SDL release drops.
- clone the repository recursively:
git clone --recursive https://github.com/prime31/zig-gamekit
zig build help
to see what examples are availblezig build EXAMPLE_NAME
to run an example
var texture: Texture = undefined;
pub fn main() !void {
try gamekit.run(.{ .init = init, .render = render });
}
fn init() !void {
texture = Texture.initFromFile(std.testing.allocator, "texture.png", .nearest) catch unreachable;
}
fn render() !void {
gamekit.gfx.beginPass(.{ .color = Color.lime });
gamekit.draw.tex(texture, .{ .x = 50, .y = 50 });
gamekit.gfx.endPass();
}