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

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 1573173002: Make WebGL's texImage2D and texSubImage2D handle cross-origin ImageBitmap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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 unified diff | Download patch
OLDNEW
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 4488 matching lines...) Expand 10 before | Expand all | Expand 10 after
4499 } 4499 }
4500 4500
4501 // Normal pure SW path. 4501 // Normal pure SW path.
4502 RefPtr<Image> image = videoFrameToImage(video); 4502 RefPtr<Image> image = videoFrameToImage(video);
4503 if (!image) 4503 if (!image)
4504 return; 4504 return;
4505 texImage2DImpl(target, level, internalformat, format, type, image.get(), Web GLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha); 4505 texImage2DImpl(target, level, internalformat, format, type, image.get(), Web GLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha);
4506 } 4506 }
4507 4507
4508 void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLint int ernalformat, 4508 void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLint int ernalformat,
4509 GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap) 4509 GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap, Exce ptionState& exceptionState)
4510 { 4510 {
4511 ASSERT(bitmap->bitmapImage()); 4511 ASSERT(bitmap->bitmapImage());
4512 if (bitmap->isNeutered()) { 4512 if (bitmap->isNeutered()) {
4513 synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "The source data has b een neutered."); 4513 synthesizeGLError(GL_INVALID_VALUE, "texImage2D", "The source data has b een neutered.");
4514 return; 4514 return;
4515 } 4515 }
4516 if (!bitmap->originClean()) {
Justin Novosad 2016/01/11 17:52:13 Could you factor this out into a helper, like the
4517 exceptionState.throwSecurityError("The ImageBitmap contains cross-origin data, and may not be loaded.");
4518 return;
4519 }
4516 if (isContextLost() || !validateTexFunc("texImage2D", TexImage, SourceImageB itmap, target, level, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0)) 4520 if (isContextLost() || !validateTexFunc("texImage2D", TexImage, SourceImageB itmap, target, level, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0))
4517 return; 4521 return;
4518 StaticBitmapImage* imageForRender = bitmap->bitmapImage(); 4522 StaticBitmapImage* imageForRender = bitmap->bitmapImage();
4519 texImage2DImpl(target, level, internalformat, format, type, imageForRender, WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha); 4523 texImage2DImpl(target, level, internalformat, format, type, imageForRender, WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha);
4520 } 4524 }
4521 4525
4522 void WebGLRenderingContextBase::texParameter(GLenum target, GLenum pname, GLfloa t paramf, GLint parami, bool isFloat) 4526 void WebGLRenderingContextBase::texParameter(GLenum target, GLenum pname, GLfloa t paramf, GLint parami, bool isFloat)
4523 { 4527 {
4524 if (isContextLost()) 4528 if (isContextLost())
4525 return; 4529 return;
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
4725 || !validateTexFunc("texSubImage2D", TexSubImage, SourceHTMLVideoElement , target, level, 0, video->videoWidth(), video->videoHeight(), 1, 0, format, typ e, xoffset, yoffset, 0)) 4729 || !validateTexFunc("texSubImage2D", TexSubImage, SourceHTMLVideoElement , target, level, 0, video->videoWidth(), video->videoHeight(), 1, 0, format, typ e, xoffset, yoffset, 0))
4726 return; 4730 return;
4727 4731
4728 RefPtr<Image> image = videoFrameToImage(video); 4732 RefPtr<Image> image = videoFrameToImage(video);
4729 if (!image) 4733 if (!image)
4730 return; 4734 return;
4731 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image.get() , WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha); 4735 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image.get() , WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultiplyAlpha);
4732 } 4736 }
4733 4737
4734 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, 4738 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
4735 GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap) 4739 GLenum format, GLenum type, PassRefPtrWillBeRawPtr<ImageBitmap> bitmap, Exce ptionState& exceptionState)
4736 { 4740 {
4737 ASSERT(bitmap->bitmapImage()); 4741 ASSERT(bitmap->bitmapImage());
4738 if (bitmap->isNeutered()) { 4742 if (bitmap->isNeutered()) {
4739 synthesizeGLError(GL_INVALID_VALUE, "texSubImage2D", "The source data ha s been neutered."); 4743 synthesizeGLError(GL_INVALID_VALUE, "texSubImage2D", "The source data ha s been neutered.");
4740 return; 4744 return;
4741 } 4745 }
4746 if (!bitmap->originClean()) {
Justin Novosad 2016/01/11 17:52:13 Ditto. -> use helper to avoid duplicated code (and
4747 exceptionState.throwSecurityError("The ImageBitmap contains cross-origin data, and may not be loaded.");
4748 return;
4749 }
4742 if (isContextLost() || !validateTexFunc("texSubImage2D", TexSubImage, Source ImageBitmap, target, level, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0)) 4750 if (isContextLost() || !validateTexFunc("texSubImage2D", TexSubImage, Source ImageBitmap, target, level, 0, bitmap->width(), bitmap->height(), 1, 0, format, type, 0, 0, 0))
4743 return; 4751 return;
4744 StaticBitmapImage* imageForRender = bitmap->bitmapImage(); 4752 StaticBitmapImage* imageForRender = bitmap->bitmapImage();
4745 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, imageForRen der, WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha ); 4753 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, imageForRen der, WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultiplyAlpha );
4746 } 4754 }
4747 4755
4748 void WebGLRenderingContextBase::uniform1f(const WebGLUniformLocation* location, GLfloat x) 4756 void WebGLRenderingContextBase::uniform1f(const WebGLUniformLocation* location, GLfloat x)
4749 { 4757 {
4750 if (isContextLost() || !location) 4758 if (isContextLost() || !location)
4751 return; 4759 return;
(...skipping 2185 matching lines...) Expand 10 before | Expand all | Expand 10 after
6937 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1); 6945 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
6938 } 6946 }
6939 6947
6940 void WebGLRenderingContextBase::restoreUnpackParameters() 6948 void WebGLRenderingContextBase::restoreUnpackParameters()
6941 { 6949 {
6942 if (m_unpackAlignment != 1) 6950 if (m_unpackAlignment != 1)
6943 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment); 6951 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
6944 } 6952 }
6945 6953
6946 } // namespace blink 6954 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698