Line data Source code
1 :
2 : /*
3 : * Copyright 2011 Google Inc.
4 : *
5 : * Use of this source code is governed by a BSD-style license that can be
6 : * found in the LICENSE file.
7 : */
8 :
9 : #ifndef GrTexture_DEFINED
10 : #define GrTexture_DEFINED
11 :
12 : #include "GrSurface.h"
13 : #include "GrSamplerParams.h"
14 : #include "SkPoint.h"
15 : #include "SkRefCnt.h"
16 :
17 : class GrExternalTextureData;
18 : class GrTexturePriv;
19 :
20 0 : class GrTexture : virtual public GrSurface {
21 : public:
22 0 : GrTexture* asTexture() override { return this; }
23 0 : const GrTexture* asTexture() const override { return this; }
24 :
25 : /**
26 : * Return the native ID or handle to the texture, depending on the
27 : * platform. e.g. on OpenGL, return the texture ID.
28 : */
29 : virtual GrBackendObject getTextureHandle() const = 0;
30 :
31 : /**
32 : * This function indicates that the texture parameters (wrap mode, filtering, ...) have been
33 : * changed externally to Skia.
34 : */
35 : virtual void textureParamsModified() = 0;
36 :
37 : #ifdef SK_DEBUG
38 : void validate() const {
39 : this->INHERITED::validate();
40 : this->validateDesc();
41 : }
42 : #endif
43 :
44 : /** Access methods that are only to be used within Skia code. */
45 : inline GrTexturePriv texturePriv();
46 : inline const GrTexturePriv texturePriv() const;
47 :
48 : protected:
49 : GrTexture(GrGpu*, const GrSurfaceDesc&, GrSLType samplerType,
50 : GrSamplerParams::FilterMode highestFilterMode, bool wasMipMapDataProvided);
51 :
52 : void validateDesc() const;
53 : virtual std::unique_ptr<GrExternalTextureData> detachBackendTexture() = 0;
54 :
55 : private:
56 : void computeScratchKey(GrScratchKey*) const override;
57 : size_t onGpuMemorySize() const override;
58 : void dirtyMipMaps(bool mipMapsDirty);
59 :
60 : enum MipMapsStatus {
61 : kNotAllocated_MipMapsStatus,
62 : kAllocated_MipMapsStatus,
63 : kValid_MipMapsStatus
64 : };
65 :
66 : GrSLType fSamplerType;
67 : GrSamplerParams::FilterMode fHighestFilterMode;
68 : MipMapsStatus fMipMapsStatus;
69 : int fMaxMipMapLevel;
70 : SkDestinationSurfaceColorMode fMipColorMode;
71 : friend class GrTexturePriv;
72 :
73 : typedef GrSurface INHERITED;
74 : };
75 :
76 : #endif
|