OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 GrGpuResource_DEFINED | 8 #ifndef GrGpuResource_DEFINED |
9 #define GrGpuResource_DEFINED | 9 #define GrGpuResource_DEFINED |
10 | 10 |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
135 | 135 |
136 template <typename, GrIOType> friend class GrPendingIOResource; | 136 template <typename, GrIOType> friend class GrPendingIOResource; |
137 }; | 137 }; |
138 | 138 |
139 /** | 139 /** |
140 * Base class for objects that can be kept in the GrResourceCache. | 140 * Base class for objects that can be kept in the GrResourceCache. |
141 */ | 141 */ |
142 class SK_API GrGpuResource : public GrIORef<GrGpuResource> { | 142 class SK_API GrGpuResource : public GrIORef<GrGpuResource> { |
143 public: | 143 public: |
144 SK_DECLARE_INST_COUNT(GrGpuResource) | 144 SK_DECLARE_INST_COUNT(GrGpuResource) |
145 | 145 |
robertphillips
2015/06/18 14:18:49
Would a set of orthogonal flags make any of this e
bsalomon
2015/06/18 15:19:37
Maybe, but I sort of like the explicit flags for i
| |
146 enum LifeCycle { | 146 enum LifeCycle { |
147 /** | 147 /** |
148 * The resource is cached and owned by Skia. Resources with this status may be kept alive | 148 * The resource is cached and owned by Skia. Resources with this status may be kept alive |
149 * by the cache as either scratch or unique resources even when there ar e no refs to them. | 149 * by the cache as either scratch or unique resources even when there ar e no refs to them. |
150 * The cache may release them whenever there are no refs. | 150 * The cache may release them whenever there are no refs. |
151 */ | 151 */ |
152 kCached_LifeCycle, | 152 kCached_LifeCycle, |
153 | |
153 /** | 154 /** |
154 * The resource is uncached. As soon as there are no more refs to it, it is released. Under | 155 * The resource is uncached. As soon as there are no more refs to it, it is released. Under |
155 * the hood the cache may opaquely recycle it as a cached resource. | 156 * the hood the cache may opaquely recycle it as a cached resource. |
156 */ | 157 */ |
157 kUncached_LifeCycle, | 158 kUncached_LifeCycle, |
159 | |
158 /** | 160 /** |
159 * Similar to uncached, but Skia does not manage the lifetime of the und erlying backend | 161 * Similar to uncached, but Skia does not manage the lifetime of the und erlying backend |
160 * 3D API object(s). The client is responsible for freeing those. Used t o inject client- | 162 * 3D API object(s). The client is responsible for freeing those. Used t o inject client- |
161 * created GPU resources into Skia (e.g. to render to a client-created t exture). | 163 * created GPU resources into Skia (e.g. to render to a client-created t exture). |
162 */ | 164 */ |
163 kWrapped_LifeCycle, | 165 kBorrowed_LifeCycle, |
166 | |
167 /** | |
robertphillips
2015/06/18 14:18:49
add a space after '.' ?
bsalomon
2015/06/18 15:19:37
Done.
| |
168 * An external resource with ownership transfered into Skia.Skia will fr ee the resource. | |
169 */ | |
170 kAdopted_LifeCycle, | |
164 }; | 171 }; |
165 | 172 |
166 /** | 173 /** |
167 * Tests whether a object has been abandoned or released. All objects will | 174 * Tests whether a object has been abandoned or released. All objects will |
168 * be in this state after their creating GrContext is destroyed or has | 175 * be in this state after their creating GrContext is destroyed or has |
169 * contextLost called. It's up to the client to test wasDestroyed() before | 176 * contextLost called. It's up to the client to test wasDestroyed() before |
170 * attempting to use an object if it holds refs on objects across | 177 * attempting to use an object if it holds refs on objects across |
171 * ~GrContext, freeResources with the force flag, or contextLost. | 178 * ~GrContext, freeResources with the force flag, or contextLost. |
172 * | 179 * |
173 * @return true if the object has been released or abandoned, | 180 * @return true if the object has been released or abandoned, |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
258 | 265 |
259 GrGpu* getGpu() const { return fGpu; } | 266 GrGpu* getGpu() const { return fGpu; } |
260 | 267 |
261 /** Overridden to free GPU resources in the backend API. */ | 268 /** Overridden to free GPU resources in the backend API. */ |
262 virtual void onRelease() { } | 269 virtual void onRelease() { } |
263 /** Overridden to abandon any internal handles, ptrs, etc to backend API res ources. | 270 /** Overridden to abandon any internal handles, ptrs, etc to backend API res ources. |
264 This may be called when the underlying 3D context is no longer valid and so no | 271 This may be called when the underlying 3D context is no longer valid and so no |
265 backend API calls should be made. */ | 272 backend API calls should be made. */ |
266 virtual void onAbandon() { } | 273 virtual void onAbandon() { } |
267 | 274 |
268 bool isWrapped() const { return kWrapped_LifeCycle == fLifeCycle; } | 275 bool shouldFreeResources() const { return fLifeCycle != kBorrowed_LifeCycle; } |
276 | |
277 bool isExternal() const { | |
278 return GrGpuResource::kAdopted_LifeCycle == fLifeCycle || | |
279 GrGpuResource::kBorrowed_LifeCycle == fLifeCycle; | |
280 } | |
269 | 281 |
270 /** | 282 /** |
271 * This entry point should be called whenever gpuMemorySize() should report a different size. | 283 * This entry point should be called whenever gpuMemorySize() should report a different size. |
272 * The cache will call gpuMemorySize() to update the current size of the res ource. | 284 * The cache will call gpuMemorySize() to update the current size of the res ource. |
273 */ | 285 */ |
274 void didChangeGpuMemorySize() const; | 286 void didChangeGpuMemorySize() const; |
275 | 287 |
276 /** | 288 /** |
277 * Optionally called by the GrGpuResource subclass if the resource can be us ed as scratch. | 289 * Optionally called by the GrGpuResource subclass if the resource can be us ed as scratch. |
278 * By default resources are not usable as scratch. This should only be calle d once. | 290 * By default resources are not usable as scratch. This should only be calle d once. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
321 LifeCycle fLifeCycle; | 333 LifeCycle fLifeCycle; |
322 const uint32_t fUniqueID; | 334 const uint32_t fUniqueID; |
323 | 335 |
324 SkAutoTUnref<const SkData> fData; | 336 SkAutoTUnref<const SkData> fData; |
325 | 337 |
326 typedef GrIORef<GrGpuResource> INHERITED; | 338 typedef GrIORef<GrGpuResource> INHERITED; |
327 friend class GrIORef<GrGpuResource>; // to access notifyAllCntsAreZero and n otifyRefCntIsZero. | 339 friend class GrIORef<GrGpuResource>; // to access notifyAllCntsAreZero and n otifyRefCntIsZero. |
328 }; | 340 }; |
329 | 341 |
330 #endif | 342 #endif |
OLD | NEW |