18fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
78fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com */
88fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
10089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.org#include "GrGpuObject.h"
118fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com#include "GrGpu.h"
128fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com
13089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.orgGrGpuObject::GrGpuObject(GrGpu* gpu, bool isWrapped) {
14838f6e18fb13cd295f2c4d1e673cb03458f4e0a8bsalomon@google.com    fGpu              = gpu;
15838f6e18fb13cd295f2c4d1e673cb03458f4e0a8bsalomon@google.com    fDeferredRefCount = 0;
16728302281920727b96e6cec0bfc7575900f34a8bbsalomon@google.com    if (isWrapped) {
179ef0426e7c126f6ad6ba833d4543b92a197c95afrobertphillips@google.com        fFlags = kWrapped_FlagBit;
18728302281920727b96e6cec0bfc7575900f34a8bbsalomon@google.com    } else {
19728302281920727b96e6cec0bfc7575900f34a8bbsalomon@google.com        fFlags = 0;
20728302281920727b96e6cec0bfc7575900f34a8bbsalomon@google.com    }
21089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.org    fGpu->insertObject(this);
228fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com}
238fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com
24089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.orgGrGpuObject::~GrGpuObject() {
2576b7fcc79ee47db6ebea4f27e0070c467684418absalomon@google.com    // subclass should have released this.
26f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org    SkASSERT(0 == fDeferredRefCount);
27089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.org    SkASSERT(this->wasDestroyed());
2876b7fcc79ee47db6ebea4f27e0070c467684418absalomon@google.com}
2976b7fcc79ee47db6ebea4f27e0070c467684418absalomon@google.com
30089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.orgvoid GrGpuObject::release() {
318fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com    if (NULL != fGpu) {
328fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com        this->onRelease();
33089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.org        fGpu->removeObject(this);
348fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com        fGpu = NULL;
358fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com    }
368fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com}
378fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com
38089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.orgvoid GrGpuObject::abandon() {
398fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com    if (NULL != fGpu) {
408fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com        this->onAbandon();
41089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.org        fGpu->removeObject(this);
428fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com        fGpu = NULL;
438fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com    }
448fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com}
45f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com
46089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.orgconst GrContext* GrGpuObject::getContext() const {
47f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com    if (NULL != fGpu) {
48f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com        return fGpu->getContext();
49f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com    } else {
50f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com        return NULL;
51f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com    }
52f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com}
53f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com
54089a780c3355129eefc942246534bc1f126b8ccbcommit-bot@chromium.orgGrContext* GrGpuObject::getContext() {
55f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com    if (NULL != fGpu) {
56f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com        return fGpu->getContext();
57f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com    } else {
58f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com        return NULL;
59f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com    }
60f7b5c1ebfdad1a77d301d1676235e79f8006883ebsalomon@google.com}
61