| 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 4c2ebadfd568aebe2fd11d95476bb8508c0a495a..3e6fea9a423f24eecc7e84436deef7f7b76368c8 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| @@ -649,8 +649,9 @@ WebGLRenderingContextBase::createWebGraphicsContext3DProvider(
|
| }
|
| Settings* settings = frame->settings();
|
|
|
| - // The FrameLoaderClient might block creation of a new WebGL context despite the page settings; in
|
| - // particular, if WebGL contexts were lost one or more times via the GL_ARB_robustness extension.
|
| + // The FrameLoaderClient might block creation of a new WebGL context despite
|
| + // the page settings; in particular, if WebGL contexts were lost one or more
|
| + // times via the GL_ARB_robustness extension.
|
| if (!frame->loader().client()->allowWebGL(settings &&
|
| settings->webGLEnabled())) {
|
| canvas->dispatchEvent(WebGLContextEvent::create(
|
| @@ -700,7 +701,8 @@ void WebGLRenderingContextBase::commit(ExceptionState& exceptionState) {
|
| }
|
| if (!drawingBuffer())
|
| return;
|
| - // TODO(crbug.com/646864): Make commit() work correctly with { preserveDrawingBuffer : true }.
|
| + // TODO(crbug.com/646864): Make commit() work correctly with
|
| + // { preserveDrawingBuffer : true }.
|
| getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(
|
| std::move(drawingBuffer()->transferToStaticBitmapImage()));
|
| }
|
| @@ -722,8 +724,9 @@ PassRefPtr<Image> WebGLRenderingContextBase::getImage(
|
| std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(std::move(surface));
|
| if (!buffer->copyRenderingResultsFromDrawingBuffer(drawingBuffer(),
|
| BackBuffer)) {
|
| - // copyRenderingResultsFromDrawingBuffer is expected to always succeed because we've
|
| - // explicitly created an Accelerated surface and have already validated it.
|
| + // copyRenderingResultsFromDrawingBuffer is expected to always succeed
|
| + // because we've explicitly created an Accelerated surface and have already
|
| + // validated it.
|
| NOTREACHED();
|
| return nullptr;
|
| }
|
| @@ -1154,7 +1157,8 @@ void WebGLRenderingContextBase::initializeNewContext() {
|
| if (isWebGL2OrHigher())
|
| contextGL()->Enable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
|
|
|
| - // This ensures that the context has a valid "lastFlushID" and won't be mistakenly identified as the "least recently used" context.
|
| + // This ensures that the context has a valid "lastFlushID" and won't be
|
| + // mistakenly identified as the "least recently used" context.
|
| contextGL()->Flush();
|
|
|
| for (int i = 0; i < WebGLExtensionNameCount; ++i)
|
| @@ -1210,7 +1214,8 @@ void WebGLRenderingContextBase::removeAllCompressedTextureFormats() {
|
| m_compressedTextureFormats.clear();
|
| }
|
|
|
| -// Helper function for V8 bindings to identify what version of WebGL a CanvasRenderingContext supports.
|
| +// Helper function for V8 bindings to identify what version of WebGL a
|
| +// CanvasRenderingContext supports.
|
| unsigned WebGLRenderingContextBase::getWebGLVersion(
|
| const CanvasRenderingContext* context) {
|
| if (!context->is3d())
|
| @@ -1220,7 +1225,8 @@ unsigned WebGLRenderingContextBase::getWebGLVersion(
|
|
|
| WebGLRenderingContextBase::~WebGLRenderingContextBase() {
|
| // Remove all references to WebGLObjects so if they are the last reference
|
| - // they will be freed before the last context is removed from the context group.
|
| + // they will be freed before the last context is removed from the context
|
| + // group.
|
| m_boundArrayBuffer = nullptr;
|
| m_defaultVertexArrayObject = nullptr;
|
| m_boundVertexArrayObject = nullptr;
|
| @@ -1229,8 +1235,9 @@ WebGLRenderingContextBase::~WebGLRenderingContextBase() {
|
| m_renderbufferBinding = nullptr;
|
|
|
| // WebGLTexture shared objects will be detached and deleted
|
| - // m_contextGroup->removeContext(this), which will bring about deleteTexture() calls.
|
| - // We null these out to avoid accessing those members in deleteTexture().
|
| + // m_contextGroup->removeContext(this), which will bring about deleteTexture()
|
| + // calls. We null these out to avoid accessing those members in
|
| + // deleteTexture().
|
| for (size_t i = 0; i < m_textureUnits.size(); ++i) {
|
| m_textureUnits[i].m_texture2DBinding = nullptr;
|
| m_textureUnits[i].m_textureCubeMapBinding = nullptr;
|
| @@ -1327,7 +1334,8 @@ WebGLRenderingContextBase::clearIfComposited(GLbitfield mask) {
|
| return Skipped;
|
| }
|
|
|
| - // Determine if it's possible to combine the clear the user asked for and this clear.
|
| + // Determine if it's possible to combine the clear the user asked for and this
|
| + // clear.
|
| bool combinedClear = mask && !m_scissorEnabled;
|
|
|
| contextGL()->Disable(GL_SCISSOR_TEST);
|
| @@ -1425,9 +1433,10 @@ bool WebGLRenderingContextBase::paintRenderingResultsToCanvas(
|
| drawingBuffer()->commit();
|
| if (!canvas()->buffer()->copyRenderingResultsFromDrawingBuffer(
|
| drawingBuffer(), sourceBuffer)) {
|
| - // Currently, copyRenderingResultsFromDrawingBuffer is expected to always succeed because cases
|
| - // where canvas()-buffer() is not accelerated are handle before reaching this point.
|
| - // If that assumption ever stops holding true, we may need to implement a fallback right here.
|
| + // Currently, copyRenderingResultsFromDrawingBuffer is expected to always
|
| + // succeed because cases where canvas()-buffer() is not accelerated are
|
| + // handle before reaching this point. If that assumption ever stops holding
|
| + // true, we may need to implement a fallback right here.
|
| ASSERT_NOT_REACHED();
|
| return false;
|
| }
|
| @@ -1466,29 +1475,31 @@ void WebGLRenderingContextBase::reshape(int width, int height) {
|
| contextGL()->BindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
| }
|
|
|
| - // This is an approximation because at WebGLRenderingContextBase level we don't
|
| - // know if the underlying FBO uses textures or renderbuffers.
|
| + // This is an approximation because at WebGLRenderingContextBase level we
|
| + // don't know if the underlying FBO uses textures or renderbuffers.
|
| GLint maxSize = std::min(m_maxTextureSize, m_maxRenderbufferSize);
|
| GLint maxWidth = std::min(maxSize, m_maxViewportDims[0]);
|
| GLint maxHeight = std::min(maxSize, m_maxViewportDims[1]);
|
| width = clamp(width, 1, maxWidth);
|
| height = clamp(height, 1, maxHeight);
|
|
|
| - // Limit drawing buffer area to 4k*4k to avoid memory exhaustion. Width or height may be larger than
|
| - // 4k as long as it's within the max viewport dimensions and total area remains within the limit.
|
| + // Limit drawing buffer area to 4k*4k to avoid memory exhaustion. Width or
|
| + // height may be larger than 4k as long as it's within the max viewport
|
| + // dimensions and total area remains within the limit.
|
| // For example: 5120x2880 should be fine.
|
| const int maxArea = 4096 * 4096;
|
| int currentArea = width * height;
|
| if (currentArea > maxArea) {
|
| - // If we've exceeded the area limit scale the buffer down, preserving ascpect ratio, until it fits.
|
| + // If we've exceeded the area limit scale the buffer down, preserving
|
| + // ascpect ratio, until it fits.
|
| float scaleFactor =
|
| sqrtf(static_cast<float>(maxArea) / static_cast<float>(currentArea));
|
| width = std::max(1, static_cast<int>(width * scaleFactor));
|
| height = std::max(1, static_cast<int>(height * scaleFactor));
|
| }
|
|
|
| - // We don't have to mark the canvas as dirty, since the newly created image buffer will also start off
|
| - // clear (and this matches what reshape will do).
|
| + // We don't have to mark the canvas as dirty, since the newly created image
|
| + // buffer will also start off clear (and this matches what reshape will do).
|
| drawingBuffer()->reset(IntSize(width, height));
|
| restoreStateAfterClear();
|
|
|
| @@ -1701,7 +1712,8 @@ void WebGLRenderingContextBase::bindTexture(GLenum target,
|
| m_onePlusMaxNonDefaultTextureUnit =
|
| max(m_activeTextureUnit + 1, m_onePlusMaxNonDefaultTextureUnit);
|
| } else {
|
| - // If the disabled index is the current maximum, trace backwards to find the new max enabled texture index
|
| + // If the disabled index is the current maximum, trace backwards to find the
|
| + // new max enabled texture index
|
| if (m_onePlusMaxNonDefaultTextureUnit == m_activeTextureUnit + 1) {
|
| findNewMaxNonDefaultTextureUnit();
|
| }
|
| @@ -1912,12 +1924,13 @@ void WebGLRenderingContextBase::clear(GLbitfield mask) {
|
| m_drawingBuffer.get());
|
|
|
| if (clearIfComposited(mask) != CombinedClear) {
|
| - // If clearing the default back buffer's depth buffer, also clear the stencil buffer, if one
|
| - // was allocated implicitly. This avoids performance problems on some GPUs.
|
| + // If clearing the default back buffer's depth buffer, also clear the
|
| + // stencil buffer, if one was allocated implicitly. This avoids performance
|
| + // problems on some GPUs.
|
| if (!m_framebufferBinding && drawingBuffer()->hasImplicitStencilBuffer() &&
|
| (mask & GL_DEPTH_BUFFER_BIT)) {
|
| - // It shouldn't matter what value it's cleared to, since in other queries in the API, we
|
| - // claim that the stencil buffer doesn't exist.
|
| + // It shouldn't matter what value it's cleared to, since in other queries
|
| + // in the API, we claim that the stencil buffer doesn't exist.
|
| mask |= GL_STENCIL_BUFFER_BIT;
|
| }
|
| contextGL()->Clear(mask);
|
| @@ -2262,7 +2275,8 @@ void WebGLRenderingContextBase::deleteTexture(WebGLTexture* texture) {
|
| getFramebufferBinding(GL_READ_FRAMEBUFFER)
|
| ->removeAttachmentFromBoundFramebuffer(GL_READ_FRAMEBUFFER, texture);
|
|
|
| - // If the deleted was bound to the the current maximum index, trace backwards to find the new max texture index
|
| + // If the deleted was bound to the the current maximum index, trace backwards
|
| + // to find the new max texture index.
|
| if (m_onePlusMaxNonDefaultTextureUnit ==
|
| static_cast<unsigned long>(maxBoundTextureIndex + 1)) {
|
| findNewMaxNonDefaultTextureUnit();
|
| @@ -2516,8 +2530,9 @@ void WebGLRenderingContextBase::framebufferRenderbuffer(
|
| }
|
| GLuint bufferObject = objectOrZero(buffer);
|
| if (isWebGL2OrHigher() && attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
|
| - // On ES3, DEPTH_STENCIL_ATTACHMENT is like an alias for DEPTH_ATTACHMENT + STENCIL_ATTACHMENT.
|
| - // We divide it here so in WebGLFramebuffer, we don't have to handle DEPTH_STENCIL_ATTACHMENT in WebGL 2.
|
| + // On ES3, DEPTH_STENCIL_ATTACHMENT is like an alias for DEPTH_ATTACHMENT +
|
| + // STENCIL_ATTACHMENT. We divide it here so in WebGLFramebuffer, we don't
|
| + // have to handle DEPTH_STENCIL_ATTACHMENT in WebGL 2.
|
| contextGL()->FramebufferRenderbuffer(target, GL_DEPTH_ATTACHMENT,
|
| renderbuffertarget, bufferObject);
|
| contextGL()->FramebufferRenderbuffer(target, GL_STENCIL_ATTACHMENT,
|
| @@ -2560,8 +2575,9 @@ void WebGLRenderingContextBase::framebufferTexture2D(GLenum target,
|
| }
|
| GLuint textureObject = objectOrZero(texture);
|
| if (isWebGL2OrHigher() && attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
|
| - // On ES3, DEPTH_STENCIL_ATTACHMENT is like an alias for DEPTH_ATTACHMENT + STENCIL_ATTACHMENT.
|
| - // We divide it here so in WebGLFramebuffer, we don't have to handle DEPTH_STENCIL_ATTACHMENT in WebGL 2.
|
| + // On ES3, DEPTH_STENCIL_ATTACHMENT is like an alias for DEPTH_ATTACHMENT +
|
| + // STENCIL_ATTACHMENT. We divide it here so in WebGLFramebuffer, we don't
|
| + // have to handle DEPTH_STENCIL_ATTACHMENT in WebGL 2.
|
| contextGL()->FramebufferTexture2D(target, GL_DEPTH_ATTACHMENT, textarget,
|
| textureObject, level);
|
| contextGL()->FramebufferTexture2D(target, GL_STENCIL_ATTACHMENT, textarget,
|
| @@ -2729,8 +2745,8 @@ void WebGLRenderingContextBase::getContextAttributes(
|
| if (isContextLost())
|
| return;
|
| result.set(toWebGLContextAttributes(creationAttributes()));
|
| - // Some requested attributes may not be honored, so we need to query the underlying
|
| - // context/drawing buffer and adjust accordingly.
|
| + // Some requested attributes may not be honored, so we need to query the
|
| + // underlying context/drawing buffer and adjust accordingly.
|
| if (creationAttributes().depth() && !drawingBuffer()->hasDepthBuffer())
|
| result.get().setDepth(false);
|
| if (creationAttributes().stencil() && !drawingBuffer()->hasStencilBuffer())
|
| @@ -3426,7 +3442,8 @@ ScriptValue WebGLRenderingContextBase::getUniform(
|
| return ScriptValue::createNull(scriptState);
|
| }
|
|
|
| - // FIXME: make this more efficient using WebGLUniformLocation and caching types in it
|
| + // FIXME: make this more efficient using WebGLUniformLocation and caching
|
| + // types in it.
|
| GLint activeUniforms = 0;
|
| contextGL()->GetProgramiv(programId, GL_ACTIVE_UNIFORMS, &activeUniforms);
|
| for (GLint i = 0; i < activeUniforms; i++) {
|
| @@ -3445,7 +3462,8 @@ ScriptValue WebGLRenderingContextBase::getUniform(
|
| // Strip "[0]" from the name if it's an array.
|
| if (size > 1 && name.endsWith("[0]"))
|
| name = name.left(name.length() - 3);
|
| - // If it's an array, we need to iterate through each element, appending "[index]" to the name.
|
| + // If it's an array, we need to iterate through each element, appending
|
| + // "[index]" to the name.
|
| for (GLint index = 0; index < size; ++index) {
|
| nameBuilder.clear();
|
| nameBuilder.append(name);
|
| @@ -3458,7 +3476,8 @@ ScriptValue WebGLRenderingContextBase::getUniform(
|
| GLint loc = contextGL()->GetUniformLocation(
|
| objectOrZero(program), nameBuilder.toString().utf8().data());
|
| if (loc == location) {
|
| - // Found it. Use the type in the ActiveInfo to determine the return type.
|
| + // Found it. Use the type in the ActiveInfo to determine the return
|
| + // type.
|
| GLenum baseType;
|
| unsigned length;
|
| switch (type) {
|
| @@ -3628,7 +3647,8 @@ ScriptValue WebGLRenderingContextBase::getUniform(
|
| }
|
| }
|
| }
|
| - // If we get here, something went wrong in our unfortunately complex logic above
|
| + // If we get here, something went wrong in our unfortunately complex logic
|
| + // above
|
| synthesizeGLError(GL_INVALID_VALUE, "getUniform", "unknown error");
|
| return ScriptValue::createNull(scriptState);
|
| }
|
| @@ -4084,8 +4104,8 @@ void WebGLRenderingContextBase::renderbufferStorageImpl(
|
| GLsizei width,
|
| GLsizei height,
|
| const char* functionName) {
|
| - ASSERT(
|
| - !samples); // |samples| > 0 is only valid in WebGL2's renderbufferStorageMultisample().
|
| + ASSERT(!samples); // |samples| > 0 is only valid in WebGL2's
|
| + // renderbufferStorageMultisample().
|
| ASSERT(!isWebGL2OrHigher()); // Make sure this is overridden in WebGL 2.
|
| switch (internalformat) {
|
| case GL_DEPTH_COMPONENT16:
|
| @@ -4164,8 +4184,8 @@ void WebGLRenderingContextBase::shaderSource(WebGLShader* shader,
|
| if (isContextLost() || !validateWebGLObject("shaderSource", shader))
|
| return;
|
| String stringWithoutComments = StripComments(string).result();
|
| - // TODO(danakj): Make validateShaderSource reject characters > 255 (or utf16 Strings)
|
| - // so we don't need to use StringUTF8Adaptor.
|
| + // TODO(danakj): Make validateShaderSource reject characters > 255 (or utf16
|
| + // Strings) so we don't need to use StringUTF8Adaptor.
|
| if (!validateShaderSource(stringWithoutComments))
|
| return;
|
| shader->setSource(string);
|
| @@ -4270,7 +4290,8 @@ void WebGLRenderingContextBase::stencilOpSeparate(GLenum face,
|
| GLenum WebGLRenderingContextBase::convertTexInternalFormat(
|
| GLenum internalformat,
|
| GLenum type) {
|
| - // Convert to sized internal formats that are renderable with GL_CHROMIUM_color_buffer_float_rgb(a).
|
| + // Convert to sized internal formats that are renderable with
|
| + // GL_CHROMIUM_color_buffer_float_rgb(a).
|
| if (type == GL_FLOAT && internalformat == GL_RGBA &&
|
| extensionsUtil()->isExtensionEnabled(
|
| "GL_CHROMIUM_color_buffer_float_rgba"))
|
| @@ -4291,7 +4312,8 @@ void WebGLRenderingContextBase::texImage2DBase(GLenum target,
|
| GLenum format,
|
| GLenum type,
|
| const void* pixels) {
|
| - // All calling functions check isContextLost, so a duplicate check is not needed here.
|
| + // All calling functions check isContextLost, so a duplicate check is not
|
| + // needed here.
|
| contextGL()->TexImage2D(target, level,
|
| convertTexInternalFormat(internalformat, type), width,
|
| height, border, format, type, pixels);
|
| @@ -4312,7 +4334,8 @@ void WebGLRenderingContextBase::texImageImpl(
|
| bool flipY,
|
| bool premultiplyAlpha) {
|
| const char* funcName = getTexImageFunctionName(functionID);
|
| - // All calling functions check isContextLost, so a duplicate check is not needed here.
|
| + // All calling functions check isContextLost, so a duplicate check is not
|
| + // needed here.
|
| if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) {
|
| // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented.
|
| type = GL_FLOAT;
|
| @@ -4397,7 +4420,8 @@ bool WebGLRenderingContextBase::validateTexFunc(
|
| if (!validateSize(functionName, xoffset, yoffset, zoffset))
|
| return false;
|
| } else {
|
| - // For SourceArrayBufferView, function validateTexFuncData() would handle whether to validate the SettableTexFormat
|
| + // For SourceArrayBufferView, function validateTexFuncData() would handle
|
| + // whether to validate the SettableTexFormat
|
| // by checking if the ArrayBufferView is null or not.
|
| if (sourceType != SourceArrayBufferView) {
|
| if (!validateSettableTexFormat(functionName, format))
|
| @@ -4426,8 +4450,8 @@ bool WebGLRenderingContextBase::validateValueFitNonNegInt32(
|
| return true;
|
| }
|
|
|
| -// TODO(fmalita): figure why WebGLImageConversion::ImageExtractor can't handle SVG-backed images,
|
| -// and get rid of this intermediate step.
|
| +// TODO(fmalita): figure why WebGLImageConversion::ImageExtractor can't handle
|
| +// SVG-backed images, and get rid of this intermediate step.
|
| PassRefPtr<Image> WebGLRenderingContextBase::drawImageIntoBuffer(
|
| PassRefPtr<Image> passImage,
|
| int width,
|
| @@ -4614,7 +4638,8 @@ void WebGLRenderingContextBase::texImageHelperImageData(
|
| Vector<uint8_t> data;
|
| bool needConversion = true;
|
| // The data from ImageData is always of format RGBA8.
|
| - // No conversion is needed if destination format is RGBA and type is USIGNED_BYTE and no Flip or Premultiply operation is required.
|
| + // No conversion is needed if destination format is RGBA and type is
|
| + // USIGNED_BYTE and no Flip or Premultiply operation is required.
|
| if (!m_unpackFlipY && !m_unpackPremultiplyAlpha && format == GL_RGBA &&
|
| type == GL_UNSIGNED_BYTE) {
|
| needConversion = false;
|
| @@ -4722,7 +4747,8 @@ bool WebGLRenderingContextBase::canUseTexImageByGPU(
|
| (isFloatType(type) || isIntegerFormat(internalformat) ||
|
| isSRGBFormat(internalformat)))
|
| return false;
|
| - // TODO(crbug.com/622958): Implement GPU-to-GPU path for WebGL 2 and more internal formats.
|
| + // TODO(crbug.com/622958): Implement GPU-to-GPU path for WebGL 2 and more
|
| + // internal formats.
|
| if (functionID == TexSubImage2D &&
|
| (isWebGL2OrHigher() || extensionEnabled(OESTextureFloatName) ||
|
| extensionEnabled(OESTextureHalfFloatName) ||
|
| @@ -4783,7 +4809,8 @@ void WebGLRenderingContextBase::texImageByGPU(TexImageByGPUType functionType,
|
| target, internalformat, type, level);
|
| }
|
|
|
| - // if direct copy is not possible, create a temporary texture and then copy from canvas to temporary texture to target texture.
|
| + // if direct copy is not possible, create a temporary texture and then copy
|
| + // from canvas to temporary texture to target texture.
|
| if (!possibleDirectCopy) {
|
| targetLevel = 0;
|
| targetInternalformat = GL_RGBA;
|
| @@ -4864,8 +4891,10 @@ void WebGLRenderingContextBase::texImageHelperHTMLCanvasElement(
|
| 1, 0, format, type, xoffset, yoffset, zoffset))
|
| return;
|
| if (functionID == TexImage2D || functionID == TexSubImage2D) {
|
| - // texImageByGPU relies on copyTextureCHROMIUM which doesn't support float/integer/sRGB internal format.
|
| - // TODO(crbug.com/622958): relax the constrains if copyTextureCHROMIUM is upgraded to handle more formats.
|
| + // texImageByGPU relies on copyTextureCHROMIUM which doesn't support
|
| + // float/integer/sRGB internal format.
|
| + // TODO(crbug.com/622958): relax the constrains if copyTextureCHROMIUM is
|
| + // upgraded to handle more formats.
|
| if (!canvas->renderingContext() ||
|
| !canvas->renderingContext()->isAccelerated() ||
|
| !canUseTexImageByGPU(functionID, internalformat, type)) {
|
| @@ -4955,8 +4984,9 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement(
|
| return;
|
|
|
| if (functionID == TexImage2D) {
|
| - // Go through the fast path doing a GPU-GPU textures copy without a readback to system memory if possible.
|
| - // Otherwise, it will fall back to the normal SW path.
|
| + // Go through the fast path doing a GPU-GPU textures copy without a readback
|
| + // to system memory if possible. Otherwise, it will fall back to the normal
|
| + // SW path.
|
| if (GL_TEXTURE_2D == target) {
|
| if (Extensions3DUtil::canUseCopyTextureCHROMIUM(target, internalformat,
|
| type, level) &&
|
| @@ -4966,7 +4996,8 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement(
|
| return;
|
| }
|
|
|
| - // Try using an accelerated image buffer, this allows YUV conversion to be done on the GPU.
|
| + // Try using an accelerated image buffer, this allows YUV conversion to be
|
| + // done on the GPU.
|
| std::unique_ptr<ImageBufferSurface> surface =
|
| wrapUnique(new AcceleratedImageBufferSurface(
|
| IntSize(video->videoWidth(), video->videoHeight())));
|
| @@ -4974,15 +5005,18 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement(
|
| std::unique_ptr<ImageBuffer> imageBuffer(
|
| ImageBuffer::create(std::move(surface)));
|
| if (imageBuffer) {
|
| - // The video element paints an RGBA frame into our surface here. By using an AcceleratedImageBufferSurface,
|
| - // we enable the WebMediaPlayer implementation to do any necessary color space conversion on the GPU (though it
|
| + // The video element paints an RGBA frame into our surface here. By
|
| + // using an AcceleratedImageBufferSurface, we enable the
|
| + // WebMediaPlayer implementation to do any necessary color space
|
| + // conversion on the GPU (though it
|
| // may still do a CPU conversion and upload the results).
|
| video->paintCurrentFrame(
|
| imageBuffer->canvas(),
|
| IntRect(0, 0, video->videoWidth(), video->videoHeight()),
|
| nullptr);
|
|
|
| - // This is a straight GPU-GPU copy, any necessary color space conversion was handled in the paintCurrentFrameInContext() call.
|
| + // This is a straight GPU-GPU copy, any necessary color space
|
| + // conversion was handled in the paintCurrentFrameInContext() call.
|
| if (imageBuffer->copyToPlatformTexture(
|
| contextGL(), texture->object(), internalformat, type, level,
|
| m_unpackPremultiplyAlpha, m_unpackFlipY)) {
|
| @@ -5072,8 +5106,9 @@ void WebGLRenderingContextBase::texImageHelperImageBitmap(
|
| SkPixmap pixmap;
|
| uint8_t* pixelDataPtr = nullptr;
|
| RefPtr<Uint8Array> pixelData;
|
| - // In the case where an ImageBitmap is not texture backed, peekPixels() always succeed.
|
| - // However, when it is texture backed and !canUseTexImageByGPU, we do a GPU read back.
|
| + // In the case where an ImageBitmap is not texture backed, peekPixels() always
|
| + // succeed. However, when it is texture backed and !canUseTexImageByGPU, we
|
| + // do a GPU read back.
|
| bool peekSucceed = skImage->peekPixels(&pixmap);
|
| if (peekSucceed) {
|
| pixelDataPtr = static_cast<uint8_t*>(pixmap.writable_addr());
|
| @@ -5095,7 +5130,8 @@ void WebGLRenderingContextBase::texImageHelperImageBitmap(
|
| // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented.
|
| type = GL_FLOAT;
|
| }
|
| - // In the case of ImageBitmap, we do not need to apply flipY or premultiplyAlpha.
|
| + // In the case of ImageBitmap, we do not need to apply flipY or
|
| + // premultiplyAlpha.
|
| bool isPixelDataBGRA =
|
| pixmap.colorType() == SkColorType::kBGRA_8888_SkColorType;
|
| if ((isPixelDataBGRA &&
|
| @@ -5857,7 +5893,8 @@ void WebGLRenderingContextBase::viewport(GLint x,
|
| contextGL()->Viewport(x, y, width, height);
|
| }
|
|
|
| -// Added to provide a unified interface with CanvasRenderingContext2D. Prefer calling forceLostContext instead.
|
| +// Added to provide a unified interface with CanvasRenderingContext2D. Prefer
|
| +// calling forceLostContext instead.
|
| void WebGLRenderingContextBase::loseContext(LostContextMode mode) {
|
| forceLostContext(mode, Manual);
|
| }
|
| @@ -5884,7 +5921,8 @@ void WebGLRenderingContextBase::loseContextImpl(
|
| ASSERT(m_contextLostMode != NotLostContext);
|
| m_autoRecoveryMethod = autoRecoveryMethod;
|
|
|
| - // Make absolutely sure we do not refer to an already-deleted texture or framebuffer.
|
| + // Make absolutely sure we do not refer to an already-deleted texture or
|
| + // framebuffer.
|
| drawingBuffer()->setTexture2DBinding(0);
|
| drawingBuffer()->setFramebufferBinding(GL_FRAMEBUFFER, 0);
|
| drawingBuffer()->setRenderbufferBinding(0);
|
| @@ -5955,7 +5993,8 @@ Extensions3DUtil* WebGLRenderingContextBase::extensionsUtil() {
|
| if (!m_extensionsUtil) {
|
| gpu::gles2::GLES2Interface* gl = contextGL();
|
| m_extensionsUtil = Extensions3DUtil::create(gl);
|
| - // The only reason the ExtensionsUtil should be invalid is if the gl context is lost.
|
| + // The only reason the ExtensionsUtil should be invalid is if the gl context
|
| + // is lost.
|
| ASSERT(m_extensionsUtil->isValid() ||
|
| gl->GetGraphicsResetStatusKHR() != GL_NO_ERROR);
|
| }
|
| @@ -6485,7 +6524,8 @@ bool WebGLRenderingContextBase::validateTexFuncDimensions(
|
| return false;
|
| }
|
| // No need to check height here. For texImage width == height.
|
| - // For texSubImage that will be checked when checking yoffset + height is in range.
|
| + // For texSubImage that will be checked when checking yoffset + height is
|
| + // in range.
|
| if (width > (m_maxCubeMapTextureSize >> level)) {
|
| synthesizeGLError(GL_INVALID_VALUE, functionName,
|
| "width or height out of range for cube map");
|
| @@ -6576,7 +6616,8 @@ bool WebGLRenderingContextBase::validateTexFuncData(
|
| DOMArrayBufferView* pixels,
|
| NullDisposition disposition,
|
| GLuint srcOffset) {
|
| - // All calling functions check isContextLost, so a duplicate check is not needed here.
|
| + // All calling functions check isContextLost, so a duplicate check is not
|
| + // needed here.
|
| if (!pixels) {
|
| DCHECK_NE(disposition, NullNotReachable);
|
| if (disposition == NullAllowed)
|
| @@ -6650,8 +6691,8 @@ bool WebGLRenderingContextBase::validateTexFuncData(
|
| break;
|
| case GL_HALF_FLOAT:
|
| case GL_HALF_FLOAT_OES: // OES_texture_half_float
|
| - // As per the specification, ArrayBufferView should be null or a Uint16Array when
|
| - // OES_texture_half_float is enabled.
|
| + // As per the specification, ArrayBufferView should be null or a
|
| + // Uint16Array when OES_texture_half_float is enabled.
|
| if (pixels->type() != DOMArrayBufferView::TypeUint16) {
|
| synthesizeGLError(GL_INVALID_OPERATION, functionName,
|
| "type HALF_FLOAT_OES but ArrayBufferView is not NULL "
|
| @@ -7114,7 +7155,9 @@ void WebGLRenderingContextBase::maybeRestoreContext(TimerBase*) {
|
| settings->webGLEnabled()))
|
| return;
|
|
|
| - // If the context was lost due to RealLostContext, we need to destroy the old DrawingBuffer before creating new DrawingBuffer to ensure resource budget enough.
|
| + // If the context was lost due to RealLostContext, we need to destroy the old
|
| + // DrawingBuffer before creating new DrawingBuffer to ensure resource budget
|
| + // enough.
|
| if (drawingBuffer()) {
|
| m_drawingBuffer->beginDestruction();
|
| m_drawingBuffer.clear();
|
| @@ -7129,17 +7172,20 @@ void WebGLRenderingContextBase::maybeRestoreContext(TimerBase*) {
|
| RefPtr<DrawingBuffer> buffer;
|
| if (contextProvider && contextProvider->bindToCurrentThread()) {
|
| // Construct a new drawing buffer with the new GL context.
|
| - // TODO(xidachen): make sure that the second parameter is correct for OffscreenCanvas.
|
| + // TODO(xidachen): make sure that the second parameter is correct for
|
| + // OffscreenCanvas.
|
| buffer = createDrawingBuffer(std::move(contextProvider),
|
| DrawingBuffer::AllowChromiumImage);
|
| - // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| is set to null.
|
| + // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| is
|
| + // set to null.
|
| }
|
| if (!buffer) {
|
| if (m_contextLostMode == RealLostContext) {
|
| m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts,
|
| BLINK_FROM_HERE);
|
| } else {
|
| - // This likely shouldn't happen but is the best way to report it to the WebGL app.
|
| + // This likely shouldn't happen but is the best way to report it to the
|
| + // WebGL app.
|
| synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context");
|
| }
|
| return;
|
| @@ -7351,7 +7397,8 @@ void WebGLRenderingContextBase::restoreCurrentTexture2D() {
|
| }
|
|
|
| void WebGLRenderingContextBase::findNewMaxNonDefaultTextureUnit() {
|
| - // Trace backwards from the current max to find the new max non-default texture unit
|
| + // Trace backwards from the current max to find the new max non-default
|
| + // texture unit
|
| int startIndex = m_onePlusMaxNonDefaultTextureUnit - 1;
|
| for (int i = startIndex; i >= 0; --i) {
|
| if (m_textureUnits[i].m_texture2DBinding ||
|
|
|