Correct draw order for frame tree layers

This commit is contained in:
eschweic 2013-08-20 14:51:39 -07:00
parent 48f9e9aaa5
commit a07ff5d1b5
4 changed files with 30 additions and 30 deletions

View file

@ -109,7 +109,7 @@ impl CompositorLayer {
} }
let child_layer = ~CompositorLayer::from_frame_tree(frame_tree, tile_size, max_mem); let child_layer = ~CompositorLayer::from_frame_tree(frame_tree, tile_size, max_mem);
container.add_child(ContainerLayerKind(child_layer.root_layer)); container.add_child_start(ContainerLayerKind(child_layer.root_layer));
CompositorLayerChild { CompositorLayerChild {
child: child_layer, child: child_layer,
@ -342,25 +342,9 @@ impl CompositorLayer {
self.root_layer.remove_child(trash); self.root_layer.remove_child(trash);
} }
// Add child layers.
for child in self.children.mut_iter().filter(|x| !x.child.hidden) {
current_layer_child = match current_layer_child {
None => {
child.container.common.parent = None;
child.container.common.prev_sibling = None;
child.container.common.next_sibling = None;
self.root_layer.add_child(ContainerLayerKind(child.container));
None
}
Some(_) => {
fail!("CompositorLayer: Layer tree failed to delete");
}
};
}
// Add new tiles. // Add new tiles.
let quadtree = match self.quadtree { let quadtree = match self.quadtree {
NoTree(_, _) => fail!("CompositorLayer: cannot get buffer request for %?, NoTree(_, _) => fail!("CompositorLayer: cannot get build layer tree for %?,
no quadtree initialized", self.pipeline.id), no quadtree initialized", self.pipeline.id),
Tree(ref mut quadtree) => quadtree, Tree(ref mut quadtree) => quadtree,
}; };
@ -376,7 +360,7 @@ impl CompositorLayer {
debug!("osmain: adding new texture layer"); debug!("osmain: adding new texture layer");
texture_layer = @mut TextureLayer::new(@buffer.draw_target.clone() as @TextureManager, texture_layer = @mut TextureLayer::new(@buffer.draw_target.clone() as @TextureManager,
buffer.screen_pos.size); buffer.screen_pos.size);
self.root_layer.add_child(TextureLayerKind(texture_layer)); self.root_layer.add_child_end(TextureLayerKind(texture_layer));
None None
} }
Some(TextureLayerKind(existing_texture_layer)) => { Some(TextureLayerKind(existing_texture_layer)) => {
@ -399,6 +383,23 @@ impl CompositorLayer {
texture_layer.common.set_transform(transform); texture_layer.common.set_transform(transform);
} }
// Add child layers.
for child in self.children.mut_iter().filter(|x| !x.child.hidden) {
current_layer_child = match current_layer_child {
None => {
child.container.common.parent = None;
child.container.common.prev_sibling = None;
child.container.common.next_sibling = None;
self.root_layer.add_child_end(ContainerLayerKind(child.container));
None
}
Some(_) => {
fail!("CompositorLayer: Layer tree failed to delete");
}
};
}
} }
// Add LayerBuffers to the specified layer. Returns false if the layer is not found. // Add LayerBuffers to the specified layer. Returns false if the layer is not found.
@ -472,7 +473,7 @@ impl CompositorLayer {
clipping_rect.origin.y, clipping_rect.origin.y,
0.0)); 0.0));
let child = ~CompositorLayer::new(pipeline, page_size, tile_size, max_mem); let child = ~CompositorLayer::new(pipeline, page_size, tile_size, max_mem);
container.add_child(ContainerLayerKind(child.root_layer)); container.add_child_start(ContainerLayerKind(child.root_layer));
self.children.push(CompositorLayerChild { self.children.push(CompositorLayerChild {
child: child, child: child,
container: container, container: container,

View file

@ -263,7 +263,7 @@ impl CompositorTask {
let layer = CompositorLayer::from_frame_tree(frame_tree, let layer = CompositorLayer::from_frame_tree(frame_tree,
self.opts.tile_size, self.opts.tile_size,
Some(10000000u)); Some(10000000u));
root_layer.add_child(ContainerLayerKind(layer.root_layer)); root_layer.add_child_start(ContainerLayerKind(layer.root_layer));
compositor_layer = Some(layer); compositor_layer = Some(layer);
constellation_chan = Some(new_constellation_chan); constellation_chan = Some(new_constellation_chan);
@ -294,7 +294,7 @@ impl CompositorTask {
Some(old_layer) => root_layer.remove_child(old_layer), Some(old_layer) => root_layer.remove_child(old_layer),
None => {} None => {}
} }
root_layer.add_child(ContainerLayerKind(new_layer.root_layer)); root_layer.add_child_start(ContainerLayerKind(new_layer.root_layer));
compositor_layer = Some(new_layer); compositor_layer = Some(new_layer);
ask_for_tiles(); ask_for_tiles();

View file

@ -340,10 +340,15 @@ impl<T: Tile> QuadtreeNode<T> {
} }
} }
/// Get all tiles in the tree, parents last. /// Get all tiles in the tree, parents first.
fn get_all_tiles<'r>(&'r self) -> ~[&'r T] { fn get_all_tiles<'r>(&'r self) -> ~[&'r T] {
let mut ret = ~[]; let mut ret = ~[];
match self.tile {
Some(ref tile) => ret = ret + ~[tile],
None => {}
}
for quad in self.quadrants.iter() { for quad in self.quadrants.iter() {
match *quad { match *quad {
Some(ref child) => ret = ret + child.get_all_tiles(), Some(ref child) => ret = ret + child.get_all_tiles(),
@ -351,12 +356,6 @@ impl<T: Tile> QuadtreeNode<T> {
} }
} }
match self.tile {
Some(ref tile) => ret = ret + ~[tile],
None => {}
}
return ret; return ret;
} }

@ -1 +1 @@
Subproject commit 1383a7610349c9120013d9930a81cc0a659804ae Subproject commit 8e469443a9fec36de8eec09036f8051723ee59bc