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