Edit

kc3-lang/angle/src/libANGLE/RefCountObject.cpp

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-11-20 15:15:01
    Hash : 2207213b
    Message : Move as many files as possible from common to libANGLE. BUG=angle:733 Change-Id: If01c91cd52ac5c2102276a9fdc4b68ebc13e47f9 Reviewed-on: https://chromium-review.googlesource.com/231850 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/RefCountObject.cpp
  • //
    // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // RefCountObject.cpp: Defines the gl::RefCountObject base class that provides
    // lifecycle support for GL objects using the traditional BindObject scheme, but
    // that need to be reference counted for correct cross-context deletion.
    // (Concretely, textures, buffers and renderbuffers.)
    
    #include "RefCountObject.h"
    
    RefCountObject::RefCountObject(GLuint id)
    {
        mId = id;
        mRefCount = 0;
    }
    
    RefCountObject::~RefCountObject()
    {
        ASSERT(mRefCount == 0);
    }
    
    void RefCountObject::addRef() const
    {
        mRefCount++;
    }
    
    void RefCountObject::release() const
    {
        ASSERT(mRefCount > 0);
    
        if (--mRefCount == 0)
        {
            delete this;
        }
    }
    
    void RefCountObjectBindingPointer::set(RefCountObject *newObject)
    {
        // addRef first in case newObject == mObject and this is the last reference to it.
        if (newObject != NULL) newObject->addRef();
        if (mObject != NULL) mObject->release();
    
        mObject = newObject;
    }