GrGLTexture.cpp revision f6de475e5cbd143f348ff7738919e397b7fe7f57
1/*
2 * Copyright 2011 Google Inc.
3 *
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#include "GrGLTexture.h"
9#include "GrGpuGL.h"
10
11SK_DEFINE_INST_COUNT(GrGLTexID)
12
13#define GPUGL static_cast<GrGpuGL*>(getGpu())
14
15#define GL_CALL(X) GR_GL_CALL(GPUGL->glInterface(), X)
16
17void GrGLTexture::init(GrGpuGL* gpu,
18                       const Desc& textureDesc,
19                       const GrGLRenderTarget::Desc* rtDesc) {
20
21    SkASSERT(0 != textureDesc.fTextureID);
22
23    fTexParams.invalidate();
24    fTexParamsTimestamp = GrGpu::kExpiredTimestamp;
25    fTexIDObj.reset(SkNEW_ARGS(GrGLTexID, (GPUGL->glInterface(),
26                                           textureDesc.fTextureID,
27                                           textureDesc.fIsWrapped)));
28
29    if (NULL != rtDesc) {
30        GrGLIRect vp;
31        vp.fLeft   = 0;
32        vp.fWidth  = textureDesc.fWidth;
33        vp.fBottom = 0;
34        vp.fHeight = textureDesc.fHeight;
35
36        fRenderTarget.reset(SkNEW_ARGS(GrGLRenderTarget, (gpu, *rtDesc, vp, fTexIDObj, this)));
37    }
38}
39
40GrGLTexture::GrGLTexture(GrGpuGL* gpu,
41                         const Desc& textureDesc)
42    : INHERITED(gpu, textureDesc.fIsWrapped, textureDesc) {
43    this->init(gpu, textureDesc, NULL);
44}
45
46GrGLTexture::GrGLTexture(GrGpuGL* gpu,
47                         const Desc& textureDesc,
48                         const GrGLRenderTarget::Desc& rtDesc)
49    : INHERITED(gpu, textureDesc.fIsWrapped, textureDesc) {
50    this->init(gpu, textureDesc, &rtDesc);
51}
52
53void GrGLTexture::onRelease() {
54    GPUGL->notifyTextureDelete(this);
55    fTexIDObj.reset(NULL);
56    INHERITED::onRelease();
57}
58
59void GrGLTexture::onAbandon() {
60    if (NULL != fTexIDObj.get()) {
61        fTexIDObj->abandon();
62        fTexIDObj.reset(NULL);
63    }
64
65    INHERITED::onAbandon();
66}
67
68GrBackendObject GrGLTexture::getTextureHandle() const {
69    return static_cast<GrBackendObject>(this->textureID());
70}
71