gfx: Allow tile size to be set on the command line

This commit is contained in:
Patrick Walton 2012-11-15 20:47:27 -08:00
parent 4fd486970b
commit 54a71a7d0c
2 changed files with 17 additions and 9 deletions

View file

@ -9,6 +9,7 @@ pub struct Opts {
render_mode: RenderMode,
render_backend: BackendType,
n_render_threads: uint,
tile_size: uint,
}
pub enum RenderMode {
@ -23,9 +24,10 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts {
let args = args.tail();
let opts = ~[
getopts::optopt(~"o"),
getopts::optopt(~"r"),
getopts::optopt(~"t"),
getopts::optopt(~"o"), // output file
getopts::optopt(~"r"), // rendering backend
getopts::optopt(~"s"), // size of tiles
getopts::optopt(~"t"), // threads to render with
];
let opt_match = match getopts::getopts(args, opts) {
@ -63,6 +65,11 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts {
None => CairoBackend
};
let tile_size: uint = match getopts::opt_maybe_str(copy opt_match, ~"s") {
Some(move tile_size_str) => from_str::from_str(tile_size_str).get(),
None => 512,
};
let n_render_threads: uint = match getopts::opt_maybe_str(move opt_match, ~"t") {
Some(move n_render_threads_str) => from_str::from_str(n_render_threads_str).get(),
None => 1, // FIXME: Number of cores.
@ -73,5 +80,6 @@ pub fn from_cmdline_args(args: &[~str]) -> Opts {
render_mode: move render_mode,
render_backend: move render_backend,
n_render_threads: n_render_threads,
tile_size: tile_size,
}
}

View file

@ -14,8 +14,6 @@ use geom::size::Size2D;
use std::arc::ARC;
use std::arc;
const TILE_SIZE: uint = 512;
pub struct RenderLayer {
display_list: DisplayList,
size: Size2D<uint>
@ -33,6 +31,8 @@ pub fn render_layers(layer_ref: *RenderLayer,
buffer_set: LayerBufferSet,
opts: &Opts,
f: RenderFn) -> LayerBufferSet {
let tile_size = opts.tile_size;
let mut buffers = match move buffer_set { LayerBufferSet { buffers: move b } => move b };
// FIXME: Try not to create a new array here.
@ -46,8 +46,8 @@ pub fn render_layers(layer_ref: *RenderLayer,
let mut x = 0;
while x < layer.size.width {
// Figure out the dimension of this tile.
let right = uint::min(x + TILE_SIZE, layer.size.width);
let bottom = uint::min(y + TILE_SIZE, layer.size.height);
let right = uint::min(x + tile_size, layer.size.width);
let bottom = uint::min(y + tile_size, layer.size.height);
let width = right - x;
let height = bottom - y;
@ -119,9 +119,9 @@ pub fn render_layers(layer_ref: *RenderLayer,
// Enqueue the port.
new_buffer_ports.push(move new_buffer_port);
x += TILE_SIZE;
x += tile_size;
}
y += TILE_SIZE;
y += tile_size;
}
}