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

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

Issue 2476693002: WebGL & 16-bit video stream: upload to FLOAT texture. (Closed)
Patch Set: Fixes. phoglung@, hubbe@, thanks. Created 4 years, 1 month 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 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 public: 494 public:
495 explicit ScopedFramebufferRestorer(WebGLRenderingContextBase* context) 495 explicit ScopedFramebufferRestorer(WebGLRenderingContextBase* context)
496 : m_context(context) {} 496 : m_context(context) {}
497 497
498 ~ScopedFramebufferRestorer() { m_context->restoreCurrentFramebuffer(); } 498 ~ScopedFramebufferRestorer() { m_context->restoreCurrentFramebuffer(); }
499 499
500 private: 500 private:
501 Member<WebGLRenderingContextBase> m_context; 501 Member<WebGLRenderingContextBase> m_context;
502 }; 502 };
503 503
504 class ScopedUnpackParametersResetRestore {
505 STACK_ALLOCATED();
506
507 public:
508 explicit ScopedUnpackParametersResetRestore(
509 WebGLRenderingContextBase* context,
510 bool enabled = true)
511 : m_context(context), m_enabled(enabled) {
512 if (enabled)
513 m_context->resetUnpackParameters();
514 }
515
516 ~ScopedUnpackParametersResetRestore() {
517 if (m_enabled)
518 m_context->restoreUnpackParameters();
519 }
520
521 private:
522 Member<WebGLRenderingContextBase> m_context;
523 bool m_enabled;
524 };
525
504 static void formatWebGLStatusString(const StringView& glInfo, 526 static void formatWebGLStatusString(const StringView& glInfo,
505 const StringView& infoString, 527 const StringView& infoString,
506 StringBuilder& builder) { 528 StringBuilder& builder) {
507 if (infoString.isEmpty()) 529 if (infoString.isEmpty())
508 return; 530 return;
509 builder.append(", "); 531 builder.append(", ");
510 builder.append(glInfo); 532 builder.append(glInfo);
511 builder.append(" = "); 533 builder.append(" = ");
512 builder.append(infoString); 534 builder.append(infoString);
513 } 535 }
(...skipping 3895 matching lines...) Expand 10 before | Expand all | Expand 10 after
4409 if (!WebGLImageConversion::packImageData( 4431 if (!WebGLImageConversion::packImageData(
4410 image, imagePixelData, format, type, flipY, alphaOp, 4432 image, imagePixelData, format, type, flipY, alphaOp,
4411 sourceDataFormat, imageExtractor.imageWidth(), 4433 sourceDataFormat, imageExtractor.imageWidth(),
4412 imageExtractor.imageHeight(), adjustedSourceImageRect, 4434 imageExtractor.imageHeight(), adjustedSourceImageRect,
4413 imageExtractor.imageSourceUnpackAlignment(), data)) { 4435 imageExtractor.imageSourceUnpackAlignment(), data)) {
4414 synthesizeGLError(GL_INVALID_VALUE, funcName, "packImage error"); 4436 synthesizeGLError(GL_INVALID_VALUE, funcName, "packImage error");
4415 return; 4437 return;
4416 } 4438 }
4417 } 4439 }
4418 4440
4419 resetUnpackParameters(); 4441 ScopedUnpackParametersResetRestore temporaryResetUnpack(this);
4420 if (functionID == TexImage2D) { 4442 if (functionID == TexImage2D) {
4421 texImage2DBase(target, level, internalformat, 4443 texImage2DBase(target, level, internalformat,
4422 adjustedSourceImageRect.width(), 4444 adjustedSourceImageRect.width(),
4423 adjustedSourceImageRect.height(), 0, format, type, 4445 adjustedSourceImageRect.height(), 0, format, type,
4424 needConversion ? data.data() : imagePixelData); 4446 needConversion ? data.data() : imagePixelData);
4425 } else if (functionID == TexSubImage2D) { 4447 } else if (functionID == TexSubImage2D) {
4426 contextGL()->TexSubImage2D(target, level, xoffset, yoffset, 4448 contextGL()->TexSubImage2D(target, level, xoffset, yoffset,
4427 adjustedSourceImageRect.width(), 4449 adjustedSourceImageRect.width(),
4428 adjustedSourceImageRect.height(), format, type, 4450 adjustedSourceImageRect.height(), format, type,
4429 needConversion ? data.data() : imagePixelData); 4451 needConversion ? data.data() : imagePixelData);
(...skipping 10 matching lines...) Expand all
4440 depth, 0, format, type, 4462 depth, 0, format, type,
4441 needConversion ? data.data() : imagePixelData); 4463 needConversion ? data.data() : imagePixelData);
4442 } else { 4464 } else {
4443 DCHECK_EQ(functionID, TexSubImage3D); 4465 DCHECK_EQ(functionID, TexSubImage3D);
4444 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, 4466 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset,
4445 adjustedSourceImageRect.width(), uploadHeight, 4467 adjustedSourceImageRect.width(), uploadHeight,
4446 depth, format, type, 4468 depth, format, type,
4447 needConversion ? data.data() : imagePixelData); 4469 needConversion ? data.data() : imagePixelData);
4448 } 4470 }
4449 } 4471 }
4450 restoreUnpackParameters();
4451 } 4472 }
4452 4473
4453 bool WebGLRenderingContextBase::validateTexFunc( 4474 bool WebGLRenderingContextBase::validateTexFunc(
4454 const char* functionName, 4475 const char* functionName,
4455 TexImageFunctionType functionType, 4476 TexImageFunctionType functionType,
4456 TexFuncValidationSourceType sourceType, 4477 TexFuncValidationSourceType sourceType,
4457 GLenum target, 4478 GLenum target,
4458 GLint level, 4479 GLint level,
4459 GLenum internalformat, 4480 GLenum internalformat,
4460 GLsizei width, 4481 GLsizei width,
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
4646 convertTexInternalFormat(internalformat, type), 4667 convertTexInternalFormat(internalformat, type),
4647 width, height, depth, border, format, type, data); 4668 width, height, depth, border, format, type, data);
4648 return; 4669 return;
4649 } 4670 }
4650 if (functionID == TexSubImage3D) { 4671 if (functionID == TexSubImage3D) {
4651 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, 4672 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, width,
4652 height, depth, format, type, data); 4673 height, depth, format, type, data);
4653 return; 4674 return;
4654 } 4675 }
4655 4676
4656 if (changeUnpackAlignment) 4677 ScopedUnpackParametersResetRestore temporaryResetUnpack(
4657 resetUnpackParameters(); 4678 this, changeUnpackAlignment);
4658 if (functionID == TexImage2D) 4679 if (functionID == TexImage2D)
4659 texImage2DBase(target, level, internalformat, width, height, border, format, 4680 texImage2DBase(target, level, internalformat, width, height, border, format,
4660 type, data); 4681 type, data);
4661 else if (functionID == TexSubImage2D) 4682 else if (functionID == TexSubImage2D)
4662 contextGL()->TexSubImage2D(target, level, xoffset, yoffset, width, height, 4683 contextGL()->TexSubImage2D(target, level, xoffset, yoffset, width, height,
4663 format, type, data); 4684 format, type, data);
4664 if (changeUnpackAlignment)
4665 restoreUnpackParameters();
4666 } 4685 }
4667 4686
4668 void WebGLRenderingContextBase::texImage2D(GLenum target, 4687 void WebGLRenderingContextBase::texImage2D(GLenum target,
4669 GLint level, 4688 GLint level,
4670 GLint internalformat, 4689 GLint internalformat,
4671 GLsizei width, 4690 GLsizei width,
4672 GLsizei height, 4691 GLsizei height,
4673 GLint border, 4692 GLint border,
4674 GLenum format, 4693 GLenum format,
4675 GLenum type, 4694 GLenum type,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
4743 } 4762 }
4744 if (!WebGLImageConversion::extractImageData( 4763 if (!WebGLImageConversion::extractImageData(
4745 pixels->data()->data(), 4764 pixels->data()->data(),
4746 WebGLImageConversion::DataFormat::DataFormatRGBA8, pixels->size(), 4765 WebGLImageConversion::DataFormat::DataFormatRGBA8, pixels->size(),
4747 adjustedSourceImageRect, format, type, m_unpackFlipY, 4766 adjustedSourceImageRect, format, type, m_unpackFlipY,
4748 m_unpackPremultiplyAlpha, data)) { 4767 m_unpackPremultiplyAlpha, data)) {
4749 synthesizeGLError(GL_INVALID_VALUE, funcName, "bad image data"); 4768 synthesizeGLError(GL_INVALID_VALUE, funcName, "bad image data");
4750 return; 4769 return;
4751 } 4770 }
4752 } 4771 }
4753 resetUnpackParameters(); 4772 ScopedUnpackParametersResetRestore temporaryResetUnpack(this);
4754 const uint8_t* bytes = needConversion ? data.data() : pixels->data()->data(); 4773 const uint8_t* bytes = needConversion ? data.data() : pixels->data()->data();
4755 if (functionID == TexImage2D) { 4774 if (functionID == TexImage2D) {
4756 DCHECK_EQ(unpackImageHeight, 0); 4775 DCHECK_EQ(unpackImageHeight, 0);
4757 texImage2DBase( 4776 texImage2DBase(
4758 target, level, internalformat, adjustedSourceImageRect.width(), 4777 target, level, internalformat, adjustedSourceImageRect.width(),
4759 adjustedSourceImageRect.height(), border, format, type, bytes); 4778 adjustedSourceImageRect.height(), border, format, type, bytes);
4760 } else if (functionID == TexSubImage2D) { 4779 } else if (functionID == TexSubImage2D) {
4761 DCHECK_EQ(unpackImageHeight, 0); 4780 DCHECK_EQ(unpackImageHeight, 0);
4762 contextGL()->TexSubImage2D( 4781 contextGL()->TexSubImage2D(
4763 target, level, xoffset, yoffset, adjustedSourceImageRect.width(), 4782 target, level, xoffset, yoffset, adjustedSourceImageRect.width(),
4764 adjustedSourceImageRect.height(), format, type, bytes); 4783 adjustedSourceImageRect.height(), format, type, bytes);
4765 } else { 4784 } else {
4766 GLint uploadHeight = adjustedSourceImageRect.height(); 4785 GLint uploadHeight = adjustedSourceImageRect.height();
4767 if (unpackImageHeight) { 4786 if (unpackImageHeight) {
4768 // GL_UNPACK_IMAGE_HEIGHT overrides the passed-in height. 4787 // GL_UNPACK_IMAGE_HEIGHT overrides the passed-in height.
4769 uploadHeight = unpackImageHeight; 4788 uploadHeight = unpackImageHeight;
4770 } 4789 }
4771 if (functionID == TexImage3D) { 4790 if (functionID == TexImage3D) {
4772 contextGL()->TexImage3D(target, level, internalformat, 4791 contextGL()->TexImage3D(target, level, internalformat,
4773 adjustedSourceImageRect.width(), uploadHeight, 4792 adjustedSourceImageRect.width(), uploadHeight,
4774 depth, border, format, type, bytes); 4793 depth, border, format, type, bytes);
4775 } else { 4794 } else {
4776 DCHECK_EQ(functionID, TexSubImage3D); 4795 DCHECK_EQ(functionID, TexSubImage3D);
4777 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, 4796 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset,
4778 adjustedSourceImageRect.width(), uploadHeight, 4797 adjustedSourceImageRect.width(), uploadHeight,
4779 depth, format, type, bytes); 4798 depth, format, type, bytes);
4780 } 4799 }
4781 } 4800 }
4782 restoreUnpackParameters();
4783 } 4801 }
4784 4802
4785 void WebGLRenderingContextBase::texImage2D(GLenum target, 4803 void WebGLRenderingContextBase::texImage2D(GLenum target,
4786 GLint level, 4804 GLint level,
4787 GLint internalformat, 4805 GLint internalformat,
4788 GLenum format, 4806 GLenum format,
4789 GLenum type, 4807 GLenum type,
4790 ImageData* pixels) { 4808 ImageData* pixels) {
4791 texImageHelperImageData(TexImage2D, target, level, internalformat, 0, format, 4809 texImageHelperImageData(TexImage2D, target, level, internalformat, 0, format,
4792 type, 1, 0, 0, 0, pixels, getImageDataSize(pixels), 4810 type, 1, 0, 0, 0, pixels, getImageDataSize(pixels),
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
5158 level, internalformat, video->videoWidth(), 5176 level, internalformat, video->videoWidth(),
5159 video->videoHeight(), 1, 0, format, type, xoffset, 5177 video->videoHeight(), 1, 0, format, type, xoffset,
5160 yoffset, zoffset)) 5178 yoffset, zoffset))
5161 return; 5179 return;
5162 5180
5163 bool sourceImageRectIsDefault = 5181 bool sourceImageRectIsDefault =
5164 sourceImageRect == sentinelEmptyRect() || 5182 sourceImageRect == sentinelEmptyRect() ||
5165 sourceImageRect == 5183 sourceImageRect ==
5166 IntRect(0, 0, video->videoWidth(), video->videoHeight()); 5184 IntRect(0, 0, video->videoWidth(), video->videoHeight());
5167 if (functionID == TexImage2D && sourceImageRectIsDefault && depth == 1 && 5185 if (functionID == TexImage2D && sourceImageRectIsDefault && depth == 1 &&
5168 unpackImageHeight == 0) { 5186 unpackImageHeight == 0 && GL_TEXTURE_2D == target &&
5187 Extensions3DUtil::canUseCopyTextureCHROMIUM(target, internalformat, type,
5188 level)) {
5169 DCHECK_EQ(xoffset, 0); 5189 DCHECK_EQ(xoffset, 0);
5170 DCHECK_EQ(yoffset, 0); 5190 DCHECK_EQ(yoffset, 0);
5171 DCHECK_EQ(zoffset, 0); 5191 DCHECK_EQ(zoffset, 0);
5172 // Go through the fast path doing a GPU-GPU textures copy without a readback 5192 // Go through the fast path doing a GPU-GPU textures copy without a readback
5173 // to system memory if possible. Otherwise, it will fall back to the normal 5193 // to system memory if possible. Otherwise, it will fall back to the normal
5174 // SW path. 5194 // SW path.
5175 if (GL_TEXTURE_2D == target) { 5195 if (video->copyVideoTextureToPlatformTexture(
5176 if (Extensions3DUtil::canUseCopyTextureCHROMIUM(target, internalformat, 5196 contextGL(), texture->object(), internalformat, type,
5177 type, level) && 5197 m_unpackPremultiplyAlpha, m_unpackFlipY)) {
5178 video->copyVideoTextureToPlatformTexture( 5198 return;
5179 contextGL(), texture->object(), internalformat, type, 5199 }
5180 m_unpackPremultiplyAlpha, m_unpackFlipY)) {
5181 return;
5182 }
5183 5200
5184 // Try using an accelerated image buffer, this allows YUV conversion to be 5201 // Try using an accelerated image buffer, this allows YUV conversion to be
5185 // done on the GPU. 5202 // done on the GPU.
5186 std::unique_ptr<ImageBufferSurface> surface = 5203 std::unique_ptr<ImageBufferSurface> surface =
5187 wrapUnique(new AcceleratedImageBufferSurface( 5204 wrapUnique(new AcceleratedImageBufferSurface(
5188 IntSize(video->videoWidth(), video->videoHeight()))); 5205 IntSize(video->videoWidth(), video->videoHeight())));
5189 if (surface->isValid()) { 5206 if (surface->isValid()) {
5190 std::unique_ptr<ImageBuffer> imageBuffer( 5207 std::unique_ptr<ImageBuffer> imageBuffer(
5191 ImageBuffer::create(std::move(surface))); 5208 ImageBuffer::create(std::move(surface)));
5192 if (imageBuffer) { 5209 if (imageBuffer) {
5193 // The video element paints an RGBA frame into our surface here. By 5210 // The video element paints an RGBA frame into our surface here. By
5194 // using an AcceleratedImageBufferSurface, we enable the 5211 // using an AcceleratedImageBufferSurface, we enable the WebMediaPlayer
5195 // WebMediaPlayer implementation to do any necessary color space 5212 // implementation to do any necessary color space conversion on the GPU
5196 // conversion on the GPU (though it 5213 // (though it may still do a CPU conversion and upload the results).
5197 // may still do a CPU conversion and upload the results). 5214 video->paintCurrentFrame(
5198 video->paintCurrentFrame( 5215 imageBuffer->canvas(),
5199 imageBuffer->canvas(), 5216 IntRect(0, 0, video->videoWidth(), video->videoHeight()), nullptr);
5200 IntRect(0, 0, video->videoWidth(), video->videoHeight()),
5201 nullptr);
5202 5217
5203 // This is a straight GPU-GPU copy, any necessary color space 5218 // This is a straight GPU-GPU copy, any necessary color space conversion
5204 // conversion was handled in the paintCurrentFrameInContext() call. 5219 // was handled in the paintCurrentFrameInContext() call.
5205 5220
5206 // Note that copyToPlatformTexture no longer allocates the 5221 // Note that copyToPlatformTexture no longer allocates the destination
5207 // destination texture. 5222 // texture.
5208 texImage2DBase(target, level, internalformat, video->videoWidth(), 5223 texImage2DBase(target, level, internalformat, video->videoWidth(),
5209 video->videoHeight(), 0, format, type, nullptr); 5224 video->videoHeight(), 0, format, type, nullptr);
5210 5225
5211 if (imageBuffer->copyToPlatformTexture( 5226 if (imageBuffer->copyToPlatformTexture(
5212 contextGL(), texture->object(), internalformat, type, level, 5227 contextGL(), texture->object(), internalformat, type, level,
5213 m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(0, 0), 5228 m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(0, 0),
5214 IntRect(0, 0, video->videoWidth(), video->videoHeight()))) { 5229 IntRect(0, 0, video->videoWidth(), video->videoHeight()))) {
5215 return; 5230 return;
5216 }
5217 } 5231 }
5218 } 5232 }
5219 } 5233 }
5220 } 5234 }
5221 5235
5236 {
5237 // Try using optimized CPU-GPU path for some formats: e.g. Y16 and Y8. It
5238 // leaves early for other formats or if frame is stored on GPU.
5239 ScopedUnpackParametersResetRestore(
5240 this, m_unpackFlipY || m_unpackPremultiplyAlpha);
5241 if (video->texImageImpl(
5242 static_cast<WebMediaPlayer::TexImageFunctionID>(functionID), target,
5243 contextGL(), level, convertTexInternalFormat(internalformat, type),
5244 format, type, xoffset, yoffset, zoffset, m_unpackFlipY,
5245 m_unpackPremultiplyAlpha &&
5246 m_unpackColorspaceConversion == GL_NONE))
5247 return;
5248 }
5249
5222 RefPtr<Image> image = videoFrameToImage(video); 5250 RefPtr<Image> image = videoFrameToImage(video);
5223 if (!image) 5251 if (!image)
5224 return; 5252 return;
5225 texImageImpl(functionID, target, level, internalformat, xoffset, yoffset, 5253 texImageImpl(functionID, target, level, internalformat, xoffset, yoffset,
5226 zoffset, format, type, image.get(), 5254 zoffset, format, type, image.get(),
5227 WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, 5255 WebGLImageConversion::HtmlDomVideo, m_unpackFlipY,
5228 m_unpackPremultiplyAlpha, sourceImageRect, depth, 5256 m_unpackPremultiplyAlpha, sourceImageRect, depth,
5229 unpackImageHeight); 5257 unpackImageHeight);
5230 } 5258 }
5231 5259
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
5336 data)) || 5364 data)) ||
5337 (isPixelDataRGBA && 5365 (isPixelDataRGBA &&
5338 !WebGLImageConversion::extractImageData( 5366 !WebGLImageConversion::extractImageData(
5339 pixelDataPtr, WebGLImageConversion::DataFormat::DataFormatRGBA8, 5367 pixelDataPtr, WebGLImageConversion::DataFormat::DataFormatRGBA8,
5340 bitmap->size(), sourceImageRect, format, type, false, false, 5368 bitmap->size(), sourceImageRect, format, type, false, false,
5341 data))) { 5369 data))) {
5342 synthesizeGLError(GL_INVALID_VALUE, funcName, "bad image data"); 5370 synthesizeGLError(GL_INVALID_VALUE, funcName, "bad image data");
5343 return; 5371 return;
5344 } 5372 }
5345 } 5373 }
5346 resetUnpackParameters(); 5374 ScopedUnpackParametersResetRestore temporaryResetUnpack(this);
5347 if (functionID == TexImage2D) { 5375 if (functionID == TexImage2D) {
5348 texImage2DBase(target, level, internalformat, bitmap->width(), 5376 texImage2DBase(target, level, internalformat, bitmap->width(),
5349 bitmap->height(), 0, format, type, 5377 bitmap->height(), 0, format, type,
5350 needConversion ? data.data() : pixelDataPtr); 5378 needConversion ? data.data() : pixelDataPtr);
5351 } else if (functionID == TexSubImage2D) { 5379 } else if (functionID == TexSubImage2D) {
5352 contextGL()->TexSubImage2D(target, level, xoffset, yoffset, bitmap->width(), 5380 contextGL()->TexSubImage2D(target, level, xoffset, yoffset, bitmap->width(),
5353 bitmap->height(), format, type, 5381 bitmap->height(), format, type,
5354 needConversion ? data.data() : pixelDataPtr); 5382 needConversion ? data.data() : pixelDataPtr);
5355 } else { 5383 } else {
5356 DCHECK_EQ(functionID, TexSubImage3D); 5384 DCHECK_EQ(functionID, TexSubImage3D);
5357 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset, 5385 contextGL()->TexSubImage3D(target, level, xoffset, yoffset, zoffset,
5358 bitmap->width(), bitmap->height(), 1, format, 5386 bitmap->width(), bitmap->height(), 1, format,
5359 type, 5387 type,
5360 needConversion ? data.data() : pixelDataPtr); 5388 needConversion ? data.data() : pixelDataPtr);
5361 } 5389 }
5362 restoreUnpackParameters();
5363 } 5390 }
5364 5391
5365 void WebGLRenderingContextBase::texImage2D(GLenum target, 5392 void WebGLRenderingContextBase::texImage2D(GLenum target,
5366 GLint level, 5393 GLint level,
5367 GLint internalformat, 5394 GLint internalformat,
5368 GLenum format, 5395 GLenum format,
5369 GLenum type, 5396 GLenum type,
5370 ImageBitmap* bitmap, 5397 ImageBitmap* bitmap,
5371 ExceptionState& exceptionState) { 5398 ExceptionState& exceptionState) {
5372 texImageHelperImageBitmap(TexImage2D, target, level, internalformat, format, 5399 texImageHelperImageBitmap(TexImage2D, target, level, internalformat, format,
(...skipping 2396 matching lines...) Expand 10 before | Expand all | Expand 10 after
7769 7796
7770 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas( 7797 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas(
7771 HTMLCanvasElementOrOffscreenCanvas& result) const { 7798 HTMLCanvasElementOrOffscreenCanvas& result) const {
7772 if (canvas()) 7799 if (canvas())
7773 result.setHTMLCanvasElement(canvas()); 7800 result.setHTMLCanvasElement(canvas());
7774 else 7801 else
7775 result.setOffscreenCanvas(getOffscreenCanvas()); 7802 result.setOffscreenCanvas(getOffscreenCanvas());
7776 } 7803 }
7777 7804
7778 } // namespace blink 7805 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698