77a2e52c7d
BUG=skia:4094 Review URL: https://codereview.chromium.org/1413673002
70 lines
1.9 KiB
C++
70 lines
1.9 KiB
C++
/*
|
|
* Copyright 2015 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef GrDrawingManager_DEFINED
|
|
#define GrDrawingManager_DEFINED
|
|
|
|
#include "SkTDArray.h"
|
|
|
|
class GrContext;
|
|
class GrDrawContext;
|
|
class GrTextContext;
|
|
|
|
// Currently the DrawingManager creates a separate GrTextContext for each
|
|
// combination of text drawing options (pixel geometry x DFT use)
|
|
// and hands the appropriate one back given the DrawContext's request.
|
|
//
|
|
// It allocates a new GrDrawContext for each GrRenderTarget
|
|
// but all of them still land in the same GrDrawTarget!
|
|
//
|
|
// In the future this class will allocate a new GrDrawContext for
|
|
// each GrRenderTarget/GrDrawTarget and manage the DAG.
|
|
class GrDrawingManager {
|
|
public:
|
|
~GrDrawingManager();
|
|
|
|
bool abandoned() const { return fAbandoned; }
|
|
|
|
GrDrawContext* drawContext(GrRenderTarget* rt, const SkSurfaceProps* surfaceProps);
|
|
|
|
GrTextContext* textContext(const SkSurfaceProps& props, GrRenderTarget* rt);
|
|
|
|
// The caller automatically gets a ref on the returned drawTarget. It must
|
|
// be balanced by an unref call.
|
|
GrDrawTarget* newDrawTarget(GrRenderTarget* rt);
|
|
|
|
GrContext* getContext() { return fContext; }
|
|
|
|
private:
|
|
GrDrawingManager(GrContext* context)
|
|
: fContext(context)
|
|
, fAbandoned(false)
|
|
, fNVPRTextContext(nullptr) {
|
|
sk_bzero(fTextContexts, sizeof(fTextContexts));
|
|
}
|
|
|
|
void abandon();
|
|
void cleanup();
|
|
void reset();
|
|
void flush();
|
|
|
|
friend class GrContext; // for access to: ctor, abandon, reset & flush
|
|
|
|
static const int kNumPixelGeometries = 5; // The different pixel geometries
|
|
static const int kNumDFTOptions = 2; // DFT or no DFT
|
|
|
|
GrContext* fContext;
|
|
|
|
bool fAbandoned;
|
|
SkTDArray<GrDrawTarget*> fDrawTargets;
|
|
|
|
GrTextContext* fNVPRTextContext;
|
|
GrTextContext* fTextContexts[kNumPixelGeometries][kNumDFTOptions];
|
|
};
|
|
|
|
#endif
|