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