From 5435e933450b28154d6ab7e96bf46c86c2d4962e Mon Sep 17 00:00:00 2001 From: "apatrick@chromium.org" Date: Wed, 20 Jul 2011 20:27:36 +0000 Subject: Revert 93106 - Reparenting of RendererGLContexts supports going from no parent to having a parent. RendererGLContext::SetParent is a no-op if the parent did not change to avoid a redundant sync IPC. Added SetParentContext to WebGraphicsContext3DCommandBufferImpl. WebKit change to follow. Review URL: http://codereview.chromium.org/7237009 TBR=apatrick@chromium.org Review URL: http://codereview.chromium.org/7475001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93244 0039d316-1c4b-4281-b951-d872f2087c98 --- content/renderer/gpu/renderer_gl_context.cc | 3 --- .../webgraphicscontext3d_command_buffer_impl.cc | 28 +++++++++++++++------- .../gpu/webgraphicscontext3d_command_buffer_impl.h | 2 -- 3 files changed, 20 insertions(+), 13 deletions(-) (limited to 'content') diff --git a/content/renderer/gpu/renderer_gl_context.cc b/content/renderer/gpu/renderer_gl_context.cc index 4937a46..bf2d100 100644 --- a/content/renderer/gpu/renderer_gl_context.cc +++ b/content/renderer/gpu/renderer_gl_context.cc @@ -224,9 +224,6 @@ RendererGLContext* RendererGLContext::CreateOffscreenContext( } bool RendererGLContext::SetParent(RendererGLContext* new_parent) { - if (parent_.get() == new_parent) - return true; - // Allocate a texture ID with respect to the parent and change the parent. uint32 new_parent_texture_id = 0; if (command_buffer_) { diff --git a/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc b/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc index 04bfe9d..2d825b9 100644 --- a/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc +++ b/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc @@ -106,6 +106,7 @@ bool WebGraphicsContext3DCommandBufferImpl::initialize( if (web_view && web_view->mainFrame()) active_url = GURL(web_view->mainFrame()->document().url()); + RendererGLContext* parent_context = NULL; if (render_directly_to_web_view) { RenderView* renderview = RenderView::FromWebView(web_view); if (!renderview) @@ -124,6 +125,22 @@ bool WebGraphicsContext3DCommandBufferImpl::initialize( &WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete)); } } else { + bool compositing_enabled = !CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableAcceleratedCompositing); + // If GPU compositing is enabled we need to create a GL context that shares + // resources with the compositor's context. + if (compositing_enabled) { + // Asking for the WebGraphicsContext3D on the WebView will force one to + // be created if it doesn't already exist. When the compositor is created + // for the view it will use the same context. + WebKit::WebGraphicsContext3D* view_context = + web_view->graphicsContext3D(); + if (view_context) { + WebGraphicsContext3DCommandBufferImpl* context_impl = + static_cast(view_context); + parent_context = context_impl->context_; + } + } context_ = RendererGLContext::CreateOffscreenContext( host, gfx::Size(1, 1), @@ -135,6 +152,9 @@ bool WebGraphicsContext3DCommandBufferImpl::initialize( if (!context_) return false; + if (!context_->SetParent(parent_context)) + return false; + gl_ = context_->GetImplementation(); context_->SetContextLostCallback( NewCallback(this, @@ -182,14 +202,6 @@ bool WebGraphicsContext3DCommandBufferImpl::isGLES2Compliant() { return true; } -bool WebGraphicsContext3DCommandBufferImpl::setParentContext( - WebGraphicsContext3D* parent_context) { - WebGraphicsContext3DCommandBufferImpl* parent_context_impl = - static_cast(parent_context); - return context_->SetParent( - parent_context_impl ? parent_context_impl->context() : NULL); -} - WebGLId WebGraphicsContext3DCommandBufferImpl::getPlatformTextureId() { DCHECK(context_); return context_->GetParentTextureId(); diff --git a/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h b/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h index e291c82..5411502 100644 --- a/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h +++ b/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.h @@ -64,8 +64,6 @@ class WebGraphicsContext3DCommandBufferImpl virtual bool isGLES2Compliant(); - virtual bool setParentContext(WebGraphicsContext3D* parent_context); - virtual void reshape(int width, int height); virtual bool readBackFramebuffer(unsigned char* pixels, size_t buffer_size); -- cgit v1.1