1bdf2d80f459d43f5a6df074431bacf41584f81b7shannon.woods@transgaming.com#include "precompiled.h" 29ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// 39ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 49ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 59ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// found in the LICENSE file. 69ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// 79ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 89ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// RefCountObject.cpp: Defines the gl::RefCountObject base class that provides 99ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// lifecycle support for GL objects using the traditional BindObject scheme, but 109ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// that need to be reference counted for correct cross-context deletion. 119ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com// (Concretely, textures, buffers and renderbuffers.) 129ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 139ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com#include "RefCountObject.h" 149ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 159ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comRefCountObject::RefCountObject(GLuint id) 169ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com{ 179ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com mId = id; 189ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com mRefCount = 0; 199ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com} 209ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 219ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comRefCountObject::~RefCountObject() 229ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com{ 238d012dfca24b1151bdda0599d26ca79eb7817cf2apatrick@chromium.org ASSERT(mRefCount == 0); 249ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com} 259ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 269ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comvoid RefCountObject::addRef() const 279ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com{ 289ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com mRefCount++; 299ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com} 309ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 319ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comvoid RefCountObject::release() const 329ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com{ 339ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com ASSERT(mRefCount > 0); 349ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 359ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com if (--mRefCount == 0) 369ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com { 379ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com delete this; 389ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com } 399ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com} 409ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 419ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comvoid RefCountObjectBindingPointer::set(RefCountObject *newObject) 429ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com{ 439ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com // addRef first in case newObject == mObject and this is the last reference to it. 449ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com if (newObject != NULL) newObject->addRef(); 459ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com if (mObject != NULL) mObject->release(); 469ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com 479ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com mObject = newObject; 489ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com} 49