Home | History | Annotate | Download | only in gl
      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