diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2018-03-24 13:06:00 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2018-03-24 13:58:07 +0100 |
commit | a62bed82e40220d0272b31fff542c30ea70e9ff7 (patch) | |
tree | bed96a3398ac1002bc0580e5b992e6bbc63b56b9 /components/script | |
parent | 2befe47384ffcea59ff83caf62973160ac02ee35 (diff) | |
download | servo-a62bed82e40220d0272b31fff542c30ea70e9ff7.tar.gz servo-a62bed82e40220d0272b31fff542c30ea70e9ff7.zip |
Implement WebGLRenderingContextBase.getAttachedShaders
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/webgl2renderingcontext.rs | 8 | ||||
-rw-r--r-- | components/script/dom/webglprogram.rs | 13 | ||||
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 8 | ||||
-rw-r--r-- | components/script/dom/webidls/WebGLRenderingContext.webidl | 2 |
4 files changed, 30 insertions, 1 deletions
diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs index dd0701ace99..9e05797c188 100644 --- a/components/script/dom/webgl2renderingcontext.rs +++ b/components/script/dom/webgl2renderingcontext.rs @@ -974,6 +974,14 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext { level: i32) { self.base.FramebufferTexture2D(target, attachment, textarget, texture, level) } + + /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 + fn GetAttachedShaders( + &self, + program: &WebGLProgram, + ) -> Option<Vec<DomRoot<WebGLShader>>> { + self.base.GetAttachedShaders(program) + } } diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs index f08c40f5500..115b866b984 100644 --- a/components/script/dom/webglprogram.rs +++ b/components/script/dom/webglprogram.rs @@ -367,6 +367,19 @@ impl WebGLProgram { self.renderer.send(WebGLCommand::GetProgramParameter(self.id, param_id, sender)).unwrap(); receiver.recv().unwrap() } + + pub fn attached_shaders(&self) -> WebGLResult<Vec<DomRoot<WebGLShader>>> { + if self.is_deleted.get() { + return Err(WebGLError::InvalidValue); + } + Ok(match (self.vertex_shader.get(), self.fragment_shader.get()) { + (Some(vertex_shader), Some(fragment_shader)) => { + vec![vertex_shader, fragment_shader] + } + (Some(shader), None) | (None, Some(shader)) => vec![shader], + (None, None) => vec![] + }) + } } impl Drop for WebGLProgram { diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index a3a6764996c..36f12577c8b 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -3598,6 +3598,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { None => self.webgl_error(InvalidOperation), }; } + + /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 + fn GetAttachedShaders( + &self, + program: &WebGLProgram, + ) -> Option<Vec<DomRoot<WebGLShader>>> { + handle_potential_webgl_error!(self, program.attached_shaders().map(Some), None) + } } pub trait LayoutCanvasWebGLRenderingContextHelpers { diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index 9921adf2504..5462f0dbad1 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -563,7 +563,7 @@ interface WebGLRenderingContextBase WebGLActiveInfo? getActiveAttrib(WebGLProgram program, GLuint index); WebGLActiveInfo? getActiveUniform(WebGLProgram program, GLuint index); - //sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program); + sequence<WebGLShader>? getAttachedShaders(WebGLProgram program); [WebGLHandlesContextLoss] GLint getAttribLocation(WebGLProgram program, DOMString name); |