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 a376b6c1e45025880a6e39a082736ecacc529a4a..0e94076dcecfab557301124d102a294b5e695397 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 = 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 |
@@ -6300,7 +6321,7 @@ void WebGLRenderingContextBase::enableOrDisable(GLenum capability, bool enable) |
contextGL()->Disable(capability); |
} |
-IntSize WebGLRenderingContextBase::clampedCanvasSize() |
+IntSize WebGLRenderingContextBase::clampedCanvasSize() const |
{ |
int width, height; |
if (canvas()) { |