mirror of
https://github.com/servo/servo.git
synced 2025-08-11 16:35:33 +01:00
gfx: Send a RenderLayer instead of a display list from layout to GFX.
This is a step on the way to window resizing.
This commit is contained in:
parent
5752ae6783
commit
0e9c278196
4 changed files with 16 additions and 12 deletions
|
@ -5,9 +5,9 @@ use js::jsapi::{JSContext, jsval, JSObject, JSBool, jsid, JSClass, JSFreeOp, JSP
|
||||||
use js::jsapi::bindgen::{JS_ValueToString, JS_GetStringCharsZAndLength, JS_ReportError,
|
use js::jsapi::bindgen::{JS_ValueToString, JS_GetStringCharsZAndLength, JS_ReportError,
|
||||||
JS_GetReservedSlot, JS_SetReservedSlot, JS_NewStringCopyN,
|
JS_GetReservedSlot, JS_SetReservedSlot, JS_NewStringCopyN,
|
||||||
JS_DefineFunctions, JS_DefineProperty, JS_GetContextPrivate};
|
JS_DefineFunctions, JS_DefineProperty, JS_GetContextPrivate};
|
||||||
|
use js::jsval::{INT_TO_JSVAL, JSVAL_TO_PRIVATE};
|
||||||
use js::jsapi::bindgen::*;
|
use js::jsapi::bindgen::*;
|
||||||
use js::glue::bindgen::*;
|
use js::glue::bindgen::*;
|
||||||
use js::jsval::{INT_TO_JSVAL, JSVAL_TO_PRIVATE};
|
|
||||||
|
|
||||||
use dom::node::{Node, NodeScope, Text, Doctype, Comment, Element};
|
use dom::node::{Node, NodeScope, Text, Doctype, Comment, Element};
|
||||||
use utils::{rust_box, squirrel_away_unique, get_compartment, domstring_to_jsval, str};
|
use utils::{rust_box, squirrel_away_unique, get_compartment, domstring_to_jsval, str};
|
||||||
|
|
|
@ -29,6 +29,7 @@ use std::cell::Cell;
|
||||||
use core::io::BytesWriter;
|
use core::io::BytesWriter;
|
||||||
use gfx::render_task::LayerBuffer;
|
use gfx::render_task::LayerBuffer;
|
||||||
use geom::size::Size2D;
|
use geom::size::Size2D;
|
||||||
|
use gfx::render_layers::RenderLayer;
|
||||||
|
|
||||||
pub type PngCompositor = Chan<Msg>;
|
pub type PngCompositor = Chan<Msg>;
|
||||||
|
|
||||||
|
@ -92,6 +93,7 @@ fn sanity_check() {
|
||||||
let renderer = RenderTask(compositor);
|
let renderer = RenderTask(compositor);
|
||||||
|
|
||||||
let dlist : DisplayList = DVec();
|
let dlist : DisplayList = DVec();
|
||||||
|
let render_layer = RenderLayer { display_list: move dlist, size: Size2D(800u, 600u) };
|
||||||
renderer.send(RenderMsg(dlist));
|
renderer.send(RenderMsg(dlist));
|
||||||
let (exit_chan, exit_response_from_engine) = pipes::stream();
|
let (exit_chan, exit_response_from_engine) = pipes::stream();
|
||||||
renderer.send(render_task::ExitMsg(exit_chan));
|
renderer.send(render_task::ExitMsg(exit_chan));
|
||||||
|
|
|
@ -30,7 +30,7 @@ use text::font_cache::FontCache;
|
||||||
pub type Renderer = comm::Chan<Msg>;
|
pub type Renderer = comm::Chan<Msg>;
|
||||||
|
|
||||||
pub enum Msg {
|
pub enum Msg {
|
||||||
RenderMsg(dl::DisplayList),
|
RenderMsg(RenderLayer),
|
||||||
ExitMsg(pipes::Chan<()>)
|
ExitMsg(pipes::Chan<()>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ pub fn RenderTask<C: Compositor Send>(compositor: C) -> RenderTask {
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match po.recv() {
|
match po.recv() {
|
||||||
RenderMsg(move display_list) => {
|
RenderMsg(move render_layer) => {
|
||||||
#debug("renderer: got render request");
|
#debug("renderer: got render request");
|
||||||
let layer_buffer_cell = Cell(layer_buffer_port.recv());
|
let layer_buffer_cell = Cell(layer_buffer_port.recv());
|
||||||
|
|
||||||
|
@ -68,18 +68,13 @@ pub fn RenderTask<C: Compositor Send>(compositor: C) -> RenderTask {
|
||||||
let layer_buffer_channel = Cell(move layer_buffer_channel);
|
let layer_buffer_channel = Cell(move layer_buffer_channel);
|
||||||
layer_buffer_port = new_layer_buffer_port;
|
layer_buffer_port = new_layer_buffer_port;
|
||||||
|
|
||||||
let display_list = Cell(move display_list);
|
let render_layer = Cell(move render_layer);
|
||||||
|
|
||||||
#debug("renderer: rendering");
|
#debug("renderer: rendering");
|
||||||
|
|
||||||
do util::time::time(~"rendering") {
|
do util::time::time(~"rendering") {
|
||||||
let layer_buffer = layer_buffer_cell.take();
|
let layer_buffer = layer_buffer_cell.take();
|
||||||
let display_list = move display_list.take();
|
let render_layer = move render_layer.take();
|
||||||
|
|
||||||
let render_layer = RenderLayer {
|
|
||||||
display_list: move display_list,
|
|
||||||
size: Size2D(800u, 600u)
|
|
||||||
};
|
|
||||||
|
|
||||||
let layer_buffer =
|
let layer_buffer =
|
||||||
for render_layers::render_layers(&render_layer, move layer_buffer)
|
for render_layers::render_layers(&render_layer, move layer_buffer)
|
||||||
|
|
|
@ -16,6 +16,7 @@ use geom::point::Point2D;
|
||||||
use geom::rect::Rect;
|
use geom::rect::Rect;
|
||||||
use geom::size::Size2D;
|
use geom::size::Size2D;
|
||||||
use gfx::render_task;
|
use gfx::render_task;
|
||||||
|
use gfx::render_layers::RenderLayer;
|
||||||
use layout::box::RenderBox;
|
use layout::box::RenderBox;
|
||||||
use layout::box_builder::LayoutTreeBuilder;
|
use layout::box_builder::LayoutTreeBuilder;
|
||||||
use layout::context::LayoutContext;
|
use layout::context::LayoutContext;
|
||||||
|
@ -166,10 +167,16 @@ impl Layout {
|
||||||
let builder = dl::DisplayListBuilder {
|
let builder = dl::DisplayListBuilder {
|
||||||
ctx: &layout_ctx,
|
ctx: &layout_ctx,
|
||||||
};
|
};
|
||||||
|
let render_layer = RenderLayer {
|
||||||
|
display_list: move dlist,
|
||||||
|
size: Size2D(800u, 600u)
|
||||||
|
};
|
||||||
|
|
||||||
// TODO: set options on the builder before building
|
// TODO: set options on the builder before building
|
||||||
// TODO: be smarter about what needs painting
|
// TODO: be smarter about what needs painting
|
||||||
layout_root.build_display_list(&builder, © layout_root.d().position, &dlist);
|
layout_root.build_display_list(&builder, © layout_root.d().position,
|
||||||
self.render_task.send(render_task::RenderMsg(dlist));
|
&render_layer.display_list);
|
||||||
|
self.render_task.send(render_task::RenderMsg(move render_layer));
|
||||||
} // time(layout)
|
} // time(layout)
|
||||||
} // BuildMsg
|
} // BuildMsg
|
||||||
} // match
|
} // match
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue