diff options
author | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2015-09-19 17:32:50 +0200 |
---|---|---|
committer | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2015-09-25 16:20:31 +0200 |
commit | e2b7a01055b67eed1711b8e2946fadaffbe58542 (patch) | |
tree | 49491bf1874bd8d1d715c0d8b250a3b4c1ce8b23 /components/script/dom/webglrenderingcontext.rs | |
parent | a58e731abdba7220a9c13e10c9cca47667a73271 (diff) | |
download | servo-e2b7a01055b67eed1711b8e2946fadaffbe58542.tar.gz servo-e2b7a01055b67eed1711b8e2946fadaffbe58542.zip |
webgl: texImage2D with a canvas argument
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 93398ffee56..cd71f64d077 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -124,6 +124,27 @@ impl WebGLRenderingContext { self.ipc_renderer.send(CanvasMsg::Common(CanvasCommonMsg::Recreate(size))).unwrap(); } + pub fn ipc_renderer(&self) -> IpcSender<CanvasMsg> { + self.ipc_renderer.clone() + } + + pub fn webgl_error(&self, err: WebGLError) { + // If an error has been detected no further errors must be + // recorded until `getError` has been called + if self.last_error.get().is_none() { + self.last_error.set(Some(err)); + } + } + + pub fn bound_texture_for(&self, target: u32) -> Option<JS<WebGLTexture>> { + match target { + constants::TEXTURE_2D => self.bound_texture_2d.get(), + constants::TEXTURE_CUBE_MAP => self.bound_texture_cube_map.get(), + + _ => unreachable!(), + } + } + fn mark_as_dirty(&self) { let canvas = self.canvas.root(); let node = NodeCast::from_ref(canvas.r()); @@ -845,8 +866,15 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { }, // TODO(ecoal95): Getting canvas data is implemented in CanvasRenderingContext2D, but // we need to refactor it moving it to `HTMLCanvasElement` and supporting WebGLContext - ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement::eHTMLCanvasElement(_rooted_canvas) - => unimplemented!(), + ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement::eHTMLCanvasElement(canvas) => { + let canvas = canvas.r(); + if let Some((mut data, size)) = canvas.fetch_all_data() { + byte_swap(&mut data); + (data, size) + } else { + return + } + }, ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement::eHTMLVideoElement(_rooted_video) => unimplemented!(), }; @@ -898,26 +926,6 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } } - -impl WebGLRenderingContext { - pub fn webgl_error(&self, err: WebGLError) { - // If an error has been detected no further errors must be - // recorded until `getError` has been called - if self.last_error.get().is_none() { - self.last_error.set(Some(err)); - } - } - - pub fn bound_texture_for(&self, target: u32) -> Option<JS<WebGLTexture>> { - match target { - constants::TEXTURE_2D => self.bound_texture_2d.get(), - constants::TEXTURE_CUBE_MAP => self.bound_texture_cube_map.get(), - - _ => unreachable!(), - } - } -} - pub trait LayoutCanvasWebGLRenderingContextHelpers { #[allow(unsafe_code)] unsafe fn get_renderer_id(&self) -> usize; |