diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/webglbuffer.rs | 8 | ||||
-rw-r--r-- | components/script/dom/webglframebuffer.rs | 8 | ||||
-rw-r--r-- | components/script/dom/webglprogram.rs | 16 | ||||
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 34 | ||||
-rw-r--r-- | components/script/dom/webglshader.rs | 2 | ||||
-rw-r--r-- | components/script/dom/webgltexture.rs | 2 |
6 files changed, 47 insertions, 23 deletions
diff --git a/components/script/dom/webglbuffer.rs b/components/script/dom/webglbuffer.rs index b9941026353..bf6d8618118 100644 --- a/components/script/dom/webglbuffer.rs +++ b/components/script/dom/webglbuffer.rs @@ -5,7 +5,7 @@ // https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl use dom::bindings::codegen::Bindings::WebGLBufferBinding; use dom::bindings::global::GlobalRef; -use dom::bindings::js::{Temporary, JSRef}; +use dom::bindings::js::Root; use dom::bindings::utils::reflect_dom_object; use dom::webglobject::WebGLObject; @@ -44,9 +44,9 @@ impl WebGLBuffer { } pub trait WebGLBufferHelpers { - fn id(&self) -> u32; - fn bind(&self, target: u32); - fn delete(&self); + fn id(self) -> u32; + fn bind(self, target: u32); + fn delete(self); } impl<'a> WebGLBufferHelpers for &'a WebGLBuffer { diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs index cd23765dfff..bbf59529241 100644 --- a/components/script/dom/webglframebuffer.rs +++ b/components/script/dom/webglframebuffer.rs @@ -9,7 +9,7 @@ use dom::bindings::js::Root; use dom::bindings::utils::reflect_dom_object; use dom::webglobject::WebGLObject; -use canvas_traits::{CanvasMsg, CanvasWebGLMsg}; +use canvas_traits::{CanvasMsg, CanvasWebGLMsg, WebGLFramebufferBindingRequest}; use std::sync::mpsc::{channel, Sender}; use std::cell::Cell; @@ -49,13 +49,15 @@ pub trait WebGLFramebufferHelpers { fn delete(self); } -impl<'a> WebGLFramebufferHelpers for JSRef<'a, WebGLFramebuffer> { +impl<'a> WebGLFramebufferHelpers for &'a WebGLFramebuffer { fn id(self) -> u32 { self.id } fn bind(self, target: u32) { - self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::BindFramebuffer(target, self.id))).unwrap(); + self.renderer.send( + CanvasMsg::WebGL( + CanvasWebGLMsg::BindFramebuffer(target, WebGLFramebufferBindingRequest::Explicit(self.id)))).unwrap(); } fn delete(self) { diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs index 63496f9bff6..35ac00689a8 100644 --- a/components/script/dom/webglprogram.rs +++ b/components/script/dom/webglprogram.rs @@ -5,9 +5,17 @@ // https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl use dom::bindings::codegen::Bindings::WebGLProgramBinding; use dom::bindings::global::GlobalRef; -use dom::bindings::js::Root; +use dom::bindings::js::{JS, MutNullableHeap, Root}; use dom::bindings::utils::reflect_dom_object; use dom::webglobject::WebGLObject; +use dom::webglshader::{WebGLShader, WebGLShaderHelpers}; +use dom::webglrenderingcontext::MAX_UNIFORM_AND_ATTRIBUTE_LEN; + +use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants; + +use canvas_traits::{CanvasMsg, CanvasWebGLMsg, WebGLResult, WebGLError}; +use std::sync::mpsc::{channel, Sender}; +use std::cell::Cell; #[dom_struct] pub struct WebGLProgram { @@ -47,7 +55,7 @@ pub trait WebGLProgramHelpers { fn delete(self); fn link(self); fn use_program(self); - fn attach_shader(self, shader: JSRef<WebGLShader>) -> WebGLResult<()>; + fn attach_shader(self, shader: &WebGLShader) -> WebGLResult<()>; fn get_attrib_location(self, name: String) -> WebGLResult<Option<i32>>; fn get_uniform_location(self, name: String) -> WebGLResult<Option<i32>>; } @@ -72,7 +80,7 @@ impl<'a> WebGLProgramHelpers for &'a WebGLProgram { } /// glAttachShader - fn attach_shader(self, shader: &'a WebGLShader) -> WebGLResult<()> { + fn attach_shader(self, shader: &WebGLShader) -> WebGLResult<()> { let shader_slot = match shader.gl_type() { constants::FRAGMENT_SHADER => &self.fragment_shader, constants::VERTEX_SHADER => &self.vertex_shader, @@ -85,7 +93,7 @@ impl<'a> WebGLProgramHelpers for &'a WebGLProgram { return Err(WebGLError::InvalidOperation); } - shader_slot.set(Some(JS::from_rooted(shader))); + shader_slot.set(Some(JS::from_ref(shader))); self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::AttachShader(self.id, shader.id()))).unwrap(); diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 42e748d51d6..23090a73cfb 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -3,10 +3,13 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use canvas::webgl_paint_task::WebGLPaintTask; -use canvas_traits::{CanvasMsg, CanvasWebGLMsg, CanvasCommonMsg}; -use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding; -use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{ - WebGLContextAttributes, WebGLRenderingContextMethods, WebGLRenderingContextConstants}; +use canvas_traits:: + {CanvasMsg, CanvasWebGLMsg, CanvasCommonMsg, WebGLError, + WebGLShaderParameter, WebGLFramebufferBindingRequest}; +use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding:: + {self, WebGLContextAttributes, WebGLRenderingContextMethods}; +use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants; + use dom::bindings::global::{GlobalRef, GlobalField}; use dom::bindings::js::{JS, LayoutJS, Root}; use dom::bindings::utils::{Reflector, reflect_dom_object}; @@ -22,7 +25,7 @@ use dom::webgluniformlocation::{WebGLUniformLocation, WebGLUniformLocationHelper use euclid::size::Size2D; use js::jsapi::{JSContext, JSObject, RootedValue}; use js::jsapi::{JS_GetFloat32ArrayData, JS_GetObjectAsArrayBufferView}; -use js::jsval::{JSVal, UndefinedValue, NullValue, Int32Value}; +use js::jsval::{JSVal, UndefinedValue, NullValue, Int32Value, BooleanValue}; use std::mem; use std::ptr; use std::slice; @@ -116,10 +119,10 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext { // TODO(ecoal95): Implement the missing parameters from the spec let mut rval = RootedValue::new(cx, UndefinedValue()); match parameter { - WebGLRenderingContextConstants::VERSION => + constants::VERSION => "WebGL 1.0".to_jsval(cx, rval.handle_mut()), - WebGLRenderingContextConstants::RENDERER | - WebGLRenderingContextConstants::VENDOR => + constants::RENDERER | + constants::VENDOR => "Mozilla/Servo".to_jsval(cx, rval.handle_mut()), _ => rval.ptr = NullValue(), } @@ -199,6 +202,9 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext { fn BindBuffer(self, target: u32, buffer: Option<&WebGLBuffer>) { if let Some(buffer) = buffer { buffer.bind(target) + } else { + // Unbind the current buffer + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::BindBuffer(target, 0))).unwrap() } } @@ -206,6 +212,11 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext { fn BindFramebuffer(self, target: u32, framebuffer: Option<&WebGLFramebuffer>) { if let Some(framebuffer) = framebuffer { framebuffer.bind(target) + } else { + // Bind the default framebuffer + self.renderer.send( + CanvasMsg::WebGL( + CanvasWebGLMsg::BindFramebuffer(target, WebGLFramebufferBindingRequest::Default))).unwrap() } } @@ -213,6 +224,9 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext { fn BindRenderbuffer(self, target: u32, renderbuffer: Option<&WebGLRenderbuffer>) { if let Some(renderbuffer) = renderbuffer { renderbuffer.bind(target) + } else { + // Unbind the currently bound renderbuffer + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::BindRenderbuffer(target, 0))).unwrap() } } @@ -225,7 +239,7 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 #[allow(unsafe_code)] - fn BufferData(self, cx: *mut JSContext, target: u32, data: Option<*mut JSObject>, usage: u32) { + fn BufferData(self, _cx: *mut JSContext, target: u32, data: Option<*mut JSObject>, usage: u32) { let data = match data { Some(data) => data, None => return, @@ -447,7 +461,7 @@ impl<'a> WebGLRenderingContextMethods for &'a WebGLRenderingContext { fn VertexAttribPointer(self, attrib_id: u32, size: i32, data_type: u32, normalized: bool, stride: i32, offset: i64) { match data_type { - WebGLRenderingContextConstants::FLOAT => { + constants::FLOAT => { let msg = CanvasMsg::WebGL( CanvasWebGLMsg::VertexAttribPointer2f(attrib_id, size, normalized, stride, offset)); self.renderer.send(msg).unwrap() diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs index 5750046e8fc..e3c4389365b 100644 --- a/components/script/dom/webglshader.rs +++ b/components/script/dom/webglshader.rs @@ -69,7 +69,7 @@ pub trait WebGLShaderHelpers { fn set_source(self, src: String); } -impl<'a> WebGLShaderHelpers for JSRef<'a, WebGLShader> { +impl<'a> WebGLShaderHelpers for &'a WebGLShader { fn id(self) -> u32 { self.id } diff --git a/components/script/dom/webgltexture.rs b/components/script/dom/webgltexture.rs index 6848e3a7f71..111c0ab07c3 100644 --- a/components/script/dom/webgltexture.rs +++ b/components/script/dom/webgltexture.rs @@ -50,7 +50,7 @@ pub trait WebGLTextureHelpers { } impl<'a> WebGLTextureHelpers for &'a WebGLTexture { - fn id(&self) -> u32 { + fn id(self) -> u32 { self.id } |