aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2018-03-24 13:06:00 +0100
committerAnthony Ramine <n.oxyde@gmail.com>2018-03-24 13:58:07 +0100
commita62bed82e40220d0272b31fff542c30ea70e9ff7 (patch)
treebed96a3398ac1002bc0580e5b992e6bbc63b56b9 /components/script
parent2befe47384ffcea59ff83caf62973160ac02ee35 (diff)
downloadservo-a62bed82e40220d0272b31fff542c30ea70e9ff7.tar.gz
servo-a62bed82e40220d0272b31fff542c30ea70e9ff7.zip
Implement WebGLRenderingContextBase.getAttachedShaders
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/webgl2renderingcontext.rs8
-rw-r--r--components/script/dom/webglprogram.rs13
-rw-r--r--components/script/dom/webglrenderingcontext.rs8
-rw-r--r--components/script/dom/webidls/WebGLRenderingContext.webidl2
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);