| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef GrContext_DEFINED | 8 #ifndef GrContext_DEFINED |
| 9 #define GrContext_DEFINED | 9 #define GrContext_DEFINED |
| 10 | 10 |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 * Returns a texture matching the desc. It's contents are unknown. Subsequen
t | 283 * Returns a texture matching the desc. It's contents are unknown. Subsequen
t |
| 284 * requests with the same descriptor are not guaranteed to return the same | 284 * requests with the same descriptor are not guaranteed to return the same |
| 285 * texture. The same texture is guaranteed not be returned again until it is | 285 * texture. The same texture is guaranteed not be returned again until it is |
| 286 * unlocked. Call must be balanced with an unlockTexture() call. The caller | 286 * unlocked. Call must be balanced with an unlockTexture() call. The caller |
| 287 * owns a ref on the returned texture and must balance with a call to unref. | 287 * owns a ref on the returned texture and must balance with a call to unref. |
| 288 * | 288 * |
| 289 * Textures created by createAndLockTexture() hide the complications of | 289 * Textures created by createAndLockTexture() hide the complications of |
| 290 * tiling non-power-of-two textures on APIs that don't support this (e.g. | 290 * tiling non-power-of-two textures on APIs that don't support this (e.g. |
| 291 * unextended GLES2). Tiling a NPOT texture created by lockScratchTexture on | 291 * unextended GLES2). Tiling a NPOT texture created by lockScratchTexture on |
| 292 * such an API will create gaps in the tiling pattern. This includes clamp | 292 * such an API will create gaps in the tiling pattern. This includes clamp |
| 293 * mode. (This may be addressed in a future update.) | 293 * mode. (This may be addressed in a future update.)7 |
| 294 * |
| 295 * internalFlag is a temporary workaround until changes in the internal |
| 296 * architecture are complete. Use the default value. |
| 294 */ | 297 */ |
| 295 GrTexture* lockAndRefScratchTexture(const GrTextureDesc&, ScratchTexMatch ma
tch); | 298 GrTexture* lockAndRefScratchTexture(const GrTextureDesc&, ScratchTexMatch ma
tch, |
| 296 | 299 bool internalFlag = false); |
| 297 /** | |
| 298 * When done with an entry, call unlockScratchTexture(entry) on it, which r
eturns | |
| 299 * it to the cache, where it may be purged. This does not unref the texture
. | |
| 300 */ | |
| 301 void unlockScratchTexture(GrTexture* texture); | |
| 302 | 300 |
| 303 /** | 301 /** |
| 304 * Creates a texture that is outside the cache. Does not count against | 302 * Creates a texture that is outside the cache. Does not count against |
| 305 * cache's budget. | 303 * cache's budget. |
| 306 */ | 304 */ |
| 307 GrTexture* createUncachedTexture(const GrTextureDesc& desc, | 305 GrTexture* createUncachedTexture(const GrTextureDesc& desc, |
| 308 void* srcData, | 306 void* srcData, |
| 309 size_t rowBytes); | 307 size_t rowBytes); |
| 310 | 308 |
| 311 /** | 309 /** |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 944 | 942 |
| 945 /////////////////////////////////////////////////////////////////////////// | 943 /////////////////////////////////////////////////////////////////////////// |
| 946 // Functions intended for internal use only. | 944 // Functions intended for internal use only. |
| 947 GrGpu* getGpu() { return fGpu; } | 945 GrGpu* getGpu() { return fGpu; } |
| 948 const GrGpu* getGpu() const { return fGpu; } | 946 const GrGpu* getGpu() const { return fGpu; } |
| 949 GrFontCache* getFontCache() { return fFontCache; } | 947 GrFontCache* getFontCache() { return fFontCache; } |
| 950 GrLayerCache* getLayerCache() { return fLayerCache.get(); } | 948 GrLayerCache* getLayerCache() { return fLayerCache.get(); } |
| 951 GrDrawTarget* getTextTarget(); | 949 GrDrawTarget* getTextTarget(); |
| 952 const GrIndexBuffer* getQuadIndexBuffer() const; | 950 const GrIndexBuffer* getQuadIndexBuffer() const; |
| 953 GrAARectRenderer* getAARectRenderer() { return fAARectRenderer; } | 951 GrAARectRenderer* getAARectRenderer() { return fAARectRenderer; } |
| 952 GrResourceCache* getResourceCache() { return fResourceCache; } |
| 954 GrResourceCache2* getResourceCache2() { return fResourceCache2; } | 953 GrResourceCache2* getResourceCache2() { return fResourceCache2; } |
| 955 | 954 |
| 956 // Called by tests that draw directly to the context via GrDrawTarget | 955 // Called by tests that draw directly to the context via GrDrawTarget |
| 957 void getTestTarget(GrTestTarget*); | 956 void getTestTarget(GrTestTarget*); |
| 958 | 957 |
| 959 void addGpuTraceMarker(const GrGpuTraceMarker* marker); | 958 void addGpuTraceMarker(const GrGpuTraceMarker* marker); |
| 960 void removeGpuTraceMarker(const GrGpuTraceMarker* marker); | 959 void removeGpuTraceMarker(const GrGpuTraceMarker* marker); |
| 961 | 960 |
| 962 /** | 961 /** |
| 963 * Stencil buffers add themselves to the cache using addStencilBuffer. findS
tencilBuffer is | 962 * Stencil buffers add themselves to the cache using addStencilBuffer. findS
tencilBuffer is |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1068 | 1067 |
| 1069 void internalDrawPath(GrDrawTarget* target, bool useAA, const SkPath& path, | 1068 void internalDrawPath(GrDrawTarget* target, bool useAA, const SkPath& path, |
| 1070 const GrStrokeInfo& stroke); | 1069 const GrStrokeInfo& stroke); |
| 1071 | 1070 |
| 1072 GrTexture* createResizedTexture(const GrTextureDesc& desc, | 1071 GrTexture* createResizedTexture(const GrTextureDesc& desc, |
| 1073 const GrCacheID& cacheID, | 1072 const GrCacheID& cacheID, |
| 1074 const void* srcData, | 1073 const void* srcData, |
| 1075 size_t rowBytes, | 1074 size_t rowBytes, |
| 1076 bool filter); | 1075 bool filter); |
| 1077 | 1076 |
| 1078 // Needed so GrTexture's returnToCache helper function can call | 1077 GrTexture* createNewScratchTexture(const GrTextureDesc& desc); |
| 1079 // addExistingTextureToCache | |
| 1080 friend class GrTexture; | |
| 1081 friend class GrStencilAndCoverPathRenderer; | |
| 1082 friend class GrStencilAndCoverTextContext; | |
| 1083 | |
| 1084 // Add an existing texture to the texture cache. This is intended solely | |
| 1085 // for use with textures released from an GrAutoScratchTexture. | |
| 1086 void addExistingTextureToCache(GrTexture* texture); | |
| 1087 | 1078 |
| 1088 /** | 1079 /** |
| 1089 * These functions create premul <-> unpremul effects if it is possible to g
enerate a pair | 1080 * These functions create premul <-> unpremul effects if it is possible to g
enerate a pair |
| 1090 * of effects that make a readToUPM->writeToPM->readToUPM cycle invariant. O
therwise, they | 1081 * of effects that make a readToUPM->writeToPM->readToUPM cycle invariant. O
therwise, they |
| 1091 * return NULL. | 1082 * return NULL. |
| 1092 */ | 1083 */ |
| 1093 const GrFragmentProcessor* createPMToUPMEffect(GrTexture*, bool swapRAndB, c
onst SkMatrix&); | 1084 const GrFragmentProcessor* createPMToUPMEffect(GrTexture*, bool swapRAndB, c
onst SkMatrix&); |
| 1094 const GrFragmentProcessor* createUPMToPMEffect(GrTexture*, bool swapRAndB, c
onst SkMatrix&); | 1085 const GrFragmentProcessor* createUPMToPMEffect(GrTexture*, bool swapRAndB, c
onst SkMatrix&); |
| 1095 | 1086 |
| 1096 /** | 1087 /** |
| 1097 * This callback allows the resource cache to callback into the GrContext | 1088 * This callback allows the resource cache to callback into the GrContext |
| 1098 * when the cache is still overbudget after a purge. | 1089 * when the cache is still overbudget after a purge. |
| 1099 */ | 1090 */ |
| 1100 static bool OverbudgetCB(void* data); | 1091 static bool OverbudgetCB(void* data); |
| 1101 | 1092 |
| 1102 typedef SkRefCnt INHERITED; | 1093 typedef SkRefCnt INHERITED; |
| 1103 }; | 1094 }; |
| 1104 | 1095 |
| 1105 /** | 1096 /** |
| 1106 * Gets and locks a scratch texture from a descriptor using either exact or appr
oximate criteria. | 1097 * This is deprecated. Don't use it. |
| 1107 * Unlocks texture in the destructor. | |
| 1108 */ | 1098 */ |
| 1109 class SK_API GrAutoScratchTexture : public ::SkNoncopyable { | 1099 class SK_API GrAutoScratchTexture : public ::SkNoncopyable { |
| 1110 public: | 1100 public: |
| 1111 GrAutoScratchTexture() | 1101 GrAutoScratchTexture() |
| 1112 : fContext(NULL) | 1102 : fContext(NULL) |
| 1113 , fTexture(NULL) { | 1103 , fTexture(NULL) { |
| 1114 } | 1104 } |
| 1115 | 1105 |
| 1116 GrAutoScratchTexture(GrContext* context, | 1106 GrAutoScratchTexture(GrContext* context, |
| 1117 const GrTextureDesc& desc, | 1107 const GrTextureDesc& desc, |
| 1118 GrContext::ScratchTexMatch match = GrContext::kApprox_S
cratchTexMatch) | 1108 GrContext::ScratchTexMatch match = GrContext::kApprox_S
cratchTexMatch, |
| 1109 bool internalFlag = false) |
| 1119 : fContext(NULL) | 1110 : fContext(NULL) |
| 1120 , fTexture(NULL) { | 1111 , fTexture(NULL) { |
| 1121 this->set(context, desc, match); | 1112 this->set(context, desc, match, internalFlag); |
| 1122 } | 1113 } |
| 1123 | 1114 |
| 1124 ~GrAutoScratchTexture() { | 1115 ~GrAutoScratchTexture() { |
| 1125 this->reset(); | 1116 this->reset(); |
| 1126 } | 1117 } |
| 1127 | 1118 |
| 1128 void reset() { | 1119 void reset() { |
| 1129 if (fContext && fTexture) { | 1120 if (fContext && fTexture) { |
| 1130 fContext->unlockScratchTexture(fTexture); | |
| 1131 fTexture->unref(); | 1121 fTexture->unref(); |
| 1132 fTexture = NULL; | 1122 fTexture = NULL; |
| 1133 } | 1123 } |
| 1134 } | 1124 } |
| 1135 | 1125 |
| 1136 /* | 1126 GrTexture* detach() { |
| 1137 * When detaching a texture we do not unlock it in the texture cache but | 1127 GrTexture* texture = fTexture; |
| 1138 * we do set the returnToCache flag. In this way the texture remains | 1128 fTexture = NULL; |
| 1139 * "locked" in the texture cache until it is freed and recycled in | 1129 return texture; |
| 1140 * GrTexture::internal_dispose. In reality, the texture has been removed | 1130 } |
| 1141 * from the cache (because this is in AutoScratchTexture) and by not | |
| 1142 * calling unlockScratchTexture we simply don't re-add it. It will be | |
| 1143 * reattached in GrTexture::internal_dispose. | |
| 1144 * | |
| 1145 * Note that the caller is assumed to accept and manage the ref to the | |
| 1146 * returned texture. | |
| 1147 */ | |
| 1148 GrTexture* detach(); | |
| 1149 | 1131 |
| 1150 GrTexture* set(GrContext* context, | 1132 GrTexture* set(GrContext* context, |
| 1151 const GrTextureDesc& desc, | 1133 const GrTextureDesc& desc, |
| 1152 GrContext::ScratchTexMatch match = GrContext::kApprox_Scratch
TexMatch) { | 1134 GrContext::ScratchTexMatch match = GrContext::kApprox_Scratch
TexMatch, |
| 1135 bool internalFlag = 0) { |
| 1153 this->reset(); | 1136 this->reset(); |
| 1154 | 1137 |
| 1155 fContext = context; | 1138 fContext = context; |
| 1156 if (fContext) { | 1139 if (fContext) { |
| 1157 fTexture = fContext->lockAndRefScratchTexture(desc, match); | 1140 fTexture = fContext->lockAndRefScratchTexture(desc, match, internalF
lag); |
| 1158 if (NULL == fTexture) { | 1141 if (NULL == fTexture) { |
| 1159 fContext = NULL; | 1142 fContext = NULL; |
| 1160 } | 1143 } |
| 1161 return fTexture; | 1144 return fTexture; |
| 1162 } else { | 1145 } else { |
| 1163 return NULL; | 1146 return NULL; |
| 1164 } | 1147 } |
| 1165 } | 1148 } |
| 1166 | 1149 |
| 1167 GrTexture* texture() { return fTexture; } | 1150 GrTexture* texture() { return fTexture; } |
| 1168 | 1151 |
| 1169 private: | 1152 private: |
| 1170 GrContext* fContext; | 1153 GrContext* fContext; |
| 1171 GrTexture* fTexture; | 1154 GrTexture* fTexture; |
| 1172 }; | 1155 }; |
| 1173 | 1156 |
| 1174 #endif | 1157 #endif |
| OLD | NEW |