aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-04-20 19:22:50 +0900
committernsfisis <nsfisis@gmail.com>2025-04-20 19:22:50 +0900
commitc64077509a2a5e7af8816653e4ea22c4bbeeaff2 (patch)
tree14d7ae5fd968bd5cf8f804ff74a2e8660ee51eb4
parent42f06f1841d70a97bad48084cc3360209589196f (diff)
downloadRayTracingInOneWeekend.zig-c64077509a2a5e7af8816653e4ea22c4bbeeaff2.tar.gz
RayTracingInOneWeekend.zig-c64077509a2a5e7af8816653e4ea22c4bbeeaff2.tar.zst
RayTracingInOneWeekend.zig-c64077509a2a5e7af8816653e4ea22c4bbeeaff2.zip
feat: update zig to 0.14.0
-rw-r--r--build.zig47
-rw-r--r--build.zig.zon68
-rw-r--r--src/main.zig10
-rw-r--r--src/rtw/hittable.zig8
-rw-r--r--src/rtw/rand.zig2
5 files changed, 106 insertions, 29 deletions
diff --git a/build.zig b/build.zig
index b2f4f0a..137afcb 100644
--- a/build.zig
+++ b/build.zig
@@ -15,8 +15,12 @@ pub fn build(b: *std.Build) void {
// set a preferred release mode, allowing the user to decide how to optimize.
const optimize = b.standardOptimizeOption(.{});
- const lib = b.addStaticLibrary(.{
- .name = "RayTracingInOneWeekend",
+ // This creates a "module", which represents a collection of source files alongside
+ // some compilation options, such as optimization mode and linked system libraries.
+ // Every executable or library we compile will be based on one or more modules.
+ const lib_mod = b.createModule(.{
+ // `root_source_file` is the Zig "entry point" of the module. If a module
+ // only contains e.g. external object files, you can make this `null`.
// In this case the main source file is merely a path, however, in more
// complicated build scripts, this could be a generated file.
.root_source_file = b.path("src/root.zig"),
@@ -24,16 +28,41 @@ pub fn build(b: *std.Build) void {
.optimize = optimize,
});
+ // We will also create a module for our other entry point, 'main.zig'.
+ const exe_mod = b.createModule(.{
+ // `root_source_file` is the Zig "entry point" of the module. If a module
+ // only contains e.g. external object files, you can make this `null`.
+ // In this case the main source file is merely a path, however, in more
+ // complicated build scripts, this could be a generated file.
+ .root_source_file = b.path("src/main.zig"),
+ .target = target,
+ .optimize = optimize,
+ });
+
+ // Modules can depend on one another using the `std.Build.Module.addImport` function.
+ // This is what allows Zig source code to use `@import("foo")` where 'foo' is not a
+ // file path. In this case, we set up `exe_mod` to import `lib_mod`.
+ exe_mod.addImport("zig_init_lib", lib_mod);
+
+ // Now, we will create a static library based on the module we created above.
+ // This creates a `std.Build.Step.Compile`, which is the build step responsible
+ // for actually invoking the compiler.
+ const lib = b.addLibrary(.{
+ .linkage = .static,
+ .name = "zig_init",
+ .root_module = lib_mod,
+ });
+
// This declares intent for the library to be installed into the standard
// location when the user invokes the "install" step (the default step when
// running `zig build`).
b.installArtifact(lib);
+ // This creates another `std.Build.Step.Compile`, but this one builds an executable
+ // rather than a static library.
const exe = b.addExecutable(.{
.name = "RayTracingInOneWeekend",
- .root_source_file = b.path("src/main.zig"),
- .target = target,
- .optimize = optimize,
+ .root_module = exe_mod,
});
const zigimg_dependency = b.dependency("zigimg", .{
@@ -74,17 +103,13 @@ pub fn build(b: *std.Build) void {
// Creates a step for unit testing. This only builds the test executable
// but does not run it.
const lib_unit_tests = b.addTest(.{
- .root_source_file = b.path("src/root.zig"),
- .target = target,
- .optimize = optimize,
+ .root_module = lib_mod,
});
const run_lib_unit_tests = b.addRunArtifact(lib_unit_tests);
const exe_unit_tests = b.addTest(.{
- .root_source_file = b.path("src/main.zig"),
- .target = target,
- .optimize = optimize,
+ .root_module = exe_mod,
});
const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);
diff --git a/build.zig.zon b/build.zig.zon
index e35459c..5e8b8de 100644
--- a/build.zig.zon
+++ b/build.zig.zon
@@ -6,16 +6,29 @@
//
// It is redundant to include "zig" in this name because it is already
// within the Zig package namespace.
- .name = "RayTracingInOneWeekend",
+ .name = .RayTracingInOneWeekend,
// This is a [Semantic Version](https://semver.org/).
// In a future version of Zig it will be used for package deduplication.
- .version = "0.1.0",
+ .version = "0.2.0",
- // This field is optional.
- // This is currently advisory only; Zig does not yet do anything
- // with this value.
- //.minimum_zig_version = "0.11.0",
+ // Together with name, this represents a globally unique package
+ // identifier. This field is generated by the Zig toolchain when the
+ // package is first created, and then *never changes*. This allows
+ // unambiguous detection of one package being an updated version of
+ // another.
+ //
+ // When forking a Zig project, this id should be regenerated (delete the
+ // field and run `zig build`) if the upstream project is still maintained.
+ // Otherwise, the fork is *hostile*, attempting to take control over the
+ // original project's identity. Thus it is recommended to leave the comment
+ // on the following line intact, so that it shows up in code reviews that
+ // modify the field.
+ .fingerprint = 0x81e32b5abe329337, // Changing this has security and trust implications.
+
+ // Tracks the earliest Zig version that the package considers to be a
+ // supported use case.
+ .minimum_zig_version = "0.14.0",
// This field is optional.
// Each dependency must either provide a `url` and `hash`, or a `path`.
@@ -23,11 +36,50 @@
// Once all dependencies are fetched, `zig build` no longer requires
// internet connectivity.
.dependencies = .{
+ // See `zig fetch --save <url>` for a command-line interface for adding dependencies.
+ //.example = .{
+ // // When updating this field to a new URL, be sure to delete the corresponding
+ // // `hash`, otherwise you are communicating that you expect to find the old hash at
+ // // the new URL. If the contents of a URL change this will result in a hash mismatch
+ // // which will prevent zig from using it.
+ // .url = "https://example.com/foo.tar.gz",
+ //
+ // // This is computed from the file contents of the directory of files that is
+ // // obtained after fetching `url` and applying the inclusion rules given by
+ // // `paths`.
+ // //
+ // // This field is the source of truth; packages do not come from a `url`; they
+ // // come from a `hash`. `url` is just one of many possible mirrors for how to
+ // // obtain a package matching this `hash`.
+ // //
+ // // Uses the [multihash](https://multiformats.io/multihash/) format.
+ // .hash = "...",
+ //
+ // // When this is provided, the package is found in a directory relative to the
+ // // build root. In this case the package's hash is irrelevant and therefore not
+ // // computed. This field and `url` are mutually exclusive.
+ // .path = "foo",
+ //
+ // // When this is set to `true`, a package is declared to be lazily
+ // // fetched. This makes the dependency only get fetched if it is
+ // // actually used.
+ // .lazy = false,
+ //},
+ // TODO: Zig 0.14 support has not been merged to zigimg/zigimg yet.
.zigimg = .{
- .url = "https://github.com/zigimg/zigimg/archive/d9dbbe22b5f7b5f1f4772169ed93ffeed8e8124d.tar.gz",
- .hash = "122013646f7038ecc71ddf8a0d7de346d29a6ec40140af57f838b0a975c69af512b0",
+ .url = "https://github.com/TUSF/zigimg/archive/7e098bf6be568cb8bd659397c2d5c291893095bc.tar.gz",
+ .hash = "1220e3f7a6ab3d53eabe4723290a665628efc3fe94e85baa854450fc9a5e8528a74e",
},
},
+
+ // Specifies the set of files and directories that are included in this package.
+ // Only files and directories listed here are included in the `hash` that
+ // is computed for this package. Only files listed here will remain on disk
+ // when using the zig package manager. As a rule of thumb, one should list
+ // files required for compilation plus any license(s).
+ // Paths are relative to the build root. Use the empty string (`""`) to refer to
+ // the build root itself.
+ // A directory listed here means that all files within, recursively, are included.
.paths = .{
"build.zig",
"build.zig.zon",
diff --git a/src/main.zig b/src/main.zig
index d6b1131..2dd208a 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -301,12 +301,12 @@ fn generateCornellBox(allocator: anytype) !Hittable {
var box2r = try Rc(Hittable).init(allocator);
box1.get_mut().* = try Hittable.makeBox(.{ .x = 0, .y = 0, .z = 0 }, .{ .x = 165, .y = 330, .z = 165 }, white.clone(), allocator);
- box1r.get_mut().* = Hittable.rotateY(box1, deg2rad(15));
- try hittable_objects.append(Hittable.translate(box1r, .{ .x = 265, .y = 0, .z = 295 }));
+ box1r.get_mut().* = Hittable.makeRotateY(box1, deg2rad(15));
+ try hittable_objects.append(Hittable.makeTranslate(box1r, .{ .x = 265, .y = 0, .z = 295 }));
box2.get_mut().* = try Hittable.makeBox(.{ .x = 0, .y = 0, .z = 0 }, .{ .x = 165, .y = 165, .z = 165 }, white.clone(), allocator);
- box2r.get_mut().* = Hittable.rotateY(box2, deg2rad(-18));
- try hittable_objects.append(Hittable.translate(box2r, .{ .x = 130, .y = 0, .z = 65 }));
+ box2r.get_mut().* = Hittable.makeRotateY(box2, deg2rad(-18));
+ try hittable_objects.append(Hittable.makeTranslate(box2r, .{ .x = 130, .y = 0, .z = 65 }));
return .{ .list = .{ .objects = hittable_objects } };
}
@@ -316,7 +316,7 @@ pub fn main() !void {
const allocator = gpa.allocator();
defer debug.assert(gpa.deinit() == .ok);
- var rng_ = std.rand.DefaultPrng.init(42);
+ var rng_ = std.Random.DefaultPrng.init(42);
const rng = rng_.random();
// Image
diff --git a/src/rtw/hittable.zig b/src/rtw/hittable.zig
index c47d9ff..3816b4a 100644
--- a/src/rtw/hittable.zig
+++ b/src/rtw/hittable.zig
@@ -54,11 +54,11 @@ pub const Hittable = union(HittableTag) {
return .{ .box = try Box.init(p0, p1, material, allocator) };
}
- pub fn translate(obj: Rc(Self), offset: Vec3) Self {
+ pub fn makeTranslate(obj: Rc(Self), offset: Vec3) Self {
return .{ .translate = .{ .object = obj, .offset = offset } };
}
- pub fn rotateY(obj: Rc(Self), angle: f64) Self {
+ pub fn makeRotateY(obj: Rc(Self), angle: f64) Self {
return .{ .rotateY = RotateY.init(obj, angle) };
}
@@ -225,11 +225,11 @@ const MovingSphere = struct {
const o0 = sphere.center(time0);
const o1 = sphere.center(time1);
const r = sphere.radius;
- const box0 = .{
+ const box0: Aabb = .{
.min = o0.sub(.{ .x = r, .y = r, .z = r }),
.max = o0.add(.{ .x = r, .y = r, .z = r }),
};
- const box1 = .{
+ const box1: Aabb = .{
.min = o1.sub(.{ .x = r, .y = r, .z = r }),
.max = o1.add(.{ .x = r, .y = r, .z = r }),
};
diff --git a/src/rtw/rand.zig b/src/rtw/rand.zig
index 47a8d61..dcc2aa1 100644
--- a/src/rtw/rand.zig
+++ b/src/rtw/rand.zig
@@ -2,7 +2,7 @@ const std = @import("std");
const Vec3 = @import("vec.zig").Vec3;
-pub const Random = std.rand.Random;
+pub const Random = std.Random;
// [min, max)
pub fn randomInt(comptime T: type, rand: Random, min: T, max: T) T {