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.
5 #ifndef UI_GL_GL_SHARE_GROUP_H_
6 #define UI_GL_GL_SHARE_GROUP_H_
10 #include "base/basictypes.h"
11 #include "base/memory/ref_counted.h"
12 #include "ui/gl/gl_export.h"
18 // A group of GL contexts that share an ID namespace.
19 class GL_EXPORT GLShareGroup
: public base::RefCounted
<GLShareGroup
> {
23 // These two should only be called from the constructor and destructor of
25 void AddContext(GLContext
* context
);
26 void RemoveContext(GLContext
* context
);
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.
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();
36 // Sets and returns the unique shared GL context. Used for context
38 void SetSharedContext(GLContext
* context
);
39 GLContext
* GetSharedContext();
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
);
49 friend class base::RefCounted
<GLShareGroup
>;
53 // References to GLContext are by raw pointer to avoid a reference count
55 typedef std::set
<GLContext
*> ContextSet
;
58 GLContext
* shared_context_
;
60 #if defined(OS_MACOSX)
64 DISALLOW_COPY_AND_ASSIGN(GLShareGroup
);
69 #endif // UI_GL_GL_SHARE_GROUP_H_