aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/webgl2renderingcontext.rs11
-rw-r--r--components/script/dom/webglrenderingcontext.rs39
-rw-r--r--components/script/dom/webidls/WebGLRenderingContext.webidl3
3 files changed, 51 insertions, 2 deletions
diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs
index 81a1688c68b..cb5e17dfe26 100644
--- a/components/script/dom/webgl2renderingcontext.rs
+++ b/components/script/dom/webgl2renderingcontext.rs
@@ -159,6 +159,17 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
self.base.GetFramebufferAttachmentParameter(cx, target, attachment, pname)
}
+ #[allow(unsafe_code)]
+ /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.7
+ unsafe fn GetRenderbufferParameter(
+ &self,
+ cx: *mut JSContext,
+ target: u32,
+ pname: u32
+ ) -> JSVal {
+ self.base.GetRenderbufferParameter(cx, target, pname)
+ }
+
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
fn ActiveTexture(&self, texture: u32) {
self.base.ActiveTexture(texture)
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 8e4757a5841..d68f817dcd6 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -2348,6 +2348,45 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
Int32Value(receiver.recv().unwrap())
}
+ #[allow(unsafe_code)]
+ // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.7
+ unsafe fn GetRenderbufferParameter(
+ &self,
+ _cx: *mut JSContext,
+ target: u32,
+ pname: u32
+ ) -> JSVal {
+ let target_matches = target == constants::RENDERBUFFER;
+
+ let pname_matches = match pname {
+ constants::RENDERBUFFER_WIDTH |
+ constants::RENDERBUFFER_HEIGHT |
+ constants::RENDERBUFFER_INTERNAL_FORMAT |
+ constants::RENDERBUFFER_RED_SIZE |
+ constants::RENDERBUFFER_GREEN_SIZE |
+ constants::RENDERBUFFER_BLUE_SIZE |
+ constants::RENDERBUFFER_ALPHA_SIZE |
+ constants::RENDERBUFFER_DEPTH_SIZE |
+ constants::RENDERBUFFER_STENCIL_SIZE => true,
+ _ => false,
+ };
+
+ if !target_matches || !pname_matches {
+ self.webgl_error(InvalidEnum);
+ return NullValue();
+ }
+
+ if self.bound_renderbuffer.get().is_none() {
+ self.webgl_error(InvalidOperation);
+ return NullValue();
+ }
+
+ let (sender, receiver) = webgl_channel().unwrap();
+ self.send_command(WebGLCommand::GetRenderbufferParameter(target, pname, sender));
+
+ Int32Value(receiver.recv().unwrap())
+ }
+
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetProgramInfoLog(&self, program: &WebGLProgram) -> Option<DOMString> {
match program.get_info_log() {
diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl
index cd714b4c787..8ec02ce95ea 100644
--- a/components/script/dom/webidls/WebGLRenderingContext.webidl
+++ b/components/script/dom/webidls/WebGLRenderingContext.webidl
@@ -571,8 +571,7 @@ interface WebGLRenderingContextBase
GLenum pname);
any getProgramParameter(WebGLProgram program, GLenum pname);
DOMString? getProgramInfoLog(WebGLProgram program);
- // FIXME: https://github.com/servo/servo/issues/20514
- // any getRenderbufferParameter(GLenum target, GLenum pname);
+ any getRenderbufferParameter(GLenum target, GLenum pname);
any getShaderParameter(WebGLShader shader, GLenum pname);
WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
DOMString? getShaderInfoLog(WebGLShader shader);