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