GrTexturePriv.h revision bcf0a52d4f4221b158e68a06ba0c4cc4db011060
1/*
2 * Copyright 2014 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.
6 */
7
8#ifndef GrTexturePriv_DEFINED
9#define GrTexturePriv_DEFINED
10
11#include "GrTexture.h"
12
13/** Class that adds methods to GrTexture that are only intended for use internal to Skia.
14    This class is purely a privileged window into GrTexture. It should never have additional data
15    members or virtual methods.
16    Non-static methods that are not trivial inlines should be spring-boarded (e.g. declared and
17    implemented privately in GrTexture with a inline public method here). */
18class GrTexturePriv {
19public:
20    void setFlag(GrTextureFlags flags) {
21        fTexture->fDesc.fFlags = fTexture->fDesc.fFlags | flags;
22    }
23
24    void resetFlag(GrTextureFlags flags) {
25        fTexture->fDesc.fFlags = fTexture->fDesc.fFlags & ~flags;
26    }
27
28    bool isSetFlag(GrTextureFlags flags) const {
29        return 0 != (fTexture->fDesc.fFlags & flags);
30    }
31
32    void dirtyMipMaps(bool mipMapsDirty) { fTexture->dirtyMipMaps(mipMapsDirty); }
33
34    bool mipMapsAreDirty() const {
35        return GrTexture::kValid_MipMapsStatus != fTexture->fMipMapsStatus;
36    }
37
38    bool hasMipMaps() const {
39        return GrTexture::kNotAllocated_MipMapsStatus != fTexture->fMipMapsStatus;
40    }
41
42    static GrResourceKey::ResourceType ResourceType() {
43        static const GrResourceKey::ResourceType gType = GrResourceKey::GenerateResourceType();
44        return gType;
45    }
46
47    static GrResourceKey ComputeKey(const GrGpu* gpu,
48                                    const GrTextureParams* params,
49                                    const GrTextureDesc& desc,
50                                    const GrCacheID& cacheID);
51    static GrResourceKey ComputeScratchKey(const GrTextureDesc& desc);
52    static bool NeedsResizing(const GrResourceKey& key);
53    static bool NeedsBilerp(const GrResourceKey& key);
54
55
56    // TODO: Move this logic and the shift values out of here and to the callers.
57    SkFixed normalizeFixedX(SkFixed x) const {
58        SkASSERT(SkIsPow2(fTexture->fDesc.fWidth));
59        return x >> fTexture->fShiftFixedX;
60    }
61
62    SkFixed normalizeFixedY(SkFixed y) const {
63        SkASSERT(SkIsPow2(fTexture->fDesc.fHeight));
64        return y >> fTexture->fShiftFixedY;
65    }
66
67private:
68    GrTexturePriv(GrTexture* texture) : fTexture(texture) { }
69    GrTexturePriv(const GrTexturePriv& that) : fTexture(that.fTexture) { }
70    GrTexturePriv& operator=(const GrTexturePriv&); // unimpl
71
72    // No taking addresses of this type.
73    const GrTexturePriv* operator&() const;
74    GrTexturePriv* operator&();
75
76    GrTexture* fTexture;
77
78    friend class GrTexture; // to construct/copy this type.
79};
80
81inline GrTexturePriv GrTexture::texturePriv() { return GrTexturePriv(this); }
82
83inline const GrTexturePriv GrTexture::texturePriv () const {
84    return GrTexturePriv(const_cast<GrTexture*>(this));
85}
86
87#endif
88