diff options
author | Imanol Fernandez <mortimergoro@gmail.com> | 2017-10-26 18:04:13 +0200 |
---|---|---|
committer | Imanol Fernandez <mortimergoro@gmail.com> | 2017-10-27 12:53:11 +0200 |
commit | ddd6c86e992a45d6490b8ec6eb2bf7b3ecce9a03 (patch) | |
tree | e037a6f8ff7948f54d9db71224d45d1ea85757e5 /components/script/dom/webglshader.rs | |
parent | fd4843a40ef7c000bbd747208fcf61267dbf157f (diff) | |
download | servo-ddd6c86e992a45d6490b8ec6eb2bf7b3ecce9a03.tar.gz servo-ddd6c86e992a45d6490b8ec6eb2bf7b3ecce9a03.zip |
Kick off WebGL 2.0 implementation
Diffstat (limited to 'components/script/dom/webglshader.rs')
-rw-r--r-- | components/script/dom/webglshader.rs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs index 781db93c8f2..3ce6b93ad77 100644 --- a/components/script/dom/webglshader.rs +++ b/components/script/dom/webglshader.rs @@ -5,6 +5,7 @@ // https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl use angle::hl::{BuiltInResources, Output, ShaderValidator}; use canvas_traits::webgl::{webgl_channel, WebGLCommand, WebGLMsgSender, WebGLParameter, WebGLResult, WebGLShaderId}; +use canvas_traits::webgl::WebGLVersion; use dom::bindings::cell::DomRefCell; use dom::bindings::codegen::Bindings::WebGLShaderBinding; use dom::bindings::reflector::reflect_dom_object; @@ -99,7 +100,7 @@ impl WebGLShader { } /// glCompileShader - pub fn compile(&self, ext: &WebGLExtensions) { + pub fn compile(&self, version: WebGLVersion, ext: &WebGLExtensions) { if self.compilation_status.get() != ShaderCompilationStatus::NotCompiled { debug!("Compiling already compiled shader {}", self.id); } @@ -108,9 +109,19 @@ impl WebGLShader { let mut params = BuiltInResources::default(); params.FragmentPrecisionHigh = 1; params.OES_standard_derivatives = ext.is_enabled::<OESStandardDerivatives>() as i32; - let validator = ShaderValidator::for_webgl(self.gl_type, - SHADER_OUTPUT_FORMAT, - ¶ms).unwrap(); + let validator = match version { + WebGLVersion::WebGL1 => { + ShaderValidator::for_webgl(self.gl_type, + SHADER_OUTPUT_FORMAT, + ¶ms).unwrap() + }, + WebGLVersion::WebGL2 => { + ShaderValidator::for_webgl2(self.gl_type, + SHADER_OUTPUT_FORMAT, + ¶ms).unwrap() + }, + }; + match validator.compile_and_translate(&[source]) { Ok(translated_source) => { debug!("Shader translated: {}", translated_source); |