1//
2// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// RefCountObject.cpp: Defines the gl::RefCountObject base class that provides
8// lifecycle support for GL objects using the traditional BindObject scheme, but
9// that need to be reference counted for correct cross-context deletion.
10// (Concretely, textures, buffers and renderbuffers.)
11
12#include "RefCountObject.h"
13
14RefCountObject::RefCountObject(GLuint id)
15{
16    mId = id;
17    mRefCount = 0;
18}
19
20RefCountObject::~RefCountObject()
21{
22    ASSERT(mRefCount == 0);
23}
24
25void RefCountObject::addRef() const
26{
27    mRefCount++;
28}
29
30void RefCountObject::release() const
31{
32    ASSERT(mRefCount > 0);
33
34    if (--mRefCount == 0)
35    {
36        delete this;
37    }
38}
39
40void RefCountObjectBindingPointer::set(RefCountObject *newObject)
41{
42    // addRef first in case newObject == mObject and this is the last reference to it.
43    if (newObject != NULL) newObject->addRef();
44    if (mObject != NULL) mObject->release();
45
46    mObject = newObject;
47}
48