@@ -27,10 +27,12 @@ use std::ops::{Index, IndexMut};
2727extern crate image;
2828extern crate rand;
2929extern crate num_cpus;
30+ extern crate byteorder;
3031
3132use rand:: distributions:: { IndependentSample , Range } ;
3233use rand:: SeedableRng ;
3334use rand:: Rng as RngTrait ;
35+ // use byteorder::{ByteOrder, LittleEndian};
3436
3537type RngSeed = [ u32 ; 4 ] ;
3638type Rng = rand:: XorShiftRng ;
@@ -81,6 +83,29 @@ impl IndexMut<(u32, u32)> for RenderTarget {
8183 }
8284}
8385
86+ fn write_hdr ( filename : & str , flimg : & RenderTarget ) {
87+ let ref mut fout = File :: create ( & Path :: new ( filename) ) . unwrap ( ) ;
88+
89+ let bytes = unsafe {
90+ let ptr : * const u8 = std:: mem:: transmute ( & flimg. buf [ 0 ] [ 0 ] as * const _ ) ;
91+ let len = 8 * flimg. size . 0 * flimg. size . 1 * 3 ;
92+ std:: slice:: from_raw_parts ( ptr, len as usize )
93+ } ;
94+
95+ write ! ( fout, "{} {} {}\n \n " ,
96+ flimg. size. 0 , flimg. size. 1 , flimg. samples) . unwrap ( ) ;
97+ fout. write ( bytes) . unwrap ( ) ;
98+
99+ // for p in &flimg.buf {
100+ // let mut buf = [0; 8 * 3];
101+ // for i in 0..3 {
102+ // LittleEndian::write_f64(&mut buf[(8 * i)..(8 * (i + 1))], p[i]);
103+ // }
104+
105+ // fout.write(&buf).unwrap();
106+ // }
107+ }
108+
84109fn write_buffer ( filename : & str , flimg : & RenderTarget ) {
85110 let ( nx, ny) = flimg. size ;
86111 let ns = flimg. samples ;
@@ -257,6 +282,7 @@ fn render_overlord(base_rng : &mut Rng, ns : u32, render_task : RenderTask) {
257282
258283 if prev_samp / nsave != main_target. samples / nsave {
259284 write_buffer ( "trace.png" , & main_target) ;
285+ write_hdr ( "raw.rgb" , & main_target) ;
260286
261287 print ! ( "{} " , main_target. samples) ;
262288 io:: stdout ( ) . flush ( ) . unwrap ( ) ;
@@ -1310,7 +1336,7 @@ fn the_next_week(rng : &mut Rng) -> Box<Hitable> {
13101336 }
13111337 }
13121338
1313- let complicated_geom = true ;
1339+ let complicated_geom = false ;
13141340
13151341 if complicated_geom {
13161342 //complicated ground
0 commit comments