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