aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2017-01-03 17:46:37 -0800
committerEric Anholt <eric@anholt.net>2017-01-04 18:02:32 -0800
commit4c656f1f6154978bf931016d8993acda93233065 (patch)
tree7cc7fcff23f1cc633dc6edf64a0867389d761984 /components/script/dom/webglrenderingcontext.rs
parentaf380c27175270c741cc4e267bb0da3b50994e8b (diff)
downloadservo-4c656f1f6154978bf931016d8993acda93233065.tar.gz
servo-4c656f1f6154978bf931016d8993acda93233065.zip
webgl: Add missing overload of bufferData().
I was writing this to fix the error in gl-enum-tests.html test (it now gets farther along before it fails due to us missing getTexParameter()), but it turned out that a lot of the conformance tests were failing due to it.
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r--components/script/dom/webglrenderingcontext.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index ba1950a9ba7..92771d6ef53 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -991,6 +991,38 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
Ok(())
}
+ // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5
+ fn BufferData_(&self, target: u32, size: i64, usage: u32) -> Fallible<()> {
+ let bound_buffer = match target {
+ 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 {
+ Some(bound_buffer) => bound_buffer,
+ None => return Ok(self.webgl_error(InvalidValue)),
+ };
+
+ if size < 0 {
+ return Ok(self.webgl_error(InvalidValue));
+ }
+
+ match usage {
+ constants::STREAM_DRAW |
+ constants::STATIC_DRAW |
+ constants::DYNAMIC_DRAW => (),
+ _ => return Ok(self.webgl_error(InvalidEnum)),
+ }
+
+ // FIXME: Allocating a buffer based on user-requested size is
+ // not great, but we don't have a fallible allocation to try.
+ let data = vec![0u8; size as usize];
+ handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data, usage));
+
+ Ok(())
+ }
+
#[allow(unsafe_code)]
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5
unsafe fn BufferSubData(&self, _cx: *mut JSContext, target: u32, offset: i64, data: *mut JSObject) -> Fallible<()> {