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

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp

Issue 1881563003: Implement OffscreenCanvas.getContext('webgl') (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase and remove static_cast Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp
index abd64cd3f9a7ef0a18d2ffba522b064111e1029a..cc46e806bbfa070435ca4cde303a74fd5a772a27 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp
@@ -65,28 +65,51 @@
namespace blink {
-CanvasRenderingContext* WebGLRenderingContext::Factory::create(HTMLCanvasElement* canvas, const CanvasContextCreationAttributes& attrs, Document&)
+// An helper function for the two create() methods. The return value is an
+// indicate of whether the create() should return nullptr or not.
+static bool shouldCreateContext(WebGraphicsContext3DProvider* contextProvider)
{
- WebGLContextAttributes attributes = toWebGLContextAttributes(attrs);
- OwnPtr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(canvas, attributes, 1));
if (!contextProvider)
- return nullptr;
+ return false;
gpu::gles2::GLES2Interface* gl = contextProvider->contextGL();
OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(gl);
if (!extensionsUtil)
- return nullptr;
+ return false;
if (extensionsUtil->supportsExtension("GL_EXT_debug_marker")) {
- String contextLabel(String::format("WebGLRenderingContext-%p", contextProvider.get()));
+ String contextLabel(String::format("WebGLRenderingContext-%p", contextProvider));
gl->PushGroupMarkerEXT(0, contextLabel.ascii().data());
}
+ return true;
+}
- WebGLRenderingContext* renderingContext = new WebGLRenderingContext(canvas, contextProvider.release(), attributes);
+CanvasRenderingContext* WebGLRenderingContext::Factory::create(ScriptState* scriptState, OffscreenCanvas* offscreenCanvas, const CanvasContextCreationAttributes& attrs)
+{
+ WebGLContextAttributes attributes = toWebGLContextAttributes(attrs);
+ OwnPtr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(scriptState, attributes, 1));
+ if (!shouldCreateContext(contextProvider.get()))
+ return nullptr;
+
+ WebGLRenderingContext* renderingContext = new WebGLRenderingContext(offscreenCanvas, contextProvider.release(), attributes);
+ if (!renderingContext->drawingBuffer())
+ return nullptr;
+ renderingContext->initializeNewContext();
+ renderingContext->registerContextExtensions();
+ return renderingContext;
+}
+
+CanvasRenderingContext* WebGLRenderingContext::Factory::create(HTMLCanvasElement* canvas, const CanvasContextCreationAttributes& attrs, Document&)
+{
+ WebGLContextAttributes attributes = toWebGLContextAttributes(attrs);
+ OwnPtr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(canvas, attributes, 1));
+ if (!shouldCreateContext(contextProvider.get()))
+ return nullptr;
+
+ WebGLRenderingContext* renderingContext = new WebGLRenderingContext(canvas, contextProvider.release(), attributes);
if (!renderingContext->drawingBuffer()) {
canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcontextcreationerror, false, true, "Could not create a WebGL context."));
return nullptr;
}
-
renderingContext->initializeNewContext();
renderingContext->registerContextExtensions();
@@ -103,6 +126,11 @@ WebGLRenderingContext::WebGLRenderingContext(HTMLCanvasElement* passedCanvas, Pa
{
}
+WebGLRenderingContext::WebGLRenderingContext(OffscreenCanvas* passedOffscreenCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+ : WebGLRenderingContextBase(passedOffscreenCanvas, std::move(contextProvider), requestedAttributes)
+{
+}
+
WebGLRenderingContext::~WebGLRenderingContext()
{
}
@@ -112,6 +140,17 @@ void WebGLRenderingContext::setCanvasGetContextResult(RenderingContext& result)
result.setWebGLRenderingContext(this);
}
+void WebGLRenderingContext::setOffscreenCanvasGetContextResult(OffscreenRenderingContext& result)
+{
+ result.setWebGLRenderingContext(this);
+}
+
+ImageBitmap* WebGLRenderingContext::transferToImageBitmap(ExceptionState& exceptionState)
+{
+ NOTIMPLEMENTED();
+ return nullptr;
+}
+
void WebGLRenderingContext::registerContextExtensions()
{
// Register extensions.

Powered by Google App Engine
This is Rietveld 408576698