zig-gamekit
prime31/zig-gamekit
Companion repo for zig-renderkit for making 2D games
prime31/zig-gamekit
Companion repo for zig-renderkit for making 2D games
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.
git clone --recursive https://github.com/prime31/zig-gamekit
zig build help
to see what examples are availblezig build EXAMPLE_NAME
to run an examplevar 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();
}