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
init(GrGpuGL * gpu,const Desc & textureDesc,const GrGLRenderTarget::Desc * rtDesc)15 void 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
GrGLTexture(GrGpuGL * gpu,const Desc & textureDesc)39 GrGLTexture::GrGLTexture(GrGpuGL* gpu,
40 const Desc& textureDesc)
41 : INHERITED(gpu, textureDesc.fIsWrapped, textureDesc) {
42 this->init(gpu, textureDesc, NULL);
43 }
44
GrGLTexture(GrGpuGL * gpu,const Desc & textureDesc,const GrGLRenderTarget::Desc & rtDesc)45 GrGLTexture::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
onRelease()52 void GrGLTexture::onRelease() {
53 fTexIDObj.reset(NULL);
54 INHERITED::onRelease();
55 }
56
onAbandon()57 void GrGLTexture::onAbandon() {
58 if (fTexIDObj.get()) {
59 fTexIDObj->abandon();
60 fTexIDObj.reset(NULL);
61 }
62
63 INHERITED::onAbandon();
64 }
65
getTextureHandle() const66 GrBackendObject GrGLTexture::getTextureHandle() const {
67 return static_cast<GrBackendObject>(this->textureID());
68 }
69