initial
This commit is contained in:
commit
71bfdf18c0
4 changed files with 78 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
zig-cache
|
||||
zig-out
|
||||
|
||||
out.*
|
27
build.zig
Normal file
27
build.zig
Normal file
|
@ -0,0 +1,27 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn build(b: *std.build.Builder) void {
|
||||
// Standard target options allows the person running `zig build` to choose
|
||||
// what target to build for. Here we do not override the defaults, which
|
||||
// means any target is allowed, and the default is native. Other options
|
||||
// for restricting supported target set are available.
|
||||
const target = b.standardTargetOptions(.{});
|
||||
|
||||
// Standard release options allow the person running `zig build` to select
|
||||
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
||||
const mode = b.standardReleaseOptions();
|
||||
|
||||
const exe = b.addExecutable("zigtracer", "src/main.zig");
|
||||
exe.setTarget(target);
|
||||
exe.setBuildMode(mode);
|
||||
exe.install();
|
||||
|
||||
const run_cmd = exe.run();
|
||||
run_cmd.step.dependOn(b.getInstallStep());
|
||||
if (b.args) |args| {
|
||||
run_cmd.addArgs(args);
|
||||
}
|
||||
|
||||
const run_step = b.step("run", "Run the app");
|
||||
run_step.dependOn(&run_cmd.step);
|
||||
}
|
32
src/main.zig
Normal file
32
src/main.zig
Normal file
|
@ -0,0 +1,32 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn main() anyerror!void {
|
||||
const stdout = std.io.getStdOut().writer();
|
||||
const image_width = 256;
|
||||
const image_height = 256;
|
||||
|
||||
std.log.info("All your codebase are belong to us.", .{});
|
||||
|
||||
// PPM header
|
||||
try stdout.print("P3\n{d} {d}\n255\n", .{ image_width, image_height });
|
||||
|
||||
// this is a REALLY awkward way of writing a for-loop
|
||||
var j: u32 = 0;
|
||||
while (j < image_height) : (j += 1) {
|
||||
var i: u32 = 0;
|
||||
while (i < image_width) : (i += 1) {
|
||||
// doing this makes the loop bounds a bit cleaner
|
||||
const j_ = image_height - 1 - j;
|
||||
|
||||
const r = @intToFloat(f64, i) / (image_width - 1);
|
||||
const g = @intToFloat(f64, j_) / (image_width - 1);
|
||||
const b = 0.25;
|
||||
|
||||
const ir = @floatToInt(u32, 255.999 * r);
|
||||
const ig = @floatToInt(u32, 255.999 * g);
|
||||
const ib = @floatToInt(u32, 255.999 * b);
|
||||
|
||||
try stdout.print("{d} {d} {d}\n", .{ ir, ig, ib });
|
||||
}
|
||||
}
|
||||
}
|
15
src/point.zig
Normal file
15
src/point.zig
Normal file
|
@ -0,0 +1,15 @@
|
|||
const vec3 = struct {
|
||||
x: f64,
|
||||
y: f64,
|
||||
z: f64,
|
||||
|
||||
pub fn plus(self: vec3, other: vec3) vec3 {
|
||||
return vec3{
|
||||
self.x + other.x,
|
||||
self.y + other.y,
|
||||
self.z + other.z,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
const color = vec3;
|
Loading…
Reference in a new issue