| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 3788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3799 case GL_FLOAT: | 3799 case GL_FLOAT: |
| 3800 return DOMArrayBufferView::TypeFloat32; | 3800 return DOMArrayBufferView::TypeFloat32; |
| 3801 case GL_HALF_FLOAT_OES: | 3801 case GL_HALF_FLOAT_OES: |
| 3802 return DOMArrayBufferView::TypeUint16; | 3802 return DOMArrayBufferView::TypeUint16; |
| 3803 default: | 3803 default: |
| 3804 ASSERT_NOT_REACHED(); | 3804 ASSERT_NOT_REACHED(); |
| 3805 return DOMArrayBufferView::TypeUint8; | 3805 return DOMArrayBufferView::TypeUint8; |
| 3806 } | 3806 } |
| 3807 } | 3807 } |
| 3808 | 3808 |
| 3809 WebGLImageConversion::PixelStoreParams WebGLRenderingContextBase::getPackPixelSt
oreParams() |
| 3810 { |
| 3811 WebGLImageConversion::PixelStoreParams params; |
| 3812 params.alignment = m_packAlignment; |
| 3813 return params; |
| 3814 } |
| 3815 |
| 3816 WebGLImageConversion::PixelStoreParams WebGLRenderingContextBase::getUnpackPixel
StoreParams() |
| 3817 { |
| 3818 WebGLImageConversion::PixelStoreParams params; |
| 3819 params.alignment = m_unpackAlignment; |
| 3820 return params; |
| 3821 } |
| 3822 |
| 3809 bool WebGLRenderingContextBase::validateReadPixelsFuncParameters(GLsizei width,
GLsizei height, GLenum format, GLenum type, long long bufferSize) | 3823 bool WebGLRenderingContextBase::validateReadPixelsFuncParameters(GLsizei width,
GLsizei height, GLenum format, GLenum type, long long bufferSize) |
| 3810 { | 3824 { |
| 3811 if (!validateReadPixelsFormatAndType(format, type)) | 3825 if (!validateReadPixelsFormatAndType(format, type)) |
| 3812 return false; | 3826 return false; |
| 3813 WebGLFramebuffer* readFramebufferBinding = nullptr; | 3827 WebGLFramebuffer* readFramebufferBinding = nullptr; |
| 3814 GLenum readBufferInternalFormat = 0, readBufferType = 0; | 3828 GLenum readBufferInternalFormat = 0, readBufferType = 0; |
| 3815 if (!validateReadBufferAndGetInfo("readPixels", readFramebufferBinding, &rea
dBufferInternalFormat, &readBufferType)) | 3829 if (!validateReadBufferAndGetInfo("readPixels", readFramebufferBinding, &rea
dBufferInternalFormat, &readBufferType)) |
| 3816 return false; | 3830 return false; |
| 3817 if (!validateReadPixelsFormatTypeCombination(format, type, readBufferInterna
lFormat, readBufferType)) | 3831 if (!validateReadPixelsFormatTypeCombination(format, type, readBufferInterna
lFormat, readBufferType)) |
| 3818 return false; | 3832 return false; |
| 3819 | 3833 |
| 3820 // Calculate array size, taking into consideration of PACK_ALIGNMENT. | 3834 // Calculate array size, taking into consideration of pack parameters. |
| 3821 unsigned totalBytesRequired = 0; | 3835 unsigned totalBytesRequired = 0, totalSkipBytes = 0; |
| 3822 unsigned padding = 0; | 3836 GLenum error = WebGLImageConversion::computeImageSizeInBytes(format, type, w
idth, height, 1, getPackPixelStoreParams(), &totalBytesRequired, 0, &totalSkipBy
tes); |
| 3823 GLenum error = WebGLImageConversion::computeImageSizeInBytes(format, type, w
idth, height, 1, m_packAlignment, &totalBytesRequired, &padding); | |
| 3824 if (error != GL_NO_ERROR) { | 3837 if (error != GL_NO_ERROR) { |
| 3825 synthesizeGLError(error, "readPixels", "invalid dimensions"); | 3838 synthesizeGLError(error, "readPixels", "invalid dimensions"); |
| 3826 return false; | 3839 return false; |
| 3827 } | 3840 } |
| 3828 if (bufferSize < static_cast<long long>(totalBytesRequired)) { | 3841 if (bufferSize < static_cast<long long>(totalBytesRequired + totalSkipBytes)
) { |
| 3829 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "buffer is not lar
ge enough for dimensions"); | 3842 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "buffer is not lar
ge enough for dimensions"); |
| 3830 return false; | 3843 return false; |
| 3831 } | 3844 } |
| 3832 return true; | 3845 return true; |
| 3833 } | 3846 } |
| 3834 | 3847 |
| 3835 void WebGLRenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsi
zei height, GLenum format, GLenum type, DOMArrayBufferView* pixels) | 3848 void WebGLRenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsi
zei height, GLenum format, GLenum type, DOMArrayBufferView* pixels) |
| 3836 { | 3849 { |
| 3837 if (isContextLost()) | 3850 if (isContextLost()) |
| 3838 return; | 3851 return; |
| (...skipping 2016 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5855 if (pixels->type() != DOMArrayBufferView::TypeUint16) { | 5868 if (pixels->type() != DOMArrayBufferView::TypeUint16) { |
| 5856 synthesizeGLError(GL_INVALID_OPERATION, functionName, "type HALF_FLO
AT_OES but ArrayBufferView is not NULL and not Uint16Array"); | 5869 synthesizeGLError(GL_INVALID_OPERATION, functionName, "type HALF_FLO
AT_OES but ArrayBufferView is not NULL and not Uint16Array"); |
| 5857 return false; | 5870 return false; |
| 5858 } | 5871 } |
| 5859 break; | 5872 break; |
| 5860 default: | 5873 default: |
| 5861 ASSERT_NOT_REACHED(); | 5874 ASSERT_NOT_REACHED(); |
| 5862 } | 5875 } |
| 5863 | 5876 |
| 5864 unsigned totalBytesRequired; | 5877 unsigned totalBytesRequired; |
| 5865 GLenum error = WebGLImageConversion::computeImageSizeInBytes(format, type, w
idth, height, depth, m_unpackAlignment, &totalBytesRequired, 0); | 5878 GLenum error = WebGLImageConversion::computeImageSizeInBytes(format, type, w
idth, height, depth, getUnpackPixelStoreParams(), &totalBytesRequired, 0, 0); |
| 5866 if (error != GL_NO_ERROR) { | 5879 if (error != GL_NO_ERROR) { |
| 5867 synthesizeGLError(error, functionName, "invalid texture dimensions"); | 5880 synthesizeGLError(error, functionName, "invalid texture dimensions"); |
| 5868 return false; | 5881 return false; |
| 5869 } | 5882 } |
| 5870 if (pixels->byteLength() < totalBytesRequired) { | 5883 if (pixels->byteLength() < totalBytesRequired) { |
| 5871 if (m_unpackAlignment != 1) { | |
| 5872 error = WebGLImageConversion::computeImageSizeInBytes(format, type,
width, height, depth, 1, &totalBytesRequired, 0); | |
| 5873 if (pixels->byteLength() == totalBytesRequired) { | |
| 5874 synthesizeGLError(GL_INVALID_OPERATION, functionName, "ArrayBuff
erView not big enough for request with UNPACK_ALIGNMENT > 1"); | |
| 5875 return false; | |
| 5876 } | |
| 5877 } | |
| 5878 synthesizeGLError(GL_INVALID_OPERATION, functionName, "ArrayBufferView n
ot big enough for request"); | 5884 synthesizeGLError(GL_INVALID_OPERATION, functionName, "ArrayBufferView n
ot big enough for request"); |
| 5879 return false; | 5885 return false; |
| 5880 } | 5886 } |
| 5881 return true; | 5887 return true; |
| 5882 } | 5888 } |
| 5883 | 5889 |
| 5884 bool WebGLRenderingContextBase::validateCopyTexSubImage(const char* functionName
, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint
x, GLint y, GLsizei width, GLsizei height) | 5890 bool WebGLRenderingContextBase::validateCopyTexSubImage(const char* functionName
, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint
x, GLint y, GLsizei width, GLsizei height) |
| 5885 { | 5891 { |
| 5886 if (!validateTexFuncLevel(functionName, target, level)) | 5892 if (!validateTexFuncLevel(functionName, target, level)) |
| 5887 return false; | 5893 return false; |
| (...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6931 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1); | 6937 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1); |
| 6932 } | 6938 } |
| 6933 | 6939 |
| 6934 void WebGLRenderingContextBase::restoreUnpackParameters() | 6940 void WebGLRenderingContextBase::restoreUnpackParameters() |
| 6935 { | 6941 { |
| 6936 if (m_unpackAlignment != 1) | 6942 if (m_unpackAlignment != 1) |
| 6937 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment); | 6943 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment); |
| 6938 } | 6944 } |
| 6939 | 6945 |
| 6940 } // namespace blink | 6946 } // namespace blink |
| OLD | NEW |