diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-08-25 09:23:00 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-08-25 09:23:00 -0600 |
commit | a109a333f1f95d4fc677b29e3613b2615514c080 (patch) | |
tree | 3509f4dc996823641e384972baf7a22aa5ad1ad9 /components/script/dom/canvasrenderingcontext2d.rs | |
parent | 4d0b4a7b8cda681d1cd6b6cd8e690c0793532d0b (diff) | |
parent | 6341c77700fa5f914c32c6153e9c532bc69474fd (diff) | |
download | servo-a109a333f1f95d4fc677b29e3613b2615514c080.tar.gz servo-a109a333f1f95d4fc677b29e3613b2615514c080.zip |
Auto merge of #6770 - ecoal95:webgl-again, r=jdm
Add multiple WebGL calls and improve error detection
Since it probably won't merge until multiprocess lands, I plan to use this PR to keep improving WebGL support until it can land.
Main TODOs are integration of tests, since it seems https://github.com/KhronosGroup/WebGL/issues/1105 is going nowhere, adding missing calls and proper painting via native surfaces instead of readback.
I can't resolve conflicts right now because of time but I will do it soon.
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6770)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/canvasrenderingcontext2d.rs')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 9e2ec6d1446..03f4014ee7a 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -17,11 +17,16 @@ use dom::bindings::num::Finite; use dom::bindings::utils::{Reflector, reflect_dom_object}; use dom::canvasgradient::{CanvasGradient, CanvasGradientStyle, ToFillOrStrokeStyle}; use dom::canvaspattern::CanvasPattern; +use dom::htmlcanvaselement::utils as canvas_utils; use dom::htmlcanvaselement::{HTMLCanvasElement, HTMLCanvasElementHelpers}; use dom::htmlimageelement::{HTMLImageElement, HTMLImageElementHelpers}; use dom::imagedata::{ImageData, ImageDataHelpers}; use dom::node::{window_from_node, NodeHelpers, NodeDamage}; +use msg::constellation_msg::Msg as ConstellationMsg; +use net_traits::image::base::PixelFormat; +use net_traits::image_cache_task::ImageResponse; + use cssparser::Color as CSSColor; use cssparser::{Parser, RGBA}; use euclid::matrix2d::Matrix2D; @@ -34,10 +39,6 @@ use canvas_traits::{CanvasMsg, Canvas2dMsg, CanvasCommonMsg}; use canvas_traits::{FillOrStrokeStyle, LinearGradientStyle, RadialGradientStyle, RepetitionStyle}; use canvas_traits::{LineCapStyle, LineJoinStyle, CompositionOrBlending}; -use msg::constellation_msg::Msg as ConstellationMsg; -use net_traits::image::base::PixelFormat; -use net_traits::image_cache_task::{ImageCacheChan, ImageResponse}; - use ipc_channel::ipc::{self, IpcSender}; use num::{Float, ToPrimitive}; use std::borrow::ToOwned; @@ -201,7 +202,7 @@ impl CanvasRenderingContext2D { Size2D::new(source_rect_clipped.size.width, source_rect_clipped.size.height)); - return (source_rect, dest_rect) + (source_rect, dest_rect) } // @@ -364,9 +365,10 @@ impl CanvasRenderingContext2D { PixelFormat::KA8 => panic!("KA8 color type not supported"), }; - return Some((image_data, image_size)); + Some((image_data, image_size)) } + // TODO(ecoal95): Move this to `HTMLCanvasElement`, and support WebGL contexts fn fetch_canvas_data(&self, canvas_element: &HTMLCanvasElement, source_rect: Rect<f64>) @@ -385,18 +387,14 @@ impl CanvasRenderingContext2D { renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::GetImageData(source_rect.to_i32(), image_size, sender))).unwrap(); - return Some((receiver.recv().unwrap(), image_size)); + Some((receiver.recv().unwrap(), image_size)) } + #[inline] fn request_image_from_cache(&self, url: Url) -> ImageResponse { let canvas = self.canvas.root(); let window = window_from_node(canvas.r()); - let window = window.r(); - let image_cache = window.image_cache_task(); - let (response_chan, response_port) = ipc::channel().unwrap(); - image_cache.request_image(url, ImageCacheChan(response_chan), None); - let result = response_port.recv().unwrap(); - result.image_response + canvas_utils::request_image_from_cache(window.r(), url) } fn create_drawable_rect(&self, x: f64, y: f64, w: f64, h: f64) -> Option<Rect<f32>> { |