Home | History | Annotate | Download | only in gl
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_GL_GL_SHARE_GROUP_H_
      6 #define UI_GL_GL_SHARE_GROUP_H_
      7 
      8 #include <set>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/memory/ref_counted.h"
     12 #include "ui/gl/gl_export.h"
     13 
     14 namespace gfx {
     15 
     16 class GLContext;
     17 
     18 // A group of GL contexts that share an ID namespace.
     19 class GL_EXPORT GLShareGroup : public base::RefCounted<GLShareGroup> {
     20  public:
     21   GLShareGroup();
     22 
     23   // These two should only be called from the constructor and destructor of
     24   // GLContext.
     25   void AddContext(GLContext* context);
     26   void RemoveContext(GLContext* context);
     27 
     28   // Returns a handle to any initialized context in the share group or NULL if
     29   // there are no initialized contexts in the share group.
     30   void* GetHandle();
     31 
     32   // Returns a pointer to any initialized context in the share group
     33   // or NULL if there are no initialized contexts in the share group.
     34   GLContext* GetContext();
     35 
     36   // Sets and returns the unique shared GL context. Used for context
     37   // virtualization.
     38   void SetSharedContext(GLContext* context);
     39   GLContext* GetSharedContext();
     40 
     41 #if defined(OS_MACOSX)
     42   // Sets and returns the ID of the renderer that all contexts in this share
     43   // group should be on.
     44   void SetRendererID(int renderer_id);
     45   int GetRendererID();
     46 #endif
     47 
     48  private:
     49   friend class base::RefCounted<GLShareGroup>;
     50 
     51   ~GLShareGroup();
     52 
     53   // References to GLContext are by raw pointer to avoid a reference count
     54   // cycle.
     55   typedef std::set<GLContext*> ContextSet;
     56   ContextSet contexts_;
     57 
     58   GLContext* shared_context_;
     59 
     60 #if defined(OS_MACOSX)
     61   int renderer_id_;
     62 #endif
     63 
     64   DISALLOW_COPY_AND_ASSIGN(GLShareGroup);
     65 };
     66 
     67 }  // namespace gfx
     68 
     69 #endif  // UI_GL_GL_SHARE_GROUP_H_
     70