25 lines
809 B
Zig
25 lines
809 B
Zig
const std = @import("std");
|
|
|
|
const clamp = @import("./utils.zig").clamp;
|
|
const Color = @import("./vec.zig").Color;
|
|
|
|
pub fn write_color(c: Color, samples_per_pixel: isize) anyerror!void {
|
|
var r = c.x();
|
|
var g = c.y();
|
|
var b = c.z();
|
|
|
|
// Divide the color by the number of samples and gamma-correct for gamma=2.0.
|
|
const scale = 1.0 / @intToFloat(f32, samples_per_pixel);
|
|
r = @sqrt(scale * r);
|
|
g = @sqrt(scale * g);
|
|
b = @sqrt(scale * b);
|
|
|
|
// Write the translated [0,255] value of each color component.
|
|
var ir = @floatToInt(u8, 256 * clamp(r, 0, 0.999));
|
|
var ig = @floatToInt(u8, 256 * clamp(g, 0, 0.999));
|
|
var ib = @floatToInt(u8, 256 * clamp(b, 0, 0.999));
|
|
|
|
const stdout = std.io.getStdOut();
|
|
try stdout.writer().print("{d} {d} {d}\n", .{ ir, ig, ib });
|
|
}
|