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 #include "base/logging.h"
      6 #include "ui/gl/scoped_cgl.h"
      7 
      8 namespace gfx {
      9 
     10 ScopedCGLSetCurrentContext::ScopedCGLSetCurrentContext(CGLContextObj context) {
     11   CGLContextObj previous_context = CGLGetCurrentContext();
     12   // It is possible for the previous context to have a zero reference count,
     13   // because making a context current does not increment the reference count.
     14   // In that case, do not restore the previous context.
     15   if (previous_context && CGLGetContextRetainCount(previous_context)) {
     16     previous_context_.reset(previous_context, base::scoped_policy::RETAIN);
     17   }
     18   CGLError error = CGLSetCurrentContext(context);
     19   DCHECK_EQ(error, kCGLNoError) << "CGLSetCurrentContext should never fail";
     20 }
     21 
     22 ScopedCGLSetCurrentContext::~ScopedCGLSetCurrentContext() {
     23   CGLError error = CGLSetCurrentContext(previous_context_);
     24   DCHECK_EQ(error, kCGLNoError) << "CGLSetCurrentContext should never fail";
     25 }
     26 
     27 }  // namespace gfx
     28