| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | |
| 10 #include "GrContext.h" | 9 #include "GrContext.h" |
| 11 #include "GrDrawTargetCaps.h" | 10 #include "GrDrawTargetCaps.h" |
| 12 #include "GrGpu.h" | 11 #include "GrGpu.h" |
| 13 #include "GrRenderTarget.h" | |
| 14 #include "GrResourceCache.h" | 12 #include "GrResourceCache.h" |
| 15 #include "GrTexture.h" | 13 #include "GrTexture.h" |
| 16 #include "GrTexturePriv.h" | 14 #include "GrTexturePriv.h" |
| 17 | 15 |
| 18 GrTexture::~GrTexture() { | |
| 19 if (fRenderTarget.get()) { | |
| 20 fRenderTarget.get()->owningTextureDestroyed(); | |
| 21 } | |
| 22 } | |
| 23 | |
| 24 void GrTexture::dirtyMipMaps(bool mipMapsDirty) { | 16 void GrTexture::dirtyMipMaps(bool mipMapsDirty) { |
| 25 if (mipMapsDirty) { | 17 if (mipMapsDirty) { |
| 26 if (kValid_MipMapsStatus == fMipMapsStatus) { | 18 if (kValid_MipMapsStatus == fMipMapsStatus) { |
| 27 fMipMapsStatus = kAllocated_MipMapsStatus; | 19 fMipMapsStatus = kAllocated_MipMapsStatus; |
| 28 } | 20 } |
| 29 } else { | 21 } else { |
| 30 const bool sizeChanged = kNotAllocated_MipMapsStatus == fMipMapsStatus; | 22 const bool sizeChanged = kNotAllocated_MipMapsStatus == fMipMapsStatus; |
| 31 fMipMapsStatus = kValid_MipMapsStatus; | 23 fMipMapsStatus = kValid_MipMapsStatus; |
| 32 if (sizeChanged) { | 24 if (sizeChanged) { |
| 33 // This must not be called until after changing fMipMapsStatus. | 25 // This must not be called until after changing fMipMapsStatus. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 46 } | 38 } |
| 47 | 39 |
| 48 if (this->texturePriv().hasMipMaps()) { | 40 if (this->texturePriv().hasMipMaps()) { |
| 49 // We don't have to worry about the mipmaps being a different size than | 41 // We don't have to worry about the mipmaps being a different size than |
| 50 // we'd expect because we never change fDesc.fWidth/fHeight. | 42 // we'd expect because we never change fDesc.fWidth/fHeight. |
| 51 textureSize *= 2; | 43 textureSize *= 2; |
| 52 } | 44 } |
| 53 return textureSize; | 45 return textureSize; |
| 54 } | 46 } |
| 55 | 47 |
| 56 void GrTexture::onRelease() { | |
| 57 | |
| 58 INHERITED::onRelease(); | |
| 59 } | |
| 60 | |
| 61 void GrTexture::onAbandon() { | |
| 62 if (fRenderTarget.get()) { | |
| 63 fRenderTarget->abandon(); | |
| 64 } | |
| 65 INHERITED::onAbandon(); | |
| 66 } | |
| 67 | |
| 68 void GrTexture::validateDesc() const { | 48 void GrTexture::validateDesc() const { |
| 69 if (this->asRenderTarget()) { | 49 if (this->asRenderTarget()) { |
| 70 // This texture has a render target | 50 // This texture has a render target |
| 71 SkASSERT(0 != (fDesc.fFlags & kRenderTarget_GrSurfaceFlag)); | 51 SkASSERT(0 != (fDesc.fFlags & kRenderTarget_GrSurfaceFlag)); |
| 72 | 52 |
| 73 if (this->asRenderTarget()->getStencilBuffer()) { | 53 if (this->asRenderTarget()->getStencilBuffer()) { |
| 74 SkASSERT(0 != (fDesc.fFlags & kNoStencil_GrSurfaceFlag)); | 54 SkASSERT(0 != (fDesc.fFlags & kNoStencil_GrSurfaceFlag)); |
| 75 } else { | 55 } else { |
| 76 SkASSERT(0 == (fDesc.fFlags & kNoStencil_GrSurfaceFlag)); | 56 SkASSERT(0 == (fDesc.fFlags & kNoStencil_GrSurfaceFlag)); |
| 77 } | 57 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 return renderTarget ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOr
igin; | 113 return renderTarget ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOr
igin; |
| 134 } else { | 114 } else { |
| 135 return desc.fOrigin; | 115 return desc.fOrigin; |
| 136 } | 116 } |
| 137 } | 117 } |
| 138 } | 118 } |
| 139 | 119 |
| 140 ////////////////////////////////////////////////////////////////////////////// | 120 ////////////////////////////////////////////////////////////////////////////// |
| 141 GrTexture::GrTexture(GrGpu* gpu, bool isWrapped, const GrSurfaceDesc& desc) | 121 GrTexture::GrTexture(GrGpu* gpu, bool isWrapped, const GrSurfaceDesc& desc) |
| 142 : INHERITED(gpu, isWrapped, desc) | 122 : INHERITED(gpu, isWrapped, desc) |
| 143 , fRenderTarget(NULL) | |
| 144 , fMipMapsStatus(kNotAllocated_MipMapsStatus) { | 123 , fMipMapsStatus(kNotAllocated_MipMapsStatus) { |
| 145 this->setScratchKey(GrTexturePriv::ComputeScratchKey(desc)); | 124 this->setScratchKey(GrTexturePriv::ComputeScratchKey(desc)); |
| 146 // only make sense if alloc size is pow2 | 125 // only make sense if alloc size is pow2 |
| 147 fShiftFixedX = 31 - SkCLZ(fDesc.fWidth); | 126 fShiftFixedX = 31 - SkCLZ(fDesc.fWidth); |
| 148 fShiftFixedY = 31 - SkCLZ(fDesc.fHeight); | 127 fShiftFixedY = 31 - SkCLZ(fDesc.fHeight); |
| 149 } | 128 } |
| 150 | 129 |
| 151 GrResourceKey GrTexturePriv::ComputeKey(const GrGpu* gpu, | 130 GrResourceKey GrTexturePriv::ComputeKey(const GrGpu* gpu, |
| 152 const GrTextureParams* params, | 131 const GrTextureParams* params, |
| 153 const GrSurfaceDesc& desc, | 132 const GrSurfaceDesc& desc, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 175 return GrResourceKey(cacheID, ResourceType(), 0); | 154 return GrResourceKey(cacheID, ResourceType(), 0); |
| 176 } | 155 } |
| 177 | 156 |
| 178 bool GrTexturePriv::NeedsResizing(const GrResourceKey& key) { | 157 bool GrTexturePriv::NeedsResizing(const GrResourceKey& key) { |
| 179 return SkToBool(key.getResourceFlags() & kStretchToPOT_TextureFlag); | 158 return SkToBool(key.getResourceFlags() & kStretchToPOT_TextureFlag); |
| 180 } | 159 } |
| 181 | 160 |
| 182 bool GrTexturePriv::NeedsBilerp(const GrResourceKey& key) { | 161 bool GrTexturePriv::NeedsBilerp(const GrResourceKey& key) { |
| 183 return SkToBool(key.getResourceFlags() & kBilerp_TextureFlag); | 162 return SkToBool(key.getResourceFlags() & kBilerp_TextureFlag); |
| 184 } | 163 } |
| OLD | NEW |