diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:31:00 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-11 14:42:12 +0100 |
commit | dcc8cf2e65d1aa555cce12431a16547e66b469ee (patch) | |
tree | 92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/html/canvas/WebGLShortArray.cpp | |
parent | ccac38a6b48843126402088a309597e682f40fe6 (diff) | |
download | external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.zip external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.gz external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.bz2 |
Merge webkit.org at r58033 : Initial merge by git
Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
Diffstat (limited to 'WebCore/html/canvas/WebGLShortArray.cpp')
-rw-r--r-- | WebCore/html/canvas/WebGLShortArray.cpp | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/WebCore/html/canvas/WebGLShortArray.cpp b/WebCore/html/canvas/WebGLShortArray.cpp index f96a290..a9b0f0d 100644 --- a/WebCore/html/canvas/WebGLShortArray.cpp +++ b/WebCore/html/canvas/WebGLShortArray.cpp @@ -34,7 +34,7 @@ namespace WebCore { PassRefPtr<WebGLShortArray> WebGLShortArray::create(unsigned length) { - RefPtr<WebGLArrayBuffer> buffer = WebGLArrayBuffer::create(length * sizeof(short)); + RefPtr<WebGLArrayBuffer> buffer = WebGLArrayBuffer::create(length, sizeof(short)); return create(buffer, 0, length); } @@ -47,24 +47,17 @@ PassRefPtr<WebGLShortArray> WebGLShortArray::create(short* array, unsigned lengt } PassRefPtr<WebGLShortArray> WebGLShortArray::create(PassRefPtr<WebGLArrayBuffer> buffer, - int byteOffset, + unsigned byteOffset, unsigned length) { - // Make sure the offset results in valid alignment. - if ((byteOffset % sizeof(short)) != 0) - return NULL; - - if (buffer) { - // Check to make sure we are talking about a valid region of - // the given WebGLArrayBuffer's storage. - if ((byteOffset + (length * sizeof(short))) > buffer->byteLength()) - return NULL; - } + RefPtr<WebGLArrayBuffer> buf(buffer); + if (!verifySubRange<short>(buf, byteOffset, length)) + return 0; - return adoptRef(new WebGLShortArray(buffer, byteOffset, length)); + return adoptRef(new WebGLShortArray(buf, byteOffset, length)); } -WebGLShortArray::WebGLShortArray(PassRefPtr<WebGLArrayBuffer> buffer, int byteOffset, unsigned length) +WebGLShortArray::WebGLShortArray(PassRefPtr<WebGLArrayBuffer> buffer, unsigned byteOffset, unsigned length) : WebGLArray(buffer, byteOffset) , m_size(length) { @@ -78,15 +71,12 @@ unsigned WebGLShortArray::byteLength() const { return m_size * sizeof(short); } -PassRefPtr<WebGLArray> WebGLShortArray::slice(unsigned offset, unsigned length) { - // Check to make sure the specified region is within the bounds of - // the WebGLArrayBuffer. - unsigned startByte = m_byteOffset + offset * sizeof(short); - unsigned limitByte = startByte + length * sizeof(short); - unsigned bufferLength = buffer()->byteLength(); - if (startByte >= bufferLength || limitByte > bufferLength) - return 0; - return create(buffer(), startByte, length); +PassRefPtr<WebGLArray> WebGLShortArray::slice(int start, int end) +{ + unsigned offset, length; + calculateOffsetAndLength(start, end, m_size, &offset, &length); + clampOffsetAndNumElements<short>(buffer(), m_byteOffset, &offset, &length); + return create(buffer(), offset, length); } void WebGLShortArray::set(WebGLShortArray* array, unsigned offset, ExceptionCode& ec) { |