Remove PngCompositor. Will need a different solution

This commit is contained in:
Brian Anderson 2012-10-29 14:25:35 -07:00
parent ddd3065c0b
commit 21cd748269
3 changed files with 5 additions and 108 deletions

View file

@ -1,107 +0,0 @@
/*!
A graphics compositor that renders to PNG format buffers
Each time the renderer renders a frame the compositor will output a
`~[u8]` containing the frame in PNG format.
*/
use azure::azure_hl::DrawTarget;
use azure_bg = azure::bindgen;
use azure_bg::{AzCreateDrawTargetForCairoSurface, AzReleaseDrawTarget};
use cairo::cairo_hl::ImageSurface;
use cairo::{CAIRO_FORMAT_ARGB32, cairo_surface_t, cairo_status_t, CAIRO_STATUS_SUCCESS};
use cairo_bg = cairo::bindgen;
use cairo_bg::{cairo_image_surface_create, cairo_surface_destroy};
use cairo_bg::{cairo_surface_write_to_png_stream};
use cast::reinterpret_cast;
use comm::{Chan, Port};
use compositor::Compositor;
use core::io::BytesWriter;
use display_list::DisplayList;
use dom::event::Event;
use dvec::DVec;
use geom::point::Point2D;
use geom::rect::Rect;
use geom::size::Size2D;
use gfx::compositor::{LayerBuffer, LayerBufferSet};
use gfx::render_layers::RenderLayer;
use libc::{c_int, c_uint, c_void, c_uchar};
use ptr::addr_of;
use render_task::{RenderTask, RenderMsg};
use std::cell::Cell;
use task::spawn_listener;
pub type PngCompositor = Chan<Msg>;
pub enum Msg {
BeginDrawing(pipes::Chan<LayerBufferSet>),
Draw(pipes::Chan<LayerBufferSet>, LayerBufferSet),
Exit
}
impl Chan<Msg> : Compositor {
fn begin_drawing(next_dt: pipes::Chan<LayerBufferSet>) {
self.send(BeginDrawing(move next_dt))
}
fn draw(next_dt: pipes::Chan<LayerBufferSet>, draw_me: LayerBufferSet) {
self.send(Draw(move next_dt, move draw_me))
}
}
pub fn PngCompositor(output: Chan<~[u8]>) -> PngCompositor {
do spawn_listener |po: Port<Msg>| {
let cairo_surface = ImageSurface(CAIRO_FORMAT_ARGB32, 800, 600);
let draw_target = DrawTarget(&cairo_surface);
let layer_buffer = LayerBuffer {
cairo_surface: cairo_surface.clone(),
draw_target: move draw_target,
rect: Rect(Point2D(0u, 0u), Size2D(800u, 600u)),
stride: 800
};
let layer_buffer_set = LayerBufferSet { buffers: ~[ move layer_buffer ] };
let layer_buffer_set = Cell(move layer_buffer_set);
loop {
match po.recv() {
BeginDrawing(sender) => {
debug!("png_compositor: begin_drawing");
sender.send(layer_buffer_set.take());
}
Draw(move sender, move layer_buffer_set) => {
debug!("png_compositor: draw");
do_draw(move sender, move layer_buffer_set, output, &cairo_surface);
}
Exit => break
}
}
}
}
fn do_draw(sender: pipes::Chan<LayerBufferSet>,
layer_buffer_set: LayerBufferSet,
output: Chan<~[u8]>,
cairo_surface: &ImageSurface) {
let buffer = BytesWriter();
cairo_surface.write_to_png_stream(&buffer);
output.send(buffer.bytes.get());
// Send the next draw target to the renderer
sender.send(move layer_buffer_set);
}
#[test]
fn sanity_check() {
do listen |self_channel| {
let compositor = PngCompositor(self_channel);
let renderer = RenderTask(compositor);
let dlist : DisplayList = DVec();
let render_layer = RenderLayer { display_list: move dlist, size: Size2D(800u, 600u) };
renderer.send(RenderMsg(move render_layer));
let (exit_chan, exit_response_from_engine) = pipes::stream();
renderer.send(render_task::ExitMsg(move exit_chan));
exit_response_from_engine.recv();
compositor.send(Exit)
}
}

View file

@ -77,7 +77,6 @@ pub mod gfx {
pub mod surface;
pub mod render_task;
pub mod compositor;
pub mod png_compositor;
pub mod display_list;
pub mod render_layers;
priv mod render_context;

View file

@ -69,6 +69,11 @@ fn run_pipeline_screen(urls: &[~str]) {
osmain.send(osmain::Exit);
}
fn run_pipeline_png(_url: ~str, _outfile: &str) {
fail ~"PNG compositor is broken";
}
#[cfg(broken)]
fn run_pipeline_png(url: ~str, outfile: &str) {
// Use a PNG encoder as the graphics compositor
use gfx::png_compositor;