1b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 2b85a0aab6905af8b329539b7573a7555b727d5e5cdalton/* 3b85a0aab6905af8b329539b7573a7555b727d5e5cdalton * Copyright 2014 Google Inc. 4b85a0aab6905af8b329539b7573a7555b727d5e5cdalton * 5b85a0aab6905af8b329539b7573a7555b727d5e5cdalton * Use of this source code is governed by a BSD-style license that can be 6b85a0aab6905af8b329539b7573a7555b727d5e5cdalton * found in the LICENSE file. 7b85a0aab6905af8b329539b7573a7555b727d5e5cdalton */ 8b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 9b85a0aab6905af8b329539b7573a7555b727d5e5cdalton#include "GrGLPathRange.h" 10b85a0aab6905af8b329539b7573a7555b727d5e5cdalton#include "GrGLPath.h" 11c7103a104fdc7150b4e3c0d3efc42735ad359616cdalton#include "GrGLPathRendering.h" 12b85a0aab6905af8b329539b7573a7555b727d5e5cdalton#include "GrGpuGL.h" 13b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 14855d83ff79c6c822b2ad653f2f890178ad0f637bcdaltonGrGLPathRange::GrGLPathRange(GrGpuGL* gpu, PathGenerator* pathGenerator, const SkStrokeRec& stroke) 15855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton : INHERITED(gpu, pathGenerator, stroke), 16855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton fBasePathID(gpu->glPathRendering()->genPaths(this->getNumPaths())), 17855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton fGpuMemorySize(0) { 18855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton this->registerWithCache(); 19855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton} 20855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton 21855d83ff79c6c822b2ad653f2f890178ad0f637bcdaltonGrGLPathRange::GrGLPathRange(GrGpuGL* gpu, 22855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton GrGLuint basePathID, 23855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton int numPaths, 24855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton size_t gpuMemorySize, 25855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton const SkStrokeRec& stroke) 26855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton : INHERITED(gpu, numPaths, stroke), 27855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton fBasePathID(basePathID), 28855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton fGpuMemorySize(gpuMemorySize) { 29855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton this->registerWithCache(); 30b85a0aab6905af8b329539b7573a7555b727d5e5cdalton} 31b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 32b85a0aab6905af8b329539b7573a7555b727d5e5cdaltonGrGLPathRange::~GrGLPathRange() { 33b85a0aab6905af8b329539b7573a7555b727d5e5cdalton this->release(); 34b85a0aab6905af8b329539b7573a7555b727d5e5cdalton} 35b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 36855d83ff79c6c822b2ad653f2f890178ad0f637bcdaltonvoid GrGLPathRange::onInitPath(int index, const SkPath& skPath) const { 37b85a0aab6905af8b329539b7573a7555b727d5e5cdalton GrGpuGL* gpu = static_cast<GrGpuGL*>(this->getGpu()); 38b85a0aab6905af8b329539b7573a7555b727d5e5cdalton if (NULL == gpu) { 39b85a0aab6905af8b329539b7573a7555b727d5e5cdalton return; 40b85a0aab6905af8b329539b7573a7555b727d5e5cdalton } 41b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 42b85a0aab6905af8b329539b7573a7555b727d5e5cdalton // Make sure the path at this index hasn't been initted already. 435b653577994fe298e08e5f7a5c1fa39fe53c9203kkinnunen SkDEBUGCODE( 445b653577994fe298e08e5f7a5c1fa39fe53c9203kkinnunen GrGLboolean isPath; 455b653577994fe298e08e5f7a5c1fa39fe53c9203kkinnunen GR_GL_CALL_RET(gpu->glInterface(), isPath, IsPath(fBasePathID + index))); 465b653577994fe298e08e5f7a5c1fa39fe53c9203kkinnunen SkASSERT(GR_GL_FALSE == isPath); 47b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 48855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton GrGLPath::InitPathObject(gpu, fBasePathID + index, skPath, this->getStroke()); 49855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton 50855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton // TODO: Use a better approximation for the individual path sizes. 51855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton fGpuMemorySize += 100; 52b85a0aab6905af8b329539b7573a7555b727d5e5cdalton} 53b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 54b85a0aab6905af8b329539b7573a7555b727d5e5cdaltonvoid GrGLPathRange::onRelease() { 5549f085dddff10473b6ebf832a974288300224e60bsalomon SkASSERT(this->getGpu()); 56b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 57b85a0aab6905af8b329539b7573a7555b727d5e5cdalton if (0 != fBasePathID && !this->isWrapped()) { 58855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton static_cast<GrGpuGL*>(this->getGpu())->glPathRendering()->deletePaths(fBasePathID, 59855d83ff79c6c822b2ad653f2f890178ad0f637bcdalton this->getNumPaths()); 60b85a0aab6905af8b329539b7573a7555b727d5e5cdalton fBasePathID = 0; 61b85a0aab6905af8b329539b7573a7555b727d5e5cdalton } 62b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 63b85a0aab6905af8b329539b7573a7555b727d5e5cdalton INHERITED::onRelease(); 64b85a0aab6905af8b329539b7573a7555b727d5e5cdalton} 65b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 66b85a0aab6905af8b329539b7573a7555b727d5e5cdaltonvoid GrGLPathRange::onAbandon() { 67b85a0aab6905af8b329539b7573a7555b727d5e5cdalton fBasePathID = 0; 68b85a0aab6905af8b329539b7573a7555b727d5e5cdalton 69b85a0aab6905af8b329539b7573a7555b727d5e5cdalton INHERITED::onAbandon(); 70b85a0aab6905af8b329539b7573a7555b727d5e5cdalton} 71