blob: 66d6371f06962170245a599787d28b64583f6c3e [file] [log] [blame]
reed@google.comac10a2d2010-12-22 21:39:39 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * 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.
reed@google.comac10a2d2010-12-22 21:39:39 +00006 */
7
reed@google.comac10a2d2010-12-22 21:39:39 +00008#include "GrGLTexture.h"
9#include "GrGpuGL.h"
10
reed@google.comfa35e3d2012-06-26 20:16:17 +000011SK_DEFINE_INST_COUNT(GrGLTexID)
12
bsalomon@google.com8fe72472011-03-30 21:26:44 +000013#define GPUGL static_cast<GrGpuGL*>(getGpu())
14
bsalomon@google.com0b77d682011-08-19 13:28:54 +000015#define GL_CALL(X) GR_GL_CALL(GPUGL->glInterface(), X)
16
bsalomon@google.com5bfc2172011-07-29 20:29:05 +000017void GrGLTexture::init(GrGpuGL* gpu,
18 const Desc& textureDesc,
bsalomon@google.com80d09b92011-11-05 21:21:13 +000019 const GrGLRenderTarget::Desc* rtDesc) {
bsalomon@google.com5bfc2172011-07-29 20:29:05 +000020
21 GrAssert(0 != textureDesc.fTextureID);
bsalomon@google.comc6cf7232011-02-17 16:43:10 +000022
bsalomon@google.com80d09b92011-11-05 21:21:13 +000023 fTexParams.invalidate();
24 fTexParamsTimestamp = GrGpu::kExpiredTimestamp;
tomhudson@google.comc377baf2012-07-09 20:17:56 +000025 fTexIDObj = SkNEW_ARGS(GrGLTexID,
26 (GPUGL->glInterface(),
27 textureDesc.fTextureID,
bsalomon@google.com72830222013-01-23 20:25:22 +000028 textureDesc.fIsWrapped));
skia.committer@gmail.come862d162012-10-31 02:01:18 +000029
bsalomon@google.com5bfc2172011-07-29 20:29:05 +000030 if (NULL != rtDesc) {
bsalomon@google.com8895a7a2011-02-18 16:09:55 +000031 GrGLIRect vp;
reed@google.comac10a2d2010-12-22 21:39:39 +000032 vp.fLeft = 0;
bsalomon@google.com99621082011-11-15 16:47:16 +000033 vp.fWidth = textureDesc.fWidth;
34 vp.fBottom = 0;
35 vp.fHeight = textureDesc.fHeight;
bsalomon@google.com8895a7a2011-02-18 16:09:55 +000036
tomhudson@google.comc377baf2012-07-09 20:17:56 +000037 fRenderTarget = SkNEW_ARGS(GrGLRenderTarget,
38 (gpu, *rtDesc, vp, fTexIDObj, this));
reed@google.comac10a2d2010-12-22 21:39:39 +000039 }
reed@google.comac10a2d2010-12-22 21:39:39 +000040}
41
bsalomon@google.com5bfc2172011-07-29 20:29:05 +000042GrGLTexture::GrGLTexture(GrGpuGL* gpu,
rmistry@google.comfbfcd562012-08-23 18:09:54 +000043 const Desc& textureDesc)
senorblanco@chromium.orged8659b2013-02-04 17:29:51 +000044 : INHERITED(gpu, textureDesc.fIsWrapped, textureDesc) {
bsalomon@google.com80d09b92011-11-05 21:21:13 +000045 this->init(gpu, textureDesc, NULL);
bsalomon@google.com5bfc2172011-07-29 20:29:05 +000046}
47
48GrGLTexture::GrGLTexture(GrGpuGL* gpu,
49 const Desc& textureDesc,
bsalomon@google.com80d09b92011-11-05 21:21:13 +000050 const GrGLRenderTarget::Desc& rtDesc)
senorblanco@chromium.orged8659b2013-02-04 17:29:51 +000051 : INHERITED(gpu, textureDesc.fIsWrapped, textureDesc) {
bsalomon@google.com80d09b92011-11-05 21:21:13 +000052 this->init(gpu, textureDesc, &rtDesc);
bsalomon@google.com5bfc2172011-07-29 20:29:05 +000053}
54
bsalomon@google.com8fe72472011-03-30 21:26:44 +000055void GrGLTexture::onRelease() {
Scroggoc29d7cd2011-06-16 13:14:21 +000056 GPUGL->notifyTextureDelete(this);
bsalomon@google.com8fe72472011-03-30 21:26:44 +000057 if (NULL != fTexIDObj) {
bsalomon@google.com8fe72472011-03-30 21:26:44 +000058 fTexIDObj->unref();
59 fTexIDObj = NULL;
bsalomon@google.com8fe72472011-03-30 21:26:44 +000060 }
robertphillips@google.comd3645542012-09-05 18:37:39 +000061
62 INHERITED::onRelease();
reed@google.comac10a2d2010-12-22 21:39:39 +000063}
64
bsalomon@google.com8fe72472011-03-30 21:26:44 +000065void GrGLTexture::onAbandon() {
66 if (NULL != fTexIDObj) {
67 fTexIDObj->abandon();
68 }
robertphillips@google.comd3645542012-09-05 18:37:39 +000069
70 INHERITED::onAbandon();
reed@google.comac10a2d2010-12-22 21:39:39 +000071}
72
bsalomon@google.com08afc842012-10-25 18:56:10 +000073GrBackendObject GrGLTexture::getTextureHandle() const {
bsalomon@google.com1da07462011-03-10 14:51:57 +000074 return fTexIDObj->id();
reed@google.comac10a2d2010-12-22 21:39:39 +000075}