aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglshader.rs
diff options
context:
space:
mode:
authorImanol Fernandez <mortimergoro@gmail.com>2017-10-26 18:04:13 +0200
committerImanol Fernandez <mortimergoro@gmail.com>2017-10-27 12:53:11 +0200
commitddd6c86e992a45d6490b8ec6eb2bf7b3ecce9a03 (patch)
treee037a6f8ff7948f54d9db71224d45d1ea85757e5 /components/script/dom/webglshader.rs
parentfd4843a40ef7c000bbd747208fcf61267dbf157f (diff)
downloadservo-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.rs19
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,
- &params).unwrap();
+ let validator = match version {
+ WebGLVersion::WebGL1 => {
+ ShaderValidator::for_webgl(self.gl_type,
+ SHADER_OUTPUT_FORMAT,
+ &params).unwrap()
+ },
+ WebGLVersion::WebGL2 => {
+ ShaderValidator::for_webgl2(self.gl_type,
+ SHADER_OUTPUT_FORMAT,
+ &params).unwrap()
+ },
+ };
+
match validator.compile_and_translate(&[source]) {
Ok(translated_source) => {
debug!("Shader translated: {}", translated_source);