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