diff options
author | vangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-22 21:01:48 +0000 |
---|---|---|
committer | vangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-22 21:01:48 +0000 |
commit | bdd00c98e0c2cb0058a9ed8ed2962b3347fd7321 (patch) | |
tree | f26ce31867803b8955ceb756a49586a3a6fa4ee0 | |
parent | 605cfad717ef1616fe80ffb913e338e32d364ecb (diff) | |
download | chromium_src-bdd00c98e0c2cb0058a9ed8ed2962b3347fd7321.zip chromium_src-bdd00c98e0c2cb0058a9ed8ed2962b3347fd7321.tar.gz chromium_src-bdd00c98e0c2cb0058a9ed8ed2962b3347fd7321.tar.bz2 |
Allow WebGLES2 contexts to be initialized with a parent context for the purposes
of sharing resources.
BUG=47205
Review URL: http://codereview.chromium.org/2844015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50526 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/renderer/webgles2context_impl.cc | 21 | ||||
-rw-r--r-- | chrome/renderer/webgles2context_impl.h | 4 |
2 files changed, 24 insertions, 1 deletions
diff --git a/chrome/renderer/webgles2context_impl.cc b/chrome/renderer/webgles2context_impl.cc index 36d15f7..374ea13 100644 --- a/chrome/renderer/webgles2context_impl.cc +++ b/chrome/renderer/webgles2context_impl.cc @@ -19,7 +19,17 @@ WebGLES2ContextImpl::~WebGLES2ContextImpl() { destroy(); } +// TODO(vangelis): Remove once the method is removed from the WebGLES2Context. bool WebGLES2ContextImpl::initialize(WebKit::WebView* web_view) { + return initialize(web_view, NULL); +} + +bool WebGLES2ContextImpl::initialize( + WebKit::WebView* web_view, + WebGLES2Context* parent) { + // Windowed contexts don't have a parent context. + DCHECK(!(web_view && parent)); + RenderThread* render_thread = RenderThread::current(); if (!render_thread) return false; @@ -38,7 +48,16 @@ bool WebGLES2ContextImpl::initialize(WebKit::WebView* web_view) { gfx::NativeViewId view_id = renderview->host_window(); context_ = ggl::CreateViewContext(host, view_id); } else { - context_ = ggl::CreateOffscreenContext(host, NULL, gfx::Size(1, 1)); + ggl::Context* parent_context = NULL; + + if (parent) { + WebGLES2ContextImpl* parent_context_impl = + static_cast<WebGLES2ContextImpl*>(parent); + parent_context = parent_context_impl->context(); + DCHECK(parent_context); + } + context_ = ggl::CreateOffscreenContext(host, parent_context, + gfx::Size(1, 1)); } return (context_ != NULL); diff --git a/chrome/renderer/webgles2context_impl.h b/chrome/renderer/webgles2context_impl.h index 44283df3..0930124 100644 --- a/chrome/renderer/webgles2context_impl.h +++ b/chrome/renderer/webgles2context_impl.h @@ -15,11 +15,15 @@ class WebGLES2ContextImpl : public WebKit::WebGLES2Context { WebGLES2ContextImpl(); virtual ~WebGLES2ContextImpl(); + // TODO(vangelis): Remove once method is removed from WebGLES2Context. virtual bool initialize(WebKit::WebView*); + virtual bool initialize(WebKit::WebView*, WebGLES2Context* parent); virtual bool makeCurrent(); virtual bool destroy(); virtual bool swapBuffers(); + ggl::Context* context() { return context_; } + private: // The GGL context we use for OpenGL rendering. ggl::Context* context_; |