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