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/WebGLUnsignedByteArray.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/WebGLUnsignedByteArray.cpp')
-rw-r--r-- | WebCore/html/canvas/WebGLUnsignedByteArray.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/WebCore/html/canvas/WebGLUnsignedByteArray.cpp b/WebCore/html/canvas/WebGLUnsignedByteArray.cpp index 3fd1b50..81e0135 100644 --- a/WebCore/html/canvas/WebGLUnsignedByteArray.cpp +++ b/WebCore/html/canvas/WebGLUnsignedByteArray.cpp @@ -35,7 +35,7 @@ namespace WebCore { PassRefPtr<WebGLUnsignedByteArray> WebGLUnsignedByteArray::create(unsigned length) { - RefPtr<WebGLArrayBuffer> buffer = WebGLArrayBuffer::create(length * sizeof(unsigned char)); + RefPtr<WebGLArrayBuffer> buffer = WebGLArrayBuffer::create(length, sizeof(unsigned char)); return create(buffer, 0, length); } @@ -48,20 +48,17 @@ PassRefPtr<WebGLUnsignedByteArray> WebGLUnsignedByteArray::create(unsigned char* } PassRefPtr<WebGLUnsignedByteArray> WebGLUnsignedByteArray::create(PassRefPtr<WebGLArrayBuffer> buffer, - int byteOffset, + unsigned byteOffset, unsigned length) { - if (buffer) { - // Check to make sure we are talking about a valid region of - // the given WebGLArrayBuffer's storage. - if ((byteOffset + (length * sizeof(unsigned char))) > buffer->byteLength()) - return NULL; - } + RefPtr<WebGLArrayBuffer> buf(buffer); + if (!verifySubRange<unsigned char>(buf, byteOffset, length)) + return 0; - return adoptRef(new WebGLUnsignedByteArray(buffer, byteOffset, length)); + return adoptRef(new WebGLUnsignedByteArray(buf, byteOffset, length)); } -WebGLUnsignedByteArray::WebGLUnsignedByteArray(PassRefPtr<WebGLArrayBuffer> buffer, int byteOffset, unsigned length) +WebGLUnsignedByteArray::WebGLUnsignedByteArray(PassRefPtr<WebGLArrayBuffer> buffer, unsigned byteOffset, unsigned length) : WebGLArray(buffer, byteOffset) , m_size(length) { @@ -75,15 +72,12 @@ unsigned WebGLUnsignedByteArray::byteLength() const { return m_size * sizeof(unsigned char); } -PassRefPtr<WebGLArray> WebGLUnsignedByteArray::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(unsigned char); - unsigned limitByte = startByte + length * sizeof(unsigned char); - unsigned bufferLength = buffer()->byteLength(); - if (startByte >= bufferLength || limitByte > bufferLength) - return 0; - return create(buffer(), startByte, length); +PassRefPtr<WebGLArray> WebGLUnsignedByteArray::slice(int start, int end) +{ + unsigned offset, length; + calculateOffsetAndLength(start, end, m_size, &offset, &length); + clampOffsetAndNumElements<unsigned char>(buffer(), m_byteOffset, &offset, &length); + return create(buffer(), offset, length); } void WebGLUnsignedByteArray::set(WebGLUnsignedByteArray* array, unsigned offset, ExceptionCode& ec) { |