From 09d6c779515c1f181ead150d16bf63a178cb43db Mon Sep 17 00:00:00 2001 From: kdx Date: Wed, 31 May 2023 10:20:50 +0200 Subject: tfw it builds --- .gitignore | 1 + build.zig | 2 +- src/Px.zig | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.zig | 40 +++++++++++++++++++++++---------------- 4 files changed, 87 insertions(+), 17 deletions(-) create mode 100644 src/Px.zig diff --git a/.gitignore b/.gitignore index fe95f8d..f594753 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /zig-* +/.build_config diff --git a/build.zig b/build.zig index 569c77c..fe1ffa6 100644 --- a/build.zig +++ b/build.zig @@ -28,7 +28,7 @@ pub fn build(b: *std.Build) void { }); sdk.link(exe, .dynamic); - exe.addModule("sdl2", sdk.getNativeModule()); + exe.addModule("sdl2", sdk.getWrapperModule()); // This declares intent for the executable to be installed into the // standard location when the user invokes the "install" step (the default diff --git a/src/Px.zig b/src/Px.zig new file mode 100644 index 0000000..690dae9 --- /dev/null +++ b/src/Px.zig @@ -0,0 +1,61 @@ +const std = @import("std"); +const sdl = @import("sdl2"); +const Allocator = std.mem.Allocator; + +const Self = @This(); +pub const Color = u8; + +allocator: Allocator, +renderer: sdl.Renderer, +width: u32, +height: u32, +buffer: []Color, +texture: sdl.Texture, + +pub fn init(allocator: Allocator, renderer: sdl.Renderer, width: u32, height: u32) !Self { + var self = Self{ + .allocator = allocator, + .renderer = renderer, + .buffer = undefined, + .width = width, + .height = height, + .texture = undefined, + }; + + self.buffer = try allocator.alloc(Color, width * height); + errdefer allocator.free(self.buffer); + + self.texture = try sdl.createTexture( + renderer, + sdl.PixelFormatEnum.rgba8888, + sdl.Texture.Access.streaming, + width, + height, + ); + errdefer self.texture.destroy(); + + return self; +} + +pub fn deinit(self: *Self) void { + self.texture.destroy(); + self.allocator.free(self.buffer); +} + +pub fn flip(self: *Self) void { + _ = self; + return; + //var pixeldata = try self.texture.lock(null); + //_ = pixeldata; + + //var y: usize = 0; + //while (y < self.height) : (y += 1) { + // var x: usize = 0; + // while (x < self.width) : (x += 1) { + // } + //} +} + +pub fn cls(self: *Self, c: Color) void { + @memset(self.buffer, c); +} diff --git a/src/main.zig b/src/main.zig index c8a3f67..88d56d3 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,24 +1,32 @@ const std = @import("std"); +const sdl = @import("sdl2"); +const Px = @import("Px.zig"); pub fn main() !void { - // Prints to stderr (it's a shortcut based on `std.io.getStdErr()`) - std.debug.print("All your {s} are belong to us.\n", .{"codebase"}); + var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); + defer arena.deinit(); - // stdout is for the actual output of your application, for example if you - // are implementing gzip, then only the compressed bytes should be sent to - // stdout, not any debugging messages. - const stdout_file = std.io.getStdOut().writer(); - var bw = std.io.bufferedWriter(stdout_file); - const stdout = bw.writer(); + try sdl.init(.{ + .video = true, + .events = true, + }); + defer sdl.quit(); - try stdout.print("Run `zig build test` to run the tests.\n", .{}); + var window = try sdl.createWindow( + "zig-px", + .{ .centered = {} }, + .{ .centered = {} }, + 640, + 480, + .{ .vis = .shown }, + ); + defer window.destroy(); - try bw.flush(); // don't forget to flush! -} + var renderer = try sdl.createRenderer(window, null, .{ .accelerated = true }); + defer renderer.destroy(); + + var px = try Px.init(arena.allocator(), renderer, 256, 256); + defer px.deinit(); -test "simple test" { - var list = std.ArrayList(i32).init(std.testing.allocator); - defer list.deinit(); // try commenting this out and see if zig detects the memory leak! - try list.append(42); - try std.testing.expectEqual(@as(i32, 42), list.pop()); + px.cls(0); } -- cgit v1.2.3