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