@@ 6,8 6,6 @@ use os;
use strconv;
use time;
-def SAMPLES: uint = 50u;
-
fn init_scene() *hittable = {
let ground = alloc(make_lambertian(&C(0.5, 0.5, 0.5)));
let near = alloc(make_metal(&C(0.7, 0.6, 0.5), 0.00));
@@ 92,6 90,7 @@ export fn main() void = {
let seed = 0u;
let samples: (uint | void) = void;
let width: (uint | void) = void, height: (uint | void) = void;
+ let begin: (uint | void) = void, end: (uint | void) = void;
for (let i = 0z; i < len(cmd.opts); i += 1) {
let opt = cmd.opts[i];
switch (opt.0) {
@@ 103,6 102,10 @@ export fn main() void = {
height = strconv::stou(opt.1) as uint;
case 'S' =>
seed = strconv::stou(opt.1) as uint;
+ case 'b' =>
+ begin = strconv::stou(opt.1) as uint;
+ case 'e' =>
+ end = strconv::stou(opt.1) as uint;
};
};
let samples = match (samples) {
@@ 124,6 127,17 @@ export fn main() void = {
yield u;
};
+ if ((begin is void) ^^ (end is void)) {
+ abort();
+ };
+ let tup = match (begin) {
+ case void =>
+ yield (0u, height);
+ case let u: uint =>
+ yield (u, end: uint);
+ };
+ let begin = tup.0, end = tup.1;
+
rng = math::random::init(seed);
let img = image_create(width, height, C(0f64, 0f64, 0f64));
@@ 139,8 153,10 @@ export fn main() void = {
let max_bounce = 50u;
let start = time::unix(time::now(time::clock::MONOTONIC));
- for (let j = 0z; j < height; j += 1) {
- fmt::errorf("\rProgress: {}/{}", j, height)!;
+ for (let j = begin; j < end; j += 1) {
+ fmt::errorf("\rProgress: begin: {} current: {} end: {} | {}%",
+ begin, j, end,
+ ((j - begin): i64: f64 / (end - begin): i64: f64 * 100.0): int)!;
for (let i = 0z; i < width; i += 1) {
for (let k = 0u; k < samples; k += 1) {
let u = i: int: f64;