aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/webglprogram.rs11
-rw-r--r--components/script/dom/webglrenderingcontext.rs11
-rw-r--r--components/script/dom/webidls/WebGLRenderingContext.webidl2
3 files changed, 23 insertions, 1 deletions
diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs
index 996e6eb4cee..d288e9422c4 100644
--- a/components/script/dom/webglprogram.rs
+++ b/components/script/dom/webglprogram.rs
@@ -167,6 +167,17 @@ impl WebGLProgram {
WebGLActiveInfo::new(self.global().r(), size, ty, DOMString::from(name)))
}
+ /// glGetActiveAttrib
+ pub fn get_active_attrib(&self, index: u32) -> WebGLResult<Root<WebGLActiveInfo>> {
+ let (sender, receiver) = ipc::channel().unwrap();
+ self.renderer
+ .send(CanvasMsg::WebGL(WebGLCommand::GetActiveAttrib(self.id, index, sender)))
+ .unwrap();
+
+ receiver.recv().unwrap().map(|(size, ty, name)|
+ WebGLActiveInfo::new(self.global().r(), size, ty, DOMString::from(name)))
+ }
+
/// glGetAttribLocation
pub fn get_attrib_location(&self, name: DOMString) -> WebGLResult<Option<i32>> {
if name.len() > MAX_UNIFORM_AND_ATTRIBUTE_LEN {
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index ac75e84efc8..4c6996cbb90 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -828,6 +828,17 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
}
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
+ fn GetActiveAttrib(&self, program: Option<&WebGLProgram>, index: u32) -> Option<Root<WebGLActiveInfo>> {
+ program.and_then(|p| match p.get_active_attrib(index) {
+ Ok(ret) => Some(ret),
+ Err(error) => {
+ self.webgl_error(error);
+ None
+ },
+ })
+ }
+
+ // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetAttribLocation(&self, program: Option<&WebGLProgram>, name: DOMString) -> i32 {
if let Some(program) = program {
handle_potential_webgl_error!(self, program.get_attrib_location(name), None).unwrap_or(-1)
diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl
index 7be7a82d41e..d2c93d9a3c5 100644
--- a/components/script/dom/webidls/WebGLRenderingContext.webidl
+++ b/components/script/dom/webidls/WebGLRenderingContext.webidl
@@ -567,7 +567,7 @@ interface WebGLRenderingContextBase
void generateMipmap(GLenum target);
- //WebGLActiveInfo? getActiveAttrib(WebGLProgram? program, GLuint index);
+ WebGLActiveInfo? getActiveAttrib(WebGLProgram? program, GLuint index);
WebGLActiveInfo? getActiveUniform(WebGLProgram? program, GLuint index);
//sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program);