diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 33 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLRenderingContext.webidl | 14 |
2 files changed, 40 insertions, 7 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 462c3859d17..4031c36f2c2 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -10,6 +10,7 @@ use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{ use dom::bindings::global::{GlobalRef, GlobalField}; use dom::bindings::js::{JS, JSRef, LayoutJS, Temporary}; use dom::bindings::utils::{Reflector, reflect_dom_object}; +use dom::bindings::conversions::ToJSValConvertible; use dom::htmlcanvaselement::{HTMLCanvasElement}; use dom::webglbuffer::{WebGLBuffer, WebGLBufferHelpers}; use dom::webglshader::{WebGLShader, WebGLShaderHelpers}; @@ -73,6 +74,38 @@ impl Drop for WebGLRenderingContext { } impl<'a> WebGLRenderingContextMethods for JSRef<'a, WebGLRenderingContext> { + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1 + fn Canvas(self) -> Temporary<HTMLCanvasElement> { + Temporary::from_rooted(self.canvas) + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1 + fn DrawingBufferWidth(self) -> i32 { + let (sender, receiver) = channel(); + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::DrawingBufferWidth(sender))).unwrap(); + receiver.recv().unwrap() + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1 + fn DrawingBufferHeight(self) -> i32 { + let (sender, receiver) = channel(); + self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::DrawingBufferHeight(sender))).unwrap(); + receiver.recv().unwrap() + } + + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 + fn GetParameter(self, cx: *mut JSContext, parameter: u32) -> JSVal { + // TODO(ecoal95): Implement the missing parameters from the spec + match parameter { + WebGLRenderingContextConstants::VERSION => + DOMString::from_str("WebGL 1.0").to_jsval(cx), + WebGLRenderingContextConstants::RENDERER | + WebGLRenderingContextConstants::VENDOR => + DOMString::from_str("Mozilla/Servo").to_jsval(cx), + _ => NullValue(), + } + } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.2 fn GetContextAttributes(self) -> Option<WebGLContextAttributes> { let (sender, receiver) = channel(); diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index 9409d1500d8..4f33f4e3159 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -307,9 +307,9 @@ interface WebGLRenderingContextBase //const GLenum DECR_WRAP = 0x8508; /* StringName */ - //const GLenum VENDOR = 0x1F00; - //const GLenum RENDERER = 0x1F01; - //const GLenum VERSION = 0x1F02; + const GLenum VENDOR = 0x1F00; + const GLenum RENDERER = 0x1F01; + const GLenum VERSION = 0x1F02; /* TextureMagFilter */ //const GLenum NEAREST = 0x2600; @@ -477,9 +477,9 @@ interface WebGLRenderingContextBase //const GLenum UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; //const GLenum BROWSER_DEFAULT_WEBGL = 0x9244; - //readonly attribute HTMLCanvasElement canvas; - //readonly attribute GLsizei drawingBufferWidth; - //readonly attribute GLsizei drawingBufferHeight; + readonly attribute HTMLCanvasElement canvas; + readonly attribute GLsizei drawingBufferWidth; + readonly attribute GLsizei drawingBufferHeight; [WebGLHandlesContextLoss] WebGLContextAttributes? getContextAttributes(); //[WebGLHandlesContextLoss] boolean isContextLost(); @@ -577,7 +577,7 @@ interface WebGLRenderingContextBase [WebGLHandlesContextLoss] GLint getAttribLocation(WebGLProgram? program, DOMString name); //any getBufferParameter(GLenum target, GLenum pname); - //any getParameter(GLenum pname); + any getParameter(GLenum pname); //[WebGLHandlesContextLoss] GLenum getError(); |