180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrResource.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "GrGpu.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSK_DEFINE_INST_COUNT(GrResource) 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek SollenbergerGrResource::GrResource(GrGpu* gpu, bool isWrapped) { 16d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger fGpu = gpu; 17d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger fCacheEntry = NULL; 18d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger fDeferredRefCount = 0; 19d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger if (isWrapped) { 20d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger fFlags = kWrapped_Flag; 21d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger } else { 22d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger fFlags = 0; 23d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger } 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fGpu->insertResource(this); 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruGrResource::~GrResource() { 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // subclass should have released this. 29d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger GrAssert(0 == fDeferredRefCount); 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru GrAssert(!this->isValid()); 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid GrResource::release() { 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (NULL != fGpu) { 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->onRelease(); 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fGpu->removeResource(this); 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fGpu = NULL; 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid GrResource::abandon() { 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (NULL != fGpu) { 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->onAbandon(); 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fGpu->removeResource(this); 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fGpu = NULL; 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst GrContext* GrResource::getContext() const { 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (NULL != fGpu) { 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fGpu->getContext(); 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else { 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruGrContext* GrResource::getContext() { 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (NULL != fGpu) { 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fGpu->getContext(); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else { 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 64