Index: include/gpu/GrTexture.h |
diff --git a/include/gpu/GrTexture.h b/include/gpu/GrTexture.h |
index 03ea0584855d3258f61b43650a2db0b7dc58daa2..ac31f51b001b693a571022e794c15a4ccd6f59d2 100644 |
--- a/include/gpu/GrTexture.h |
+++ b/include/gpu/GrTexture.h |
@@ -15,10 +15,41 @@ |
class GrResourceKey; |
class GrTextureParams; |
-class GrTextureImpl; |
class GrTexture : public GrSurface { |
+ |
public: |
+ SK_DECLARE_INST_COUNT(GrTexture) |
+ // from GrResource |
+ /** |
+ * Informational texture flags |
+ */ |
+ enum FlagBits { |
+ kFirstBit = (kLastPublic_GrTextureFlagBit << 1), |
+ |
+ /** |
+ * This texture should be returned to the texture cache when |
+ * it is no longer reffed |
+ */ |
+ kReturnToCache_FlagBit = kFirstBit, |
+ }; |
+ |
+ void setFlag(GrTextureFlags flags) { |
+ fDesc.fFlags = fDesc.fFlags | flags; |
+ } |
+ void resetFlag(GrTextureFlags flags) { |
+ fDesc.fFlags = fDesc.fFlags & ~flags; |
+ } |
+ bool isSetFlag(GrTextureFlags flags) const { |
+ return 0 != (fDesc.fFlags & flags); |
+ } |
+ |
+ void dirtyMipMaps(bool mipMapsDirty); |
+ |
+ bool mipMapsAreDirty() const { |
+ return kValid_MipMapsStatus != fMipMapsStatus; |
+ } |
+ |
/** |
* Approximate number of bytes used by the texture |
*/ |
@@ -37,14 +68,30 @@ |
size_t rowBytes = 0, |
uint32_t pixelOpsFlags = 0) SK_OVERRIDE; |
+ /** |
+ * @return this texture |
+ */ |
virtual GrTexture* asTexture() SK_OVERRIDE { return this; } |
virtual const GrTexture* asTexture() const SK_OVERRIDE { return this; } |
- virtual GrRenderTarget* asRenderTarget() SK_OVERRIDE { return fRenderTarget.get(); } |
- virtual const GrRenderTarget* asRenderTarget() const SK_OVERRIDE { return fRenderTarget.get(); } |
- |
- /** |
- * Convert from texels to normalized texture coords for POT textures only. Please don't add |
- * new callsites for these functions. They are slated for removal. |
+ |
+ /** |
+ * Retrieves the render target underlying this texture that can be passed to |
+ * GrGpu::setRenderTarget(). |
+ * |
+ * @return handle to render target or NULL if the texture is not a |
+ * render target |
+ */ |
+ virtual GrRenderTarget* asRenderTarget() SK_OVERRIDE { |
+ return fRenderTarget.get(); |
+ } |
+ virtual const GrRenderTarget* asRenderTarget() const SK_OVERRIDE { |
+ return fRenderTarget.get(); |
+ } |
+ |
+ // GrTexture |
+ /** |
+ * Convert from texels to normalized texture coords for POT textures |
+ * only. |
*/ |
SkFixed normalizeFixedX(SkFixed x) const { |
SkASSERT(GrIsPow2(fDesc.fWidth)); |
@@ -61,6 +108,12 @@ |
*/ |
virtual GrBackendObject getTextureHandle() const = 0; |
+ /** |
+ * Call this when the state of the native API texture object is |
+ * altered directly, without being tracked by skia. |
+ */ |
+ virtual void invalidateCachedState() = 0; |
+ |
#ifdef SK_DEBUG |
void validate() const { |
this->INHERITED::validate(); |
@@ -68,83 +121,6 @@ |
this->validateDesc(); |
} |
#endif |
- |
- GrTextureImpl* impl() { return reinterpret_cast<GrTextureImpl*>(this); } |
- const GrTextureImpl* impl() const { return reinterpret_cast<const GrTextureImpl*>(this); } |
- |
-protected: |
- // A texture refs its rt representation but not vice-versa. It is up to |
- // the subclass constructor to initialize this pointer. |
- SkAutoTUnref<GrRenderTarget> fRenderTarget; |
- |
- GrTexture(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc) |
- : INHERITED(gpu, isWrapped, desc) |
- , fRenderTarget(NULL) { |
- // only make sense if alloc size is pow2 |
- fShiftFixedX = 31 - SkCLZ(fDesc.fWidth); |
- fShiftFixedY = 31 - SkCLZ(fDesc.fHeight); |
- } |
- |
- virtual ~GrTexture(); |
- |
- // GrResource overrides |
- virtual void onRelease() SK_OVERRIDE; |
- virtual void onAbandon() SK_OVERRIDE; |
- |
- void validateDesc() const; |
- |
-private: |
- virtual void internal_dispose() const SK_OVERRIDE; |
- |
- // these two shift a fixed-point value into normalized coordinates |
- // for this texture if the texture is power of two sized. |
- int fShiftFixedX; |
- int fShiftFixedY; |
- |
- typedef GrSurface INHERITED; |
-}; |
- |
-class GrTextureImpl : public GrTexture { |
-public: |
- SK_DECLARE_INST_COUNT(GrTextureImpl) |
- /** |
- * Informational texture flags |
- */ |
- enum FlagBits { |
- kFirstBit = (kLastPublic_GrTextureFlagBit << 1), |
- |
- /** |
- * This texture should be returned to the texture cache when |
- * it is no longer reffed |
- */ |
- kReturnToCache_FlagBit = kFirstBit, |
- }; |
- |
- void setFlag(GrTextureFlags flags) { |
- fDesc.fFlags = fDesc.fFlags | flags; |
- } |
- void resetFlag(GrTextureFlags flags) { |
- fDesc.fFlags = fDesc.fFlags & ~flags; |
- } |
- bool isSetFlag(GrTextureFlags flags) const { |
- return 0 != (fDesc.fFlags & flags); |
- } |
- |
- void dirtyMipMaps(bool mipMapsDirty); |
- |
- bool mipMapsAreDirty() const { |
- return kValid_MipMapsStatus != fMipMapsStatus; |
- } |
- |
- bool hasMipMaps() const { |
- return kNotAllocated_MipMapsStatus != fMipMapsStatus; |
- } |
- |
- /** |
- * Call this when the state of the native API texture object is |
- * altered directly, without being tracked by skia. |
- */ |
- virtual void invalidateCachedState() = 0; |
static GrResourceKey ComputeKey(const GrGpu* gpu, |
const GrTextureParams* params, |
@@ -155,10 +131,26 @@ |
static bool NeedsBilerp(const GrResourceKey& key); |
protected: |
- GrTextureImpl(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc) |
+ // A texture refs its rt representation but not vice-versa. It is up to |
+ // the subclass constructor to initialize this pointer. |
+ SkAutoTUnref<GrRenderTarget> fRenderTarget; |
+ |
+ GrTexture(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc) |
: INHERITED(gpu, isWrapped, desc) |
+ , fRenderTarget(NULL) |
, fMipMapsStatus(kNotAllocated_MipMapsStatus) { |
- } |
+ |
+ // only make sense if alloc size is pow2 |
+ fShiftFixedX = 31 - SkCLZ(fDesc.fWidth); |
+ fShiftFixedY = 31 - SkCLZ(fDesc.fHeight); |
+ } |
+ virtual ~GrTexture(); |
+ |
+ // GrResource overrides |
+ virtual void onRelease() SK_OVERRIDE; |
+ virtual void onAbandon() SK_OVERRIDE; |
+ |
+ void validateDesc() const; |
private: |
enum MipMapsStatus { |
@@ -167,9 +159,16 @@ |
kValid_MipMapsStatus |
}; |
+ // these two shift a fixed-point value into normalized coordinates |
+ // for this texture if the texture is power of two sized. |
+ int fShiftFixedX; |
+ int fShiftFixedY; |
+ |
MipMapsStatus fMipMapsStatus; |
- typedef GrTexture INHERITED; |
+ virtual void internal_dispose() const SK_OVERRIDE; |
+ |
+ typedef GrSurface INHERITED; |
}; |
/** |
@@ -205,7 +204,6 @@ |
fTexture.reset(SkSafeRef(texture)); |
return texture; |
} |
- |
private: |
SkAutoTUnref<GrTexture> fTexture; |
SkIPoint fOffset; |