summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-22 21:01:48 +0000
committervangelis@chromium.org <vangelis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-22 21:01:48 +0000
commitbdd00c98e0c2cb0058a9ed8ed2962b3347fd7321 (patch)
treef26ce31867803b8955ceb756a49586a3a6fa4ee0
parent605cfad717ef1616fe80ffb913e338e32d364ecb (diff)
downloadchromium_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.cc21
-rw-r--r--chrome/renderer/webgles2context_impl.h4
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_;