diff options
Diffstat (limited to 'ui/gl/gl_share_group.h')
-rw-r--r-- | ui/gl/gl_share_group.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/ui/gl/gl_share_group.h b/ui/gl/gl_share_group.h new file mode 100644 index 0000000..2b39ba5 --- /dev/null +++ b/ui/gl/gl_share_group.h @@ -0,0 +1,52 @@ +// 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_ +#pragma once + +#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(); + + 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_; + + DISALLOW_COPY_AND_ASSIGN(GLShareGroup); +}; + +} // namespace gfx + +#endif // UI_GL_GL_SHARE_GROUP_H_ |