mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Add WebRender integration to Servo.
WebRender is an experimental GPU accelerated rendering backend for Servo. The WebRender backend can be specified by running Servo with the -w option (otherwise the default rendering backend will be used). WebRender has many bugs, and missing features - but it is usable to browse most websites - please report any WebRender specific rendering bugs you encounter!
This commit is contained in:
parent
f7f0eea470
commit
c0531c312f
75 changed files with 2869 additions and 888 deletions
|
@ -2,7 +2,7 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use canvas_traits::{CanvasMsg, FromLayoutMsg};
|
||||
use canvas_traits::{CanvasMsg, FromLayoutMsg, CanvasData};
|
||||
use dom::attr::Attr;
|
||||
use dom::attr::AttrValue;
|
||||
use dom::bindings::cell::DOMRefCell;
|
||||
|
@ -202,10 +202,17 @@ impl HTMLCanvasElement {
|
|||
|
||||
let data = if let Some(renderer) = self.ipc_renderer() {
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
let msg = CanvasMsg::FromLayout(FromLayoutMsg::SendPixelContents(sender));
|
||||
let msg = CanvasMsg::FromLayout(FromLayoutMsg::SendData(sender));
|
||||
renderer.send(msg).unwrap();
|
||||
|
||||
receiver.recv().unwrap().to_vec()
|
||||
match receiver.recv().unwrap() {
|
||||
CanvasData::Pixels(pixel_data)
|
||||
=> pixel_data.image_data.to_vec(),
|
||||
CanvasData::WebGL(_)
|
||||
// TODO(ecoal95): Not sure if WebGL canvas is required for 2d spec,
|
||||
// but I think it's not.
|
||||
=> return None,
|
||||
}
|
||||
} else {
|
||||
repeat(0xffu8).take((size.height as usize) * (size.width as usize) * 4).collect()
|
||||
};
|
||||
|
|
|
@ -72,6 +72,7 @@ pub struct WebGLRenderingContext {
|
|||
#[ignore_heap_size_of = "Defined in ipc-channel"]
|
||||
ipc_renderer: IpcSender<CanvasMsg>,
|
||||
canvas: JS<HTMLCanvasElement>,
|
||||
#[ignore_heap_size_of = "Defined in webrender_traits"]
|
||||
last_error: Cell<Option<WebGLError>>,
|
||||
texture_unpacking_settings: Cell<TextureUnpacking>,
|
||||
bound_texture_2d: MutNullableHeap<JS<WebGLTexture>>,
|
||||
|
@ -462,6 +463,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
|||
Some(data) => data,
|
||||
None => return self.webgl_error(InvalidValue),
|
||||
};
|
||||
|
||||
if offset < 0 {
|
||||
return self.webgl_error(InvalidValue);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue