• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #include "GrPathRendererChain.h"
11 
12 #include "GrContext.h"
13 #include "GrDefaultPathRenderer.h"
14 #include "GrGpu.h"
15 
GrPathRendererChain(GrContext * context,UsageFlags flags)16 GrPathRendererChain::GrPathRendererChain(GrContext* context, UsageFlags flags)
17     : fInit(false)
18     , fOwner(context)
19     , fFlags(flags) {
20 }
21 
~GrPathRendererChain()22 GrPathRendererChain::~GrPathRendererChain() {
23     for (int i = 0; i < fChain.count(); ++i) {
24         fChain[i]->unref();
25     }
26 }
27 
addPathRenderer(GrPathRenderer * pr)28 GrPathRenderer* GrPathRendererChain::addPathRenderer(GrPathRenderer* pr) {
29     fChain.push_back() = pr;
30     pr->ref();
31     return pr;
32 }
33 
getPathRenderer(const SkPath & path,GrPathFill fill,const GrDrawTarget * target,bool antiAlias)34 GrPathRenderer* GrPathRendererChain::getPathRenderer(const SkPath& path,
35                                                      GrPathFill fill,
36                                                      const GrDrawTarget* target,
37                                                      bool antiAlias) {
38     if (!fInit) {
39         this->init();
40     }
41     for (int i = 0; i < fChain.count(); ++i) {
42         if (fChain[i]->canDrawPath(path, fill, target, antiAlias)) {
43             return fChain[i];
44         }
45     }
46     return NULL;
47 }
48 
init()49 void GrPathRendererChain::init() {
50     GrAssert(!fInit);
51     GrGpu* gpu = fOwner->getGpu();
52     bool twoSided = gpu->getCaps().fTwoSidedStencilSupport;
53     bool wrapOp = gpu->getCaps().fStencilWrapOpsSupport;
54     GrPathRenderer::AddPathRenderers(fOwner, fFlags, this);
55     this->addPathRenderer(new GrDefaultPathRenderer(twoSided, wrapOp))->unref();
56     fInit = true;
57 }
58