| 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 879e4578873d86e2ec4f81b696bd4746b73ce923..8890125753091e53e5b8808e1ef9d22781fad2e4 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| @@ -649,6 +649,27 @@ ImageBitmap* WebGLRenderingContextBase::transferToImageBitmapBase()
|
| return ImageBitmap::create(drawingBuffer()->transferToStaticBitmapImage());
|
| }
|
|
|
| +PassRefPtr<Image> WebGLRenderingContextBase::getImage(SnapshotReason reason) const
|
| +{
|
| + if (!drawingBuffer())
|
| + return nullptr;
|
| +
|
| + drawingBuffer()->commit();
|
| + IntSize size = clampedCanvasSize();
|
| + OpacityMode opacityMode = creationAttributes().hasAlpha() ? NonOpaque : Opaque;
|
| + std::unique_ptr<AcceleratedImageBufferSurface> surface = wrapUnique(new AcceleratedImageBufferSurface(size, opacityMode));
|
| + if (!surface->isValid())
|
| + return nullptr;
|
| + 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.
|
| + NOTREACHED();
|
| + return nullptr;
|
| + }
|
| + return buffer->newImageSnapshot(PreferAcceleration, reason);
|
| +}
|
| +
|
| namespace {
|
|
|
| // ES2 enums
|
| @@ -6301,7 +6322,7 @@ void WebGLRenderingContextBase::enableOrDisable(GLenum capability, bool enable)
|
| contextGL()->Disable(capability);
|
| }
|
|
|
| -IntSize WebGLRenderingContextBase::clampedCanvasSize()
|
| +IntSize WebGLRenderingContextBase::clampedCanvasSize() const
|
| {
|
| int width, height;
|
| if (canvas()) {
|
|
|