1 2/* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10#include "GrGLTexture.h" 11 12#include "GrGpuGL.h" 13 14#define GPUGL static_cast<GrGpuGL*>(getGpu()) 15 16#define GL_CALL(X) GR_GL_CALL(GPUGL->glInterface(), X) 17 18const GrGLenum* GrGLTexture::WrapMode2GLWrap() { 19 static const GrGLenum repeatModes[] = { 20 GR_GL_CLAMP_TO_EDGE, 21 GR_GL_REPEAT, 22 GR_GL_MIRRORED_REPEAT 23 }; 24 return repeatModes; 25}; 26 27void GrGLTexture::init(GrGpuGL* gpu, 28 const Desc& textureDesc, 29 const GrGLRenderTarget::Desc* rtDesc) { 30 31 GrAssert(0 != textureDesc.fTextureID); 32 33 fTexParams.invalidate(); 34 fTexParamsTimestamp = GrGpu::kExpiredTimestamp; 35 fTexIDObj = new GrGLTexID(GPUGL->glInterface(), 36 textureDesc.fTextureID, 37 textureDesc.fOwnsID); 38 fOrientation = textureDesc.fOrientation; 39 40 if (NULL != rtDesc) { 41 // we render to the top left 42 GrGLIRect vp; 43 vp.fLeft = 0; 44 vp.fWidth = textureDesc.fWidth; 45 vp.fBottom = 0; 46 vp.fHeight = textureDesc.fHeight; 47 48 fRenderTarget = new GrGLRenderTarget(gpu, *rtDesc, vp, fTexIDObj, this); 49 } 50} 51 52GrGLTexture::GrGLTexture(GrGpuGL* gpu, 53 const Desc& textureDesc) 54 : INHERITED(gpu, 55 textureDesc.fWidth, 56 textureDesc.fHeight, 57 textureDesc.fConfig) { 58 this->init(gpu, textureDesc, NULL); 59} 60 61GrGLTexture::GrGLTexture(GrGpuGL* gpu, 62 const Desc& textureDesc, 63 const GrGLRenderTarget::Desc& rtDesc) 64 : INHERITED(gpu, 65 textureDesc.fWidth, 66 textureDesc.fHeight, 67 textureDesc.fConfig) { 68 this->init(gpu, textureDesc, &rtDesc); 69} 70 71void GrGLTexture::onRelease() { 72 INHERITED::onRelease(); 73 GPUGL->notifyTextureDelete(this); 74 if (NULL != fTexIDObj) { 75 fTexIDObj->unref(); 76 fTexIDObj = NULL; 77 } 78} 79 80void GrGLTexture::onAbandon() { 81 INHERITED::onAbandon(); 82 if (NULL != fTexIDObj) { 83 fTexIDObj->abandon(); 84 } 85} 86 87intptr_t GrGLTexture::getTextureHandle() const { 88 return fTexIDObj->id(); 89} 90 91