Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1963)

Unified Diff: Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 1288303002: WebGL 2: add types into glReadPixels (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: To make the code snippet clearer, override the part of getting ArrayBuffer ViewType in readPixels f… Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/webgl/WebGLRenderingContextBase.cpp
diff --git a/Source/modules/webgl/WebGLRenderingContextBase.cpp b/Source/modules/webgl/WebGLRenderingContextBase.cpp
index c18ea0b24ac9d1e3afc0d584c14def2d679e99a1..c9b3dec3353f7d7bb3e6d17f498862f2563168ec 100644
--- a/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -3709,35 +3709,13 @@ bool WebGLRenderingContextBase::validateReadPixelsFormatTypeCombination(GLenum f
return true;
}
-void WebGLRenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferView* pixels)
+DOMArrayBufferView::ViewType WebGLRenderingContextBase::readPixelsExpectedArrayBufferViewType(GLenum type)
{
- if (isContextLost())
- return;
- // Due to WebGL's same-origin restrictions, it is not possible to
- // taint the origin using the WebGL API.
- ASSERT(canvas()->originClean());
- // Validate input parameters.
- if (!pixels) {
- synthesizeGLError(GL_INVALID_VALUE, "readPixels", "no destination ArrayBufferView");
- return;
- }
- if (!validateReadPixelsFormatAndType(format, type))
- return;
- GLenum readBufferInternalFormat = 0, readBufferType = 0;
- WebGLFramebuffer* readFramebufferBinding = nullptr;
- if (!validateReadBufferAndGetInfo("readPixels", readFramebufferBinding, &readBufferInternalFormat, &readBufferType))
- return;
- if (!validateReadPixelsFormatTypeCombination(format, type, readBufferInternalFormat, readBufferType))
- return;
-
DOMArrayBufferView::ViewType expectedViewType;
Zhenyao Mo 2015/08/14 16:07:42 nit: you don't need this expectedViewType. You ca
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:
@@ -3746,24 +3724,39 @@ void WebGLRenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsi
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;
}
+ return expectedViewType;
+}
+
+void WebGLRenderingContextBase::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferView* pixels)
+{
+ if (isContextLost())
+ return;
+ // Due to WebGL's same-origin restrictions, it is not possible to
+ // taint the origin using the WebGL API.
+ ASSERT(canvas()->originClean());
+ // Validate input parameters.
+ if (!pixels) {
+ synthesizeGLError(GL_INVALID_VALUE, "readPixels", "no destination ArrayBufferView");
+ return;
+ }
+ if (!validateReadPixelsFormatAndType(format, type))
+ return;
+ GLenum readBufferInternalFormat = 0, readBufferType = 0;
+ WebGLFramebuffer* readFramebufferBinding = nullptr;
+ if (!validateReadBufferAndGetInfo("readPixels", readFramebufferBinding, &readBufferInternalFormat, &readBufferType))
+ return;
+ if (!validateReadPixelsFormatTypeCombination(format, type, readBufferInternalFormat, readBufferType))
+ return;
+
+ 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");

Powered by Google App Engine
This is Rietveld 408576698