mirror of
https://github.com/servo/servo.git
synced 2025-07-23 23:33:43 +01:00
webgl: finish, flush, detachShader, generateMipmap, Uniform1i
This commit is contained in:
parent
d0f692b2c5
commit
3fd7634f54
14 changed files with 634 additions and 12 deletions
|
@ -94,7 +94,10 @@ impl WebGLProgram {
|
|||
let shader_slot = match shader.gl_type() {
|
||||
constants::FRAGMENT_SHADER => &self.fragment_shader,
|
||||
constants::VERTEX_SHADER => &self.vertex_shader,
|
||||
_ => return Err(WebGLError::InvalidOperation),
|
||||
_ => {
|
||||
error!("detachShader: Unexpected shader type");
|
||||
return Err(WebGLError::InvalidValue);
|
||||
}
|
||||
};
|
||||
|
||||
// TODO(emilio): Differentiate between same shader already assigned and other previous
|
||||
|
@ -110,6 +113,32 @@ impl WebGLProgram {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// glDetachShader
|
||||
pub fn detach_shader(&self, shader: &WebGLShader) -> WebGLResult<()> {
|
||||
let shader_slot = match shader.gl_type() {
|
||||
constants::FRAGMENT_SHADER => &self.fragment_shader,
|
||||
constants::VERTEX_SHADER => &self.vertex_shader,
|
||||
_ => {
|
||||
error!("detachShader: Unexpected shader type");
|
||||
return Err(WebGLError::InvalidValue);
|
||||
}
|
||||
};
|
||||
|
||||
match shader_slot.get() {
|
||||
Some(ref attached_shader) if attached_shader.id() != shader.id() =>
|
||||
return Err(WebGLError::InvalidOperation),
|
||||
None =>
|
||||
return Err(WebGLError::InvalidOperation),
|
||||
_ => {}
|
||||
}
|
||||
|
||||
shader_slot.set(None);
|
||||
|
||||
self.renderer.send(CanvasMsg::WebGL(WebGLCommand::DetachShader(self.id, shader.id()))).unwrap();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// glBindAttribLocation
|
||||
pub fn bind_attrib_location(&self, index: u32, name: DOMString) -> WebGLResult<()> {
|
||||
if name.len() > MAX_UNIFORM_AND_ATTRIBUTE_LEN {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue