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

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

Issue 2121043002: 16 bpp video stream capture, render and WebGL usage - Realsense R200 & SR300 support. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WebGL video to texture support and readPixels from R16UI for CPU access Created 4 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: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index ebed1a63bf97b77e8b8df2cf6e7183f5125193fd..8b7603878fc650ce7d6436cf0e1b066233e4aaa8 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -514,6 +514,29 @@ private:
Member<WebGLRenderingContextBase> m_context;
};
+class ScopedUnpackParametersResetRestore {
+ STACK_ALLOCATED();
+
+public:
+ explicit ScopedUnpackParametersResetRestore(WebGLRenderingContextBase* context, bool enabled = true)
+ : m_context(context)
+ , m_enabled(enabled)
+ {
+ if (enabled)
+ m_context->resetUnpackParameters();
+ }
+
+ ~ScopedUnpackParametersResetRestore()
+ {
+ if (m_enabled)
+ m_context->restoreUnpackParameters();
+ }
+
+private:
+ Member<WebGLRenderingContextBase> m_context;
+ bool m_enabled;
+};
+
static void formatWebGLStatusString(const String& glInfo, const String& infostring, String& statusMessage)
{
if (!infostring.isEmpty())
@@ -4024,7 +4047,7 @@ void WebGLRenderingContextBase::texImageImpl(TexImageFunctionID functionID, GLen
}
}
- resetUnpackParameters();
+ ScopedUnpackParametersResetRestore temporaryResetUnpack(this);
if (functionID == TexImage2D) {
texImage2DBase(target, level, internalformat, imageExtractor.imageWidth(), imageExtractor.imageHeight(), 0, format, type, needConversion ? data.data() : imagePixelData);
} else if (functionID == TexSubImage2D) {
@@ -4033,7 +4056,6 @@ void WebGLRenderingContextBase::texImageImpl(TexImageFunctionID functionID, GLen
DCHECK_EQ(functionID, TexSubImage3D);
contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, imageExtractor.imageWidth(), imageExtractor.imageHeight(), 1, format, type, needConversion ? data.data() : imagePixelData);
}
- restoreUnpackParameters();
}
bool WebGLRenderingContextBase::validateTexFunc(const char* functionName, TexImageFunctionType functionType, TexFuncValidationSourceType sourceType, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLint xoffset, GLint yoffset, GLint zoffset)
@@ -4175,14 +4197,11 @@ void WebGLRenderingContextBase::texImageHelperDOMArrayBufferView(TexImageFunctio
return;
}
- if (changeUnpackAlignment)
- resetUnpackParameters();
+ ScopedUnpackParametersResetRestore temporaryResetUnpack(this, changeUnpackAlignment);
if (functionID == TexImage2D)
texImage2DBase(target, level, internalformat, width, height, border, format, type, data);
else if (functionID == TexSubImage2D)
contextGL()->TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data);
- if (changeUnpackAlignment)
- restoreUnpackParameters();
}
void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLint internalformat,
@@ -4232,7 +4251,7 @@ void WebGLRenderingContextBase::texImageHelperImageData(TexImageFunctionID funct
return;
}
}
- resetUnpackParameters();
+ ScopedUnpackParametersResetRestore temporaryResetUnpack(this);
if (functionID == TexImage2D) {
texImage2DBase(target, level, internalformat, pixels->width(), pixels->height(), border, format, type, needConversion ? data.data() : pixels->data()->data());
} else if (functionID == TexSubImage2D) {
@@ -4241,7 +4260,6 @@ void WebGLRenderingContextBase::texImageHelperImageData(TexImageFunctionID funct
DCHECK_EQ(functionID, TexSubImage3D);
contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, pixels->width(), pixels->height(), depth, format, type, needConversion ? data.data() : pixels->data()->data());
}
- restoreUnpackParameters();
}
void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLint internalformat,
@@ -4479,6 +4497,13 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement(TexImageFunctionI
}
}
+ {
+ ScopedUnpackParametersResetRestore(this, m_unpackFlipY || m_unpackPremultiplyAlpha);
+ if (video->texImageImpl(getTexImageFunctionName(functionID), target, contextGL(), level, internalformat, format, type, xoffset, yoffset, zoffset,
+ m_unpackFlipY, m_unpackPremultiplyAlpha && m_unpackColorspaceConversion == GL_NONE))
+ return;
+ }
+
RefPtr<Image> image = videoFrameToImage(video);
if (!image)
return;
@@ -4559,7 +4584,7 @@ void WebGLRenderingContextBase::texImageHelperImageBitmap(TexImageFunctionID fun
return;
}
}
- resetUnpackParameters();
+ ScopedUnpackParametersResetRestore temporaryResetUnpack(this);
if (functionID == TexImage2D) {
texImage2DBase(target, level, internalformat, bitmap->width(), bitmap->height(), 0, format, type, needConversion ? data.data() : pixelDataPtr);
} else if (functionID == TexSubImage2D) {
@@ -4568,7 +4593,6 @@ void WebGLRenderingContextBase::texImageHelperImageBitmap(TexImageFunctionID fun
DCHECK_EQ(functionID, TexSubImage3D);
contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, bitmap->width(), bitmap->height(), 1, format, type, needConversion ? data.data() : pixelDataPtr);
}
- restoreUnpackParameters();
}
void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLint internalformat,

Powered by Google App Engine
This is Rietveld 408576698