1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2017 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrCCAtlas_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrCCAtlas_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRefCnt.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSize.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrCaps;
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrCCPathParser;
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrDrawOp;
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrOnFlushResourceProvider;
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrRenderTargetContext;
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrTextureProxy;
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkIPoint16;
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * This class implements a dynamic size GrRectanizer that grows until it reaches the implementation-
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * dependent max texture size. When finalized, it also creates and stores a GrTextureProxy for the
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * underlying atlas.
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrCCAtlas {
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    static constexpr int kMinSize = 1024;
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    using CoverageCountBatchID = int;
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrCCAtlas(const GrCaps&, int minWidth, int minHeight);
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~GrCCAtlas();
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool addRect(int devWidth, int devHeight, SkIPoint16* loc);
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkISize& drawBounds() { return fDrawBounds; }
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setCoverageCountBatchID(CoverageCountBatchID batchID) {
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkASSERT(!fCoverageCountBatchID);
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkASSERT(!fTextureProxy);
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fCoverageCountBatchID = batchID;
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<GrRenderTargetContext> SK_WARN_UNUSED_RESULT finalize(GrOnFlushResourceProvider*,
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                                sk_sp<const GrCCPathParser>);
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrTextureProxy* textureProxy() const { return fTextureProxy.get(); }
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    class Node;
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    class DrawCoverageCountOp;
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool internalPlaceRect(int w, int h, SkIPoint16* loc);
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const int fMaxAtlasSize;
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int fWidth;
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int fHeight;
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkISize fDrawBounds;
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::unique_ptr<Node> fTopNode;
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    CoverageCountBatchID fCoverageCountBatchID SkDEBUGCODE(= 0);
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<GrTextureProxy> fTextureProxy;
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
68