aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorecoal95 <ecoal95@gmail.com>2015-06-01 13:34:28 +0200
committerecoal95 <ecoal95@gmail.com>2015-06-01 16:34:51 +0200
commiteff2bb43104f521d3cd85fcbf9aacad719a99770 (patch)
treed430f0dca7df681d9fb769ecff4adc0d0d0f9b30 /components/script/dom/webglrenderingcontext.rs
parent0de09b936e5e37c15b7865157a98ad78b1077659 (diff)
downloadservo-eff2bb43104f521d3cd85fcbf9aacad719a99770.tar.gz
servo-eff2bb43104f521d3cd85fcbf9aacad719a99770.zip
WebGLRenderingContext getters and `getParameter`
This implements the `canvas`, `drawingBufferHeight` and `drawingBufferWidth` getters to `WebGLRenderingContext`, and an initial version of `getParameter`.
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r--components/script/dom/webglrenderingcontext.rs33
1 files changed, 33 insertions, 0 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();