Index: src/gpu/GrLayerHoister.h |
diff --git a/src/gpu/GrLayerHoister.h b/src/gpu/GrLayerHoister.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..25202ce3458a0750e547f961d0a8f5ab93a163da |
--- /dev/null |
+++ b/src/gpu/GrLayerHoister.h |
@@ -0,0 +1,55 @@ |
+/* |
+ * 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 GrLayerHoister_DEFINED |
+#define GrLayerHoister_DEFINED |
+ |
+#include "SkPicture.h" |
+#include "SkTDArray.h" |
+ |
+class GrAccelData; |
+struct GrCachedLayer; |
+struct SkRect; |
+ |
+// This class collects the layer hoisting functionality in one place. |
+// For each picture rendering: |
+// FindLayersToHoist should be called once to collect the required layers |
+// DrawLayers should be called once to render them |
+// UnlockLayers should be called once to allow the texture resources to be recycled |
+class GrLayerHoister { |
+public: |
+ /** Find the layers in 'gpuData' that need hoisting. |
+ @param gpuData Acceleration structure containing layer information for a picture |
+ @param ops If a BBH is being used the operations about to be executed; NULL otherwise. |
+ @param query The rectangle that is about to be drawn. |
+ @param pullForward A gpuData->numSaveLayers -sized Boolean array indicating |
+ which layers are to be hoisted |
+ Return true if any layers are suitable for hoisting; false otherwise |
+ */ |
+ static bool FindLayersToHoist(const GrAccelData *gpuData, |
+ const SkPicture::OperationList* ops, |
+ const SkRect& query, |
+ bool pullForward[]); |
+ |
+ /** Draw the specified layers of 'picture' into either the atlas or free |
+ floating textures. |
+ @param picture The picture containing the layers |
+ @param atlased The layers to be drawn into the atlas |
+ @param nonAtlased The layers to be drawn into their own textures |
+ */ |
+ static void DrawLayers(const SkPicture* picture, |
+ const SkTDArray<GrCachedLayer*>& atlased, |
+ const SkTDArray<GrCachedLayer*>& nonAtlased); |
+ |
+ /** Unlock all the layers associated with picture in the layer cache. |
+ @param layerCache holder of the locked layers |
+ @pmara picture the source of the locked layers |
+ */ |
+ static void UnlockLayers(GrLayerCache* layerCache, const SkPicture* picture); |
+}; |
+ |
+#endif |