diff options
author | Eric Anholt <eric@anholt.net> | 2017-01-03 17:46:37 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2017-01-04 18:02:32 -0800 |
commit | 4c656f1f6154978bf931016d8993acda93233065 (patch) | |
tree | 7cc7fcff23f1cc633dc6edf64a0867389d761984 /components/script/dom/webglrenderingcontext.rs | |
parent | af380c27175270c741cc4e267bb0da3b50994e8b (diff) | |
download | servo-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.rs | 32 |
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<()> { |