|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef UI_GL_GL_SHARE_GROUP_H_ | 
|  | #define UI_GL_GL_SHARE_GROUP_H_ | 
|  |  | 
|  | #include <set> | 
|  |  | 
|  | #include "base/basictypes.h" | 
|  | #include "base/memory/ref_counted.h" | 
|  | #include "ui/gl/gl_export.h" | 
|  |  | 
|  | namespace gfx { | 
|  |  | 
|  | class GLContext; | 
|  |  | 
|  | // A group of GL contexts that share an ID namespace. | 
|  | class GL_EXPORT GLShareGroup : public base::RefCounted<GLShareGroup> { | 
|  | public: | 
|  | GLShareGroup(); | 
|  |  | 
|  | // These two should only be called from the constructor and destructor of | 
|  | // GLContext. | 
|  | void AddContext(GLContext* context); | 
|  | void RemoveContext(GLContext* context); | 
|  |  | 
|  | // Returns a handle to any initialized context in the share group or NULL if | 
|  | // there are no initialized contexts in the share group. | 
|  | void* GetHandle(); | 
|  |  | 
|  | // Returns a pointer to any initialized context in the share group | 
|  | // or NULL if there are no initialized contexts in the share group. | 
|  | GLContext* GetContext(); | 
|  |  | 
|  | // Sets and returns the unique shared GL context. Used for context | 
|  | // virtualization. | 
|  | void SetSharedContext(GLContext* context); | 
|  | GLContext* GetSharedContext(); | 
|  |  | 
|  | #if defined(OS_MACOSX) | 
|  | // Sets and returns the ID of the renderer that all contexts in this share | 
|  | // group should be on. | 
|  | void SetRendererID(int renderer_id); | 
|  | int GetRendererID(); | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | friend class base::RefCounted<GLShareGroup>; | 
|  |  | 
|  | ~GLShareGroup(); | 
|  |  | 
|  | // References to GLContext are by raw pointer to avoid a reference count | 
|  | // cycle. | 
|  | typedef std::set<GLContext*> ContextSet; | 
|  | ContextSet contexts_; | 
|  |  | 
|  | GLContext* shared_context_; | 
|  |  | 
|  | #if defined(OS_MACOSX) | 
|  | int renderer_id_; | 
|  | #endif | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(GLShareGroup); | 
|  | }; | 
|  |  | 
|  | }  // namespace gfx | 
|  |  | 
|  | #endif  // UI_GL_GL_SHARE_GROUP_H_ |