diff options
author | Imanol Fernandez <mortimergoro@gmail.com> | 2017-04-20 14:55:43 +0200 |
---|---|---|
committer | Imanol Fernandez <mortimergoro@gmail.com> | 2017-04-21 20:23:55 +0200 |
commit | 6b0c898e1a2cde3d47ca6593b8250b765cc06771 (patch) | |
tree | edeb0a8f7c2373abce26c334bdb67f8537b13935 /components/script/dom | |
parent | 7f825d2119a480a64b103e1d60a2d469af98d3de (diff) | |
download | servo-6b0c898e1a2cde3d47ca6593b8250b765cc06771.tar.gz servo-6b0c898e1a2cde3d47ca6593b8250b765cc06771.zip |
Fix highp precision in shaders & Implement WebGL::GetShaderPrecisionFormat
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 22 | ||||
-rw-r--r-- | components/script/dom/webglshader.rs | 4 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLRenderingContext.webidl | 2 |
3 files changed, 26 insertions, 2 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 8d99e1303d0..34f5b368a42 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -31,6 +31,7 @@ use dom::webglframebuffer::WebGLFramebuffer; use dom::webglprogram::WebGLProgram; use dom::webglrenderbuffer::WebGLRenderbuffer; use dom::webglshader::WebGLShader; +use dom::webglshaderprecisionformat::WebGLShaderPrecisionFormat; use dom::webgltexture::{TexParameterValue, WebGLTexture}; use dom::webgluniformlocation::WebGLUniformLocation; use dom::window::Window; @@ -1902,6 +1903,27 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 + fn GetShaderPrecisionFormat(&self, + shader_type: u32, + precision_type: u32) + -> Option<Root<WebGLShaderPrecisionFormat>> { + let (sender, receiver) = webrender_traits::channel::msg_channel().unwrap(); + self.ipc_renderer.send(CanvasMsg::WebGL(WebGLCommand::GetShaderPrecisionFormat(shader_type, + precision_type, + sender))) + .unwrap(); + match receiver.recv().unwrap() { + Ok((range_min, range_max, precision)) => { + Some(WebGLShaderPrecisionFormat::new(self.global().as_window(), range_min, range_max, precision)) + }, + Err(error) => { + self.webgl_error(error); + None + } + } + } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 fn GetUniformLocation(&self, program: Option<&WebGLProgram>, diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs index 1526b5303f7..b66151bf353 100644 --- a/components/script/dom/webglshader.rs +++ b/components/script/dom/webglshader.rs @@ -106,9 +106,11 @@ impl WebGLShader { } if let Some(ref source) = *self.source.borrow() { + let mut params = BuiltInResources::default(); + params.FragmentPrecisionHigh = 1; let validator = ShaderValidator::for_webgl(self.gl_type, SHADER_OUTPUT_FORMAT, - &BuiltInResources::default()).unwrap(); + ¶ms).unwrap(); match validator.compile_and_translate(&[source]) { Ok(translated_source) => { debug!("Shader translated: {}", translated_source); diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index ef0be0f9465..0d4c14a05df 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -595,7 +595,7 @@ interface WebGLRenderingContextBase DOMString? getProgramInfoLog(WebGLProgram? program); //any getRenderbufferParameter(GLenum target, GLenum pname); any getShaderParameter(WebGLShader? shader, GLenum pname); - //WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype); + WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype); DOMString? getShaderInfoLog(WebGLShader? shader); DOMString? getShaderSource(WebGLShader? shader); |