| // 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_ |