GrGLPathRange.cpp revision 5672da0fa54f31c9727568e9dd5fe82c6e1585bc
1
2/*
3 * Copyright 2014 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#include "GrGLPathRange.h"
10#include "GrGLPath.h"
11#include "GrGLPathRendering.h"
12#include "GrGpuGL.h"
13
14GrGLPathRange::GrGLPathRange(GrGpuGL* gpu, size_t size, const SkStrokeRec& stroke)
15    : INHERITED(gpu, size, stroke),
16      fBasePathID(gpu->pathRendering()->genPaths(fSize)),
17      fNumDefinedPaths(0) {
18}
19
20GrGLPathRange::~GrGLPathRange() {
21    this->release();
22}
23
24void GrGLPathRange::initAt(size_t index, const SkPath& skPath) {
25    GrGpuGL* gpu = static_cast<GrGpuGL*>(this->getGpu());
26    if (NULL == gpu) {
27        return;
28    }
29
30    // Make sure the path at this index hasn't been initted already.
31    SkASSERT(GR_GL_FALSE == gpu->pathRendering()->isPath(fBasePathID + index));
32
33    GrGLPath::InitPathObject(gpu, fBasePathID + index, skPath, fStroke);
34    ++fNumDefinedPaths;
35    this->didChangeGpuMemorySize();
36}
37
38void GrGLPathRange::onRelease() {
39    SkASSERT(NULL != this->getGpu());
40
41    if (0 != fBasePathID && !this->isWrapped()) {
42        static_cast<GrGpuGL*>(this->getGpu())->pathRendering()->deletePaths(fBasePathID, fSize);
43        fBasePathID = 0;
44    }
45
46    INHERITED::onRelease();
47}
48
49void GrGLPathRange::onAbandon() {
50    fBasePathID = 0;
51
52    INHERITED::onAbandon();
53}
54