diff options
author | Imanol Fernandez <mortimergoro@gmail.com> | 2017-11-13 14:36:56 +0100 |
---|---|---|
committer | Imanol Fernandez <mortimergoro@gmail.com> | 2017-11-13 14:58:06 +0100 |
commit | c22674481b04a017576174376b4258edde1c4127 (patch) | |
tree | 0b145e3fd8bb0b0c6c6b7c72338a4c18ff9ded7c /components/canvas/webgl_thread.rs | |
parent | bc58e18761ef687bd6c5efcda635cabdb742069a (diff) | |
download | servo-c22674481b04a017576174376b4258edde1c4127.tar.gz servo-c22674481b04a017576174376b4258edde1c4127.zip |
Set the correct Angle GLSL output when using WebGL 2
Diffstat (limited to 'components/canvas/webgl_thread.rs')
-rw-r--r-- | components/canvas/webgl_thread.rs | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs index 383873ff7dc..106027523f4 100644 --- a/components/canvas/webgl_thread.rs +++ b/components/canvas/webgl_thread.rs @@ -91,13 +91,18 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR, match msg { 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)| + result_sender.send(result.map(|(id, limits, share_mode)| { + let ctx = Self::make_current_if_needed(id, &self.contexts, &mut self.bound_context_id) + .expect("WebGLContext not found"); + let glsl_version = Self::get_glsl_version(ctx); + WebGLCreateContextResult { sender: WebGLMsgSender::new(id, webgl_chan.clone()), - limits: limits, - share_mode: share_mode, + limits, + share_mode, + glsl_version, } - )).unwrap(); + })).unwrap(); }, WebGLMsg::ResizeContext(ctx_id, size, sender) => { self.resize_webgl_context(ctx_id, size, sender); @@ -519,6 +524,20 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR, byte_swap(&mut pixels); pixels } + + /// Gets the GLSL Version supported by a GLContext. + fn get_glsl_version(context: &GLContextWrapper) -> WebGLSLVersion { + let version = context.gl().get_string(gl::SHADING_LANGUAGE_VERSION); + // Fomat used by SHADING_LANGUAGE_VERSION query : major.minor[.release] [vendor info] + let mut values = version.split(&['.', ' '][..]); + let major = values.next().and_then(|v| v.parse::<u32>().ok()).unwrap_or(1); + let minor = values.next().and_then(|v| v.parse::<u32>().ok()).unwrap_or(20); + + WebGLSLVersion { + major, + minor, + } + } } impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> Drop for WebGLThread<VR, OB> { |