mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Introduce WebGLRenderingContext::bound_buffer
This commit is contained in:
parent
605da95076
commit
235a7b80c9
1 changed files with 17 additions and 29 deletions
|
@ -4,8 +4,9 @@
|
||||||
|
|
||||||
use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
||||||
use canvas_traits::canvas::{byte_swap, multiply_u8_pixel};
|
use canvas_traits::canvas::{byte_swap, multiply_u8_pixel};
|
||||||
use canvas_traits::webgl::{WebGLContextShareMode, WebGLCommand, WebGLError, WebGLVersion, WebGLSLVersion};
|
use canvas_traits::webgl::{WebGLCommand, WebGLContextShareMode, WebGLError};
|
||||||
use canvas_traits::webgl::{WebGLFramebufferBindingRequest, WebGLMsg, WebGLMsgSender, WebGLParameter, WebVRCommand};
|
use canvas_traits::webgl::{WebGLFramebufferBindingRequest, WebGLMsg, WebGLMsgSender};
|
||||||
|
use canvas_traits::webgl::{WebGLParameter, WebGLResult, WebGLSLVersion, WebGLVersion, WebVRCommand};
|
||||||
use canvas_traits::webgl::DOMToTextureCommand;
|
use canvas_traits::webgl::DOMToTextureCommand;
|
||||||
use canvas_traits::webgl::WebGLError::*;
|
use canvas_traits::webgl::WebGLError::*;
|
||||||
use canvas_traits::webgl::webgl_channel;
|
use canvas_traits::webgl::webgl_channel;
|
||||||
|
@ -1195,6 +1196,14 @@ impl WebGLRenderingContext {
|
||||||
));
|
));
|
||||||
Some(receiver.recv().unwrap().into())
|
Some(receiver.recv().unwrap().into())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn bound_buffer(&self, target: u32) -> WebGLResult<Option<DomRoot<WebGLBuffer>>> {
|
||||||
|
match target {
|
||||||
|
constants::ARRAY_BUFFER => Ok(self.bound_buffer_array.get()),
|
||||||
|
constants::ELEMENT_ARRAY_BUFFER => Ok(self.bound_buffer_element_array.get()),
|
||||||
|
_ => Err(WebGLError::InvalidEnum),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for WebGLRenderingContext {
|
impl Drop for WebGLRenderingContext {
|
||||||
|
@ -1256,14 +1265,8 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
target: u32,
|
target: u32,
|
||||||
parameter: u32,
|
parameter: u32,
|
||||||
) -> JSVal {
|
) -> JSVal {
|
||||||
let buffer = match target {
|
let buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return NullValue());
|
||||||
constants::ARRAY_BUFFER => self.bound_buffer_array.get(),
|
|
||||||
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
|
|
||||||
_ => {
|
|
||||||
self.webgl_error(InvalidEnum);
|
|
||||||
return NullValue();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
match parameter {
|
match parameter {
|
||||||
constants::BUFFER_SIZE | constants::BUFFER_USAGE => {},
|
constants::BUFFER_SIZE | constants::BUFFER_USAGE => {},
|
||||||
_ => {
|
_ => {
|
||||||
|
@ -1693,15 +1696,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
Err(_) => fallible_array_buffer_view_to_vec(cx, data)?,
|
Err(_) => fallible_array_buffer_view_to_vec(cx, data)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
let bound_buffer = match target {
|
let bound_buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return Ok(()));
|
||||||
constants::ARRAY_BUFFER => self.bound_buffer_array.get(),
|
|
||||||
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
|
|
||||||
_ => return Ok(self.webgl_error(InvalidEnum)),
|
|
||||||
};
|
|
||||||
|
|
||||||
let bound_buffer = match bound_buffer {
|
let bound_buffer = match bound_buffer {
|
||||||
Some(bound_buffer) => bound_buffer,
|
Some(bound_buffer) => bound_buffer,
|
||||||
None => return Ok(self.webgl_error(InvalidValue)),
|
None => return Ok(self.webgl_error(InvalidOperation)),
|
||||||
};
|
};
|
||||||
|
|
||||||
handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, data_vec, usage));
|
handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, data_vec, usage));
|
||||||
|
@ -1710,12 +1708,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
|
|
||||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5
|
||||||
fn BufferData_(&self, target: u32, size: i64, usage: u32) -> ErrorResult {
|
fn BufferData_(&self, target: u32, size: i64, usage: u32) -> ErrorResult {
|
||||||
let bound_buffer = match target {
|
let bound_buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return Ok(()));
|
||||||
constants::ARRAY_BUFFER => self.bound_buffer_array.get(),
|
|
||||||
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
|
|
||||||
_ => return Ok(self.webgl_error(InvalidEnum)),
|
|
||||||
};
|
|
||||||
|
|
||||||
let bound_buffer = match bound_buffer {
|
let bound_buffer = match bound_buffer {
|
||||||
Some(bound_buffer) => bound_buffer,
|
Some(bound_buffer) => bound_buffer,
|
||||||
None => return Ok(self.webgl_error(InvalidValue)),
|
None => return Ok(self.webgl_error(InvalidValue)),
|
||||||
|
@ -1742,12 +1735,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
None => return self.webgl_error(InvalidValue),
|
None => return self.webgl_error(InvalidValue),
|
||||||
};
|
};
|
||||||
|
|
||||||
let bound_buffer = match target {
|
let bound_buffer = handle_potential_webgl_error!(self, self.bound_buffer(target), return);
|
||||||
constants::ARRAY_BUFFER => self.bound_buffer_array.get(),
|
|
||||||
constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(),
|
|
||||||
_ => return self.webgl_error(InvalidEnum),
|
|
||||||
};
|
|
||||||
|
|
||||||
let bound_buffer = match bound_buffer {
|
let bound_buffer = match bound_buffer {
|
||||||
Some(bound_buffer) => bound_buffer,
|
Some(bound_buffer) => bound_buffer,
|
||||||
None => return self.webgl_error(InvalidOperation),
|
None => return self.webgl_error(InvalidOperation),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue