Index: Source/modules/webgl/WebGL2RenderingContextBase.cpp |
diff --git a/Source/modules/webgl/WebGL2RenderingContextBase.cpp b/Source/modules/webgl/WebGL2RenderingContextBase.cpp |
index 672270918c6d75a9ccdd2152dd3c76bb7ab830f9..dd74e171b0cd0713d7c26d000ad37b7a0c1b85f0 100644 |
--- a/Source/modules/webgl/WebGL2RenderingContextBase.cpp |
+++ b/Source/modules/webgl/WebGL2RenderingContextBase.cpp |
@@ -244,6 +244,42 @@ void WebGL2RenderingContextBase::readBuffer(GLenum mode) |
webContext()->readBuffer(mode); |
} |
+void WebGL2RenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferView* pixels) |
+{ |
+ if (isContextLost()) |
+ return; |
+ if (m_boundPixelPackBuffer.get()) { |
+ synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "PIXEL_PACK buffer should not be bound"); |
+ return; |
+ } |
+ |
+ WebGLRenderingContextBase::readPixels(x, y, width, height, format, type, pixels); |
+} |
+ |
+void WebGL2RenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, long long offset) |
+{ |
+ if (isContextLost()) |
+ return; |
+ |
+ if (!validateValueFitNonNegInt32("readPixels", "offset", offset)) |
+ return; |
+ |
+ WebGLBuffer* buffer = m_boundPixelPackBuffer.get(); |
+ if (!buffer) { |
+ synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "no PIXEL_PACK buffer bound"); |
+ return; |
+ } |
+ |
+ // Need to validate whether the pixel pack buffer is mapped, |
+ // if we decide to expose mapBufferRange() to web developers. |
+ |
+ long long size = buffer->getSize() - offset; |
+ |
+ // If size is negative, or size is not large enough to store pixels, |
+ // those cases are handled by readPixelsImpl to generate INVALID_OPERATION. |
+ WebGLRenderingContextBase::readPixelsImpl(x, y, width, height, format, type, reinterpret_cast<void*>(offset), size); |
+} |
+ |
void WebGL2RenderingContextBase::renderbufferStorageImpl( |
GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, |
const char* functionName) |