13f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com/* 23f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * Copyright 2011 Google Inc. 33f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * 43f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 53f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * found in the LICENSE file. 63f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com */ 73f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 83f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#include "GrGLTexture.h" 93f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#include "GrGpuGL.h" 103f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 11a2552aea03ee3cbf85c5f2c20f5b3835db5e0335reed@google.comSK_DEFINE_INST_COUNT(GrGLTexID) 12a2552aea03ee3cbf85c5f2c20f5b3835db5e0335reed@google.com 133f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#define GPUGL static_cast<GrGpuGL*>(getGpu()) 143f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 153f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#define GL_CALL(X) GR_GL_CALL(GPUGL->glInterface(), X) 163f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 173f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.comvoid GrGLTexture::init(GrGpuGL* gpu, 183f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com const Desc& textureDesc, 19f2bcd4b5f78fefe9ac4e5d2a9e01c3aa4bfba922bsalomon@google.com const GrGLRenderTarget::Desc* rtDesc) { 203f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 213f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GrAssert(0 != textureDesc.fTextureID); 223f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 23f2bcd4b5f78fefe9ac4e5d2a9e01c3aa4bfba922bsalomon@google.com fTexParams.invalidate(); 24f2bcd4b5f78fefe9ac4e5d2a9e01c3aa4bfba922bsalomon@google.com fTexParamsTimestamp = GrGpu::kExpiredTimestamp; 2560c9e304561e251321bbb01365b2448a33e53d44commit-bot@chromium.org fTexIDObj.reset(SkNEW_ARGS(GrGLTexID, (GPUGL->glInterface(), 2660c9e304561e251321bbb01365b2448a33e53d44commit-bot@chromium.org textureDesc.fTextureID, 2760c9e304561e251321bbb01365b2448a33e53d44commit-bot@chromium.org textureDesc.fIsWrapped))); 283d9e74fa463118b4b3adb34571fc555ad7841397skia.committer@gmail.com 293f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com if (NULL != rtDesc) { 303f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GrGLIRect vp; 313f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com vp.fLeft = 0; 326ac0c1516fcc80b08bcd9b2180627cbf3a52152bbsalomon@google.com vp.fWidth = textureDesc.fWidth; 336ac0c1516fcc80b08bcd9b2180627cbf3a52152bbsalomon@google.com vp.fBottom = 0; 346ac0c1516fcc80b08bcd9b2180627cbf3a52152bbsalomon@google.com vp.fHeight = textureDesc.fHeight; 353f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 36f0d1179507b748694c617e72a6afaa3c83db6526bsalomon@google.com fRenderTarget.reset(SkNEW_ARGS(GrGLRenderTarget, (gpu, *rtDesc, vp, fTexIDObj, this))); 373f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 383f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 393f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 403f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.comGrGLTexture::GrGLTexture(GrGpuGL* gpu, 41935e9f4fafdfc64130e6be9ea2bb30e3bafd852armistry@google.com const Desc& textureDesc) 42e86e1ce3df0f3ded2567eabd487d53ad4e6d6692senorblanco@chromium.org : INHERITED(gpu, textureDesc.fIsWrapped, textureDesc) { 43f2bcd4b5f78fefe9ac4e5d2a9e01c3aa4bfba922bsalomon@google.com this->init(gpu, textureDesc, NULL); 443f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 453f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 463f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.comGrGLTexture::GrGLTexture(GrGpuGL* gpu, 473f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com const Desc& textureDesc, 48f2bcd4b5f78fefe9ac4e5d2a9e01c3aa4bfba922bsalomon@google.com const GrGLRenderTarget::Desc& rtDesc) 49e86e1ce3df0f3ded2567eabd487d53ad4e6d6692senorblanco@chromium.org : INHERITED(gpu, textureDesc.fIsWrapped, textureDesc) { 50f2bcd4b5f78fefe9ac4e5d2a9e01c3aa4bfba922bsalomon@google.com this->init(gpu, textureDesc, &rtDesc); 513f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 523f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 533f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.comvoid GrGLTexture::onRelease() { 543f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GPUGL->notifyTextureDelete(this); 5560c9e304561e251321bbb01365b2448a33e53d44commit-bot@chromium.org fTexIDObj.reset(NULL); 56a7d044cb3a87edb8151cb7e256be799162a96190robertphillips@google.com INHERITED::onRelease(); 573f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 583f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 593f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.comvoid GrGLTexture::onAbandon() { 6060c9e304561e251321bbb01365b2448a33e53d44commit-bot@chromium.org if (NULL != fTexIDObj.get()) { 613f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com fTexIDObj->abandon(); 6260c9e304561e251321bbb01365b2448a33e53d44commit-bot@chromium.org fTexIDObj.reset(NULL); 633f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 64a7d044cb3a87edb8151cb7e256be799162a96190robertphillips@google.com 65a7d044cb3a87edb8151cb7e256be799162a96190robertphillips@google.com INHERITED::onAbandon(); 663f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 673f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 68e0abdaaf1026d10f2b0c1f3ae3865dfb2861aa00bsalomon@google.comGrBackendObject GrGLTexture::getTextureHandle() const { 6960c9e304561e251321bbb01365b2448a33e53d44commit-bot@chromium.org return static_cast<GrBackendObject>(this->textureID()); 703f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 71