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