• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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