diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/webgl2renderingcontext.rs | 11 | ||||
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 39 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLRenderingContext.webidl | 3 |
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); |