diff options
Diffstat (limited to 'components/canvas/webgl_paint_thread.rs')
-rw-r--r-- | components/canvas/webgl_paint_thread.rs | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/components/canvas/webgl_paint_thread.rs b/components/canvas/webgl_paint_thread.rs index c88f2a378b7..30e47c06082 100644 --- a/components/canvas/webgl_paint_thread.rs +++ b/components/canvas/webgl_paint_thread.rs @@ -6,7 +6,7 @@ use canvas_traits::{CanvasCommonMsg, CanvasMsg, CanvasPixelData, CanvasData, Fro use euclid::size::Size2D; use gleam::gl; use ipc_channel::ipc::{self, IpcSender, IpcSharedMemory}; -use offscreen_gl_context::{ColorAttachmentType, GLContext, GLContextAttributes, NativeGLContext}; +use offscreen_gl_context::{ColorAttachmentType, GLContext, GLLimits, GLContextAttributes, NativeGLContext}; use std::borrow::ToOwned; use std::sync::mpsc::channel; use util::thread::spawn_named; @@ -26,20 +26,24 @@ pub struct WebGLPaintThread { impl WebGLPaintThread { fn new(size: Size2D<i32>, attrs: GLContextAttributes, - webrender_api_sender: Option<webrender_traits::RenderApiSender>) -> Result<WebGLPaintThread, String> { - let data = if let Some(sender) = webrender_api_sender { + webrender_api_sender: Option<webrender_traits::RenderApiSender>) + -> Result<(WebGLPaintThread, GLLimits), String> { + let (data, limits) = if let Some(sender) = webrender_api_sender { let webrender_api = sender.create_api(); - let (id, _) = try!(webrender_api.request_webgl_context(&size, attrs)); - WebGLPaintTaskData::WebRender(webrender_api, id) + let (id, limits) = try!(webrender_api.request_webgl_context(&size, attrs)); + (WebGLPaintTaskData::WebRender(webrender_api, id), limits) } else { let context = try!(GLContext::<NativeGLContext>::new(size, attrs, ColorAttachmentType::Texture, None)); - WebGLPaintTaskData::Servo(context) + let limits = context.borrow_limits().clone(); + (WebGLPaintTaskData::Servo(context), limits) }; - Ok(WebGLPaintThread { + let painter_object = WebGLPaintThread { size: size, data: data, - }) + }; + + Ok((painter_object, limits)) } pub fn handle_webgl_message(&self, message: webrender_traits::WebGLCommand) { @@ -59,13 +63,13 @@ impl WebGLPaintThread { pub fn start(size: Size2D<i32>, attrs: GLContextAttributes, webrender_api_sender: Option<webrender_traits::RenderApiSender>) - -> Result<IpcSender<CanvasMsg>, String> { + -> Result<(IpcSender<CanvasMsg>, GLLimits), String> { let (sender, receiver) = ipc::channel::<CanvasMsg>().unwrap(); let (result_chan, result_port) = channel(); spawn_named("WebGLThread".to_owned(), move || { let mut painter = match WebGLPaintThread::new(size, attrs, webrender_api_sender) { - Ok(thread) => { - result_chan.send(Ok(())).unwrap(); + Ok((thread, limits)) => { + result_chan.send(Ok(limits)).unwrap(); thread }, Err(e) => { @@ -95,8 +99,7 @@ impl WebGLPaintThread { } }); - try!(result_port.recv().unwrap()); - Ok(sender) + result_port.recv().unwrap().map(|limits| (sender, limits)) } fn send_data(&mut self, chan: IpcSender<CanvasData>) { |