| Index: Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| diff --git a/Source/modules/webgl/WebGLRenderingContextBase.cpp b/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| index c18ea0b24ac9d1e3afc0d584c14def2d679e99a1..5e8cfdfee787fa1c68db011e5956ebf029c1239d 100644
|
| --- a/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| +++ b/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| @@ -3709,6 +3709,25 @@ bool WebGLRenderingContextBase::validateReadPixelsFormatTypeCombination(GLenum f
|
| return true;
|
| }
|
|
|
| +DOMArrayBufferView::ViewType WebGLRenderingContextBase::readPixelsExpectedArrayBufferViewType(GLenum type)
|
| +{
|
| + switch (type) {
|
| + case GL_UNSIGNED_BYTE:
|
| + return DOMArrayBufferView::TypeUint8;
|
| + case GL_UNSIGNED_SHORT_5_6_5:
|
| + case GL_UNSIGNED_SHORT_4_4_4_4:
|
| + case GL_UNSIGNED_SHORT_5_5_5_1:
|
| + return DOMArrayBufferView::TypeUint16;
|
| + case GL_FLOAT:
|
| + return DOMArrayBufferView::TypeFloat32;
|
| + case GL_HALF_FLOAT_OES:
|
| + return DOMArrayBufferView::TypeUint16;
|
| + default:
|
| + ASSERT_NOT_REACHED();
|
| + return DOMArrayBufferView::TypeUint8;
|
| + }
|
| +}
|
| +
|
| void WebGLRenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferView* pixels)
|
| {
|
| if (isContextLost())
|
| @@ -3730,40 +3749,7 @@ void WebGLRenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsi
|
| if (!validateReadPixelsFormatTypeCombination(format, type, readBufferInternalFormat, readBufferType))
|
| return;
|
|
|
| - DOMArrayBufferView::ViewType expectedViewType;
|
| - switch (type) {
|
| - case GL_UNSIGNED_BYTE:
|
| - expectedViewType = DOMArrayBufferView::TypeUint8;
|
| - break;
|
| - case GL_BYTE:
|
| - expectedViewType = DOMArrayBufferView::TypeInt8;
|
| - break;
|
| - case GL_UNSIGNED_SHORT_5_6_5:
|
| - case GL_UNSIGNED_SHORT_4_4_4_4:
|
| - case GL_UNSIGNED_SHORT_5_5_5_1:
|
| - expectedViewType = DOMArrayBufferView::TypeUint16;
|
| - break;
|
| - case GL_FLOAT:
|
| - expectedViewType = DOMArrayBufferView::TypeFloat32;
|
| - break;
|
| - case GL_HALF_FLOAT:
|
| - case GL_HALF_FLOAT_OES:
|
| - expectedViewType = DOMArrayBufferView::TypeUint16;
|
| - break;
|
| - case GL_UNSIGNED_INT:
|
| - case GL_UNSIGNED_INT_2_10_10_10_REV:
|
| - case GL_UNSIGNED_INT_10F_11F_11F_REV:
|
| - case GL_UNSIGNED_INT_5_9_9_9_REV:
|
| - expectedViewType = DOMArrayBufferView::TypeUint32;
|
| - break;
|
| - case GL_INT:
|
| - expectedViewType = DOMArrayBufferView::TypeInt32;
|
| - break;
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - expectedViewType = DOMArrayBufferView::TypeUint8;
|
| - break;
|
| - }
|
| + DOMArrayBufferView::ViewType expectedViewType = readPixelsExpectedArrayBufferViewType(type);
|
| // Validate array type against pixel type.
|
| if (pixels->type() != expectedViewType) {
|
| synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "ArrayBufferView was the wrong type for the pixel format");
|
|
|