• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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_SCOPED_CGL_H_
6 #define UI_GL_SCOPED_CGL_H_
7 
8 #include <OpenGL/OpenGL.h>
9 
10 #include "base/mac/scoped_typeref.h"
11 #include "ui/gl/gl_export.h"
12 
13 namespace base {
14 
15 template<>
16 struct ScopedTypeRefTraits<CGLContextObj> {
17   static void Retain(CGLContextObj object) {
18     CGLRetainContext(object);
19   }
20   static void Release(CGLContextObj object) {
21     CGLReleaseContext(object);
22   }
23 };
24 
25 template<>
26 struct ScopedTypeRefTraits<CGLPixelFormatObj> {
27   static void Retain(CGLPixelFormatObj object) {
28     CGLRetainPixelFormat(object);
29   }
30   static void Release(CGLPixelFormatObj object) {
31     CGLReleasePixelFormat(object);
32   }
33 };
34 
35 }  // namespace base
36 
37 namespace gfx {
38 
39 class GL_EXPORT ScopedCGLSetCurrentContext {
40  public:
41   explicit ScopedCGLSetCurrentContext(CGLContextObj context);
42   ~ScopedCGLSetCurrentContext();
43  private:
44   // Note that if a context is destroyed when it is current, then the current
45   // context is changed to NULL. Take out a reference on |previous_context_| to
46   // preserve this behavior (when this falls out of scope, |previous_context_|
47   // will be made current, then released, so NULL will be current if that
48   // release destroys the context).
49   base::ScopedTypeRef<CGLContextObj> previous_context_;
50 
51   DISALLOW_COPY_AND_ASSIGN(ScopedCGLSetCurrentContext);
52 };
53 
54 }  // namespace gfx
55 
56 #endif  // UI_GL_SCOPED_CGL_H_
57