diff options
Diffstat (limited to 'components/canvas')
-rw-r--r-- | components/canvas/gl_context.rs | 19 | ||||
-rw-r--r-- | components/canvas/webgl_thread.rs | 11 |
2 files changed, 20 insertions, 10 deletions
diff --git a/components/canvas/gl_context.rs b/components/canvas/gl_context.rs index 66fd3001277..018300129b9 100644 --- a/components/canvas/gl_context.rs +++ b/components/canvas/gl_context.rs @@ -4,14 +4,14 @@ use super::webgl_thread::{GLState, WebGLImpl}; use canvas_traits::webgl::{ - GLContextAttributes, GLLimits, WebGLCommand, WebGLCommandBacktrace, WebGLVersion, + GLContextAttributes, GLFormats, GLLimits, WebGLCommand, WebGLCommandBacktrace, WebGLVersion, }; use euclid::default::Size2D; use offscreen_gl_context::{ ColorAttachmentType, DrawBuffer, GLContext, GLContextAttributes as RawGLContextAttributes, GLContextDispatcher, }; -use offscreen_gl_context::{GLLimits as RawGLLimits, GLVersion}; +use offscreen_gl_context::{GLFormats as RawGLFormats, GLLimits as RawGLLimits, GLVersion}; use offscreen_gl_context::{NativeGLContext, NativeGLContextHandle, NativeGLContextMethods}; use offscreen_gl_context::{OSMesaContext, OSMesaContextHandle}; use sparkle::gl; @@ -179,7 +179,7 @@ impl GLContextWrapper { } } - pub fn get_info(&self) -> (Size2D<i32>, u32, GLLimits) { + pub fn get_info(&self) -> (Size2D<i32>, u32, GLLimits, GLFormats) { match *self { GLContextWrapper::Native(ref ctx) => { let (real_size, texture_id) = { @@ -191,8 +191,9 @@ impl GLContextWrapper { }; let limits = ctx.borrow_limits().clone(); + let formats = map_formats(ctx.borrow_formats()); - (real_size, texture_id, map_limits(limits)) + (real_size, texture_id, map_limits(limits), formats) }, GLContextWrapper::OSMesa(ref ctx) => { let (real_size, texture_id) = { @@ -204,8 +205,9 @@ impl GLContextWrapper { }; let limits = ctx.borrow_limits().clone(); + let formats = map_formats(ctx.borrow_formats()); - (real_size, texture_id, map_limits(limits)) + (real_size, texture_id, map_limits(limits), formats) }, } } @@ -260,3 +262,10 @@ pub fn map_attrs_to_script_attrs(attrs: RawGLContextAttributes) -> GLContextAttr preserve_drawing_buffer: attrs.preserve_drawing_buffer, } } + +fn map_formats(formats: &RawGLFormats) -> GLFormats { + GLFormats { + texture_format: formats.texture, + texture_type: formats.texture_type, + } +} diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs index 612117c7095..c9007515ae4 100644 --- a/components/canvas/webgl_thread.rs +++ b/components/canvas/webgl_thread.rs @@ -238,7 +238,7 @@ impl WebGLThread { WebGLMsg::CreateContext(version, size, attributes, result_sender) => { let result = self.create_webgl_context(version, size, attributes); result_sender - .send(result.map(|(id, limits, share_mode)| { + .send(result.map(|(id, limits, share_mode, framebuffer_format)| { let data = Self::make_current_if_needed( id, &self.contexts, @@ -276,6 +276,7 @@ impl WebGLThread { share_mode, glsl_version, api_type, + framebuffer_format, } })) .unwrap(); @@ -406,7 +407,7 @@ impl WebGLThread { version: WebGLVersion, size: Size2D<u32>, attributes: GLContextAttributes, - ) -> Result<(WebGLContextId, GLLimits, WebGLContextShareMode), String> { + ) -> Result<(WebGLContextId, GLLimits, WebGLContextShareMode, GLFormats), String> { // Creating a new GLContext may make the current bound context_id dirty. // Clear it to ensure that make_current() is called in subsequent commands. self.bound_context_id = None; @@ -434,7 +435,7 @@ impl WebGLThread { .next_id(WebrenderImageHandlerType::WebGL) .0 as usize, ); - let (size, texture_id, limits) = ctx.get_info(); + let (size, texture_id, limits, framebuffer_formats) = ctx.get_info(); let use_apple_vertex_arrays = needs_apple_vertex_arrays(ctx.gl(), version); self.contexts.insert( id, @@ -458,7 +459,7 @@ impl WebGLThread { }, ); - Ok((id, limits, share_mode)) + Ok((id, limits, share_mode, framebuffer_formats)) } /// Resizes a WebGLContext @@ -476,7 +477,7 @@ impl WebGLThread { .expect("Missing WebGL context!"); match data.ctx.resize(size) { Ok(old_draw_buffer) => { - let (real_size, texture_id, _) = data.ctx.get_info(); + let (real_size, texture_id, _, _) = data.ctx.get_info(); let info = self.cached_context_info.get_mut(&context_id).unwrap(); if let ContextRenderState::Locked(ref mut in_use) = info.render_state { // If there's already an outdated draw buffer present, we can ignore |