aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ccpr/GrCCPRAtlas.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/ccpr/GrCCPRAtlas.h')
-rw-r--r--src/gpu/ccpr/GrCCPRAtlas.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/gpu/ccpr/GrCCPRAtlas.h b/src/gpu/ccpr/GrCCPRAtlas.h
new file mode 100644
index 0000000000..a9ccd73c1c
--- /dev/null
+++ b/src/gpu/ccpr/GrCCPRAtlas.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrCCPRAtlas_DEFINED
+#define GrCCPRAtlas_DEFINED
+
+#include "SkRefCnt.h"
+#include "SkSize.h"
+
+class GrCaps;
+class GrDrawOp;
+class GrOnFlushResourceProvider;
+class GrRenderTargetContext;
+class GrTextureProxy;
+struct SkIPoint16;
+
+/**
+ * This class implements a dynamic size GrRectanizer that grows until it reaches the implementation-
+ * dependent max texture size. When finalized, it also creates and stores a GrTextureProxy for the
+ * underlying atlas.
+ */
+class GrCCPRAtlas {
+public:
+ static constexpr int kMinSize = 1024;
+
+ GrCCPRAtlas(const GrCaps&, int minWidth, int minHeight);
+ ~GrCCPRAtlas();
+
+ bool addRect(int devWidth, int devHeight, SkIPoint16* loc);
+ const SkISize& drawBounds() { return fDrawBounds; }
+
+ sk_sp<GrRenderTargetContext> SK_WARN_UNUSED_RESULT finalize(GrOnFlushResourceProvider*,
+ std::unique_ptr<GrDrawOp> atlasOp);
+
+ sk_sp<GrTextureProxy> textureProxy() const { return fTextureProxy; }
+
+private:
+ class Node;
+
+ bool internalPlaceRect(int w, int h, SkIPoint16* loc);
+
+ const int fMaxAtlasSize;
+
+ int fWidth;
+ int fHeight;
+ SkISize fDrawBounds;
+ std::unique_ptr<Node> fTopNode;
+
+ sk_sp<GrTextureProxy> fTextureProxy;
+};
+
+#endif