Chromium Code Reviews| Index: ui/gl/gl_context.cc |
| diff --git a/ui/gl/gl_context.cc b/ui/gl/gl_context.cc |
| index 496ed964e5e0f4f491556d4fe97f20169c8b32af..e867c50fdc5e54ee91b40c89ce8a54c7200d9be8 100644 |
| --- a/ui/gl/gl_context.cc |
| +++ b/ui/gl/gl_context.cc |
| @@ -20,6 +20,9 @@ namespace gfx { |
| namespace { |
| base::LazyInstance<base::ThreadLocalPointer<GLContext> >::Leaky |
| current_context_ = LAZY_INSTANCE_INITIALIZER; |
| + |
| +base::LazyInstance<base::ThreadLocalPointer<GLContext> >::Leaky |
| + current_real_context_ = LAZY_INSTANCE_INITIALIZER; |
| } // namespace |
| GLContext::GLContext(GLShareGroup* share_group) : share_group_(share_group) { |
| @@ -32,7 +35,7 @@ GLContext::GLContext(GLShareGroup* share_group) : share_group_(share_group) { |
| GLContext::~GLContext() { |
| share_group_->RemoveContext(this); |
| if (GetCurrent() == this) { |
| - SetCurrent(NULL, NULL); |
| + SetCurrent(NULL); |
| } |
| } |
| @@ -90,8 +93,12 @@ GLContext* GLContext::GetCurrent() { |
| return current_context_.Pointer()->Get(); |
| } |
| -void GLContext::SetCurrent(GLContext* context, GLSurface* surface) { |
| - current_context_.Pointer()->Set(context); |
| +GLContext* GLContext::GetRealCurrent() { |
| + return current_real_context_.Pointer()->Get(); |
| +} |
| + |
| +void GLContext::SetCurrent(GLSurface* surface) { |
| + current_context_.Pointer()->Set(surface ? this : NULL); |
| GLSurface::SetCurrent(surface); |
| } |
| @@ -128,7 +135,12 @@ void GLContext::SetupForVirtualization() { |
| bool GLContext::MakeVirtuallyCurrent( |
| GLContext* virtual_context, GLSurface* surface) { |
| DCHECK(virtual_gl_api_); |
| - return virtual_gl_api_->MakeCurrent(virtual_context, surface); |
| + bool result = virtual_gl_api_->MakeCurrent(virtual_context, surface); |
| + if (result) { |
| + virtual_context->SetCurrent(surface); |
| + surface->OnMakeCurrent(virtual_context); |
|
no sievers
2013/06/04 23:47:20
Wait, why add a call to surface->OnMakeCurrent() h
jonathan.backer
2013/06/05 14:02:10
Most (all?) of the implementations of GLSurface::O
|
| + } |
| + return result; |
| } |
| void GLContext::OnReleaseVirtuallyCurrent(GLContext* virtual_context) { |
| @@ -140,4 +152,15 @@ void GLContext::SetRealGLApi() { |
| SetGLToRealGLApi(); |
| } |
| +GLContextReal::GLContextReal(GLShareGroup* share_group) |
| + : GLContext(share_group) {} |
| + |
| +GLContextReal::~GLContextReal() {} |
| + |
| +void GLContextReal::SetCurrent(GLSurface* surface) { |
| + GLContext::SetCurrent(surface); |
| + current_real_context_.Pointer()->Set(surface ? this : NULL); |
| + GLSurface::SetRealCurrent(surface); |
| +} |
| + |
| } // namespace gfx |