| 1 | //! Paints `scene` through `draw` over OpenGL into an offscreen target and writes |
| 2 | //! `render-probe.png`. |
| 3 | #![allow(deprecated)] // OpenGL is the only GPU API 10.6 has. |
| 4 | mod context; |
| 5 | mod scene; |
| 6 | |
| 7 | fn main() { |
| 8 | objc2::rc::autoreleasepool(|_| run()); |
| 9 | } |
| 10 | |
| 11 | fn run() { |
| 12 | let _context = context::current(); |
| 13 | let mut renderer = draw::Renderer::opengl().unwrap_or_else(|error| panic!("{error}")); |
| 14 | let target = renderer.target(scene::SIZE).unwrap(); |
| 15 | let checker = scene::checker(); |
| 16 | let primitives = scene::primitives(&checker); |
| 17 | let started = std::time::Instant::now(); |
| 18 | renderer.draw(&target, scene::SIZE, scene::CLEAR, &[scene::layer(&primitives)]).unwrap(); |
| 19 | let pixels = renderer.read_pixels(&target).unwrap(); |
| 20 | println!("drew in {:?}", started.elapsed()); |
| 21 | let file = std::fs::File::create("render-probe.png").unwrap(); |
| 22 | let mut encoder = png::Encoder::new(file, scene::SIZE[0], scene::SIZE[1]); |
| 23 | encoder.set_color(png::ColorType::Rgba); |
| 24 | encoder.write_header().unwrap().write_image_data(&pixels).unwrap(); |
| 25 | } |