2 * Copyright 2014 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef SkMultiPictureDraw_DEFINED
9 #define SkMultiPictureDraw_DEFINED
12 #include "SkTDArray.h"
18 /** \class SkMultiPictureDraw
20 The MultiPictureDraw object accepts several picture/canvas pairs and
21 then attempts to optimally draw the pictures into the canvases, sharing
22 as many resources as possible.
24 class SK_API SkMultiPictureDraw {
27 * Create an object to optimize the drawing of multiple pictures.
28 * @param reserve Hint for the number of add calls expected to be issued
30 SkMultiPictureDraw(int reserve = 0);
31 ~SkMultiPictureDraw() { this->reset(); }
34 * Add a canvas/picture pair for later rendering.
35 * @param canvas the canvas in which to draw picture
36 * @param picture the picture to draw into canvas
37 * @param matrix if non-NULL, applied to the CTM when drawing
38 * @param paint if non-NULL, draw picture to a temporary buffer
39 * and then apply the paint when the result is drawn
41 void add(SkCanvas* canvas,
42 const SkPicture* picture,
43 const SkMatrix* matrix = NULL,
44 const SkPaint* paint = NULL);
47 * Perform all the previously added draws. This will reset the state
53 * Abandon all buffered draws and reset to the initial state.
59 SkCanvas* fCanvas; // reffed
60 const SkPicture* fPicture; // reffed
62 SkPaint* fPaint; // owned
64 void init(SkCanvas*, const SkPicture*, const SkMatrix*, const SkPaint*);
67 static void Reset(SkTDArray<DrawData>&);
69 static void Draw(DrawData* d) { d->draw(); }
72 SkTDArray<DrawData> fThreadSafeDrawData;
73 SkTDArray<DrawData> fGPUDrawData;