aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrPathRange.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrPathRange.h')
-rw-r--r--src/gpu/GrPathRange.h153
1 files changed, 0 insertions, 153 deletions
diff --git a/src/gpu/GrPathRange.h b/src/gpu/GrPathRange.h
deleted file mode 100644
index 39779a7008..0000000000
--- a/src/gpu/GrPathRange.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrPathRange_DEFINED
-#define GrPathRange_DEFINED
-
-#include "GrGpuResource.h"
-#include "SkPath.h"
-#include "SkRefCnt.h"
-#include "SkTArray.h"
-
-class SkDescriptor;
-
-/**
- * Represents a contiguous range of GPU path objects.
- * This object is immutable with the exception that individual paths may be
- * initialized lazily.
- */
-
-class GrPathRange : public GrGpuResource {
-public:
-
-
- enum PathIndexType {
- kU8_PathIndexType, //!< uint8_t
- kU16_PathIndexType, //!< uint16_t
- kU32_PathIndexType, //!< uint32_t
-
- kLast_PathIndexType = kU32_PathIndexType
- };
-
- static inline int PathIndexSizeInBytes(PathIndexType type) {
- GR_STATIC_ASSERT(0 == kU8_PathIndexType);
- GR_STATIC_ASSERT(1 == kU16_PathIndexType);
- GR_STATIC_ASSERT(2 == kU32_PathIndexType);
- GR_STATIC_ASSERT(kU32_PathIndexType == kLast_PathIndexType);
-
- return 1 << type;
- }
-
- /**
- * Class that generates the paths for a specific range.
- */
- class PathGenerator : public SkRefCnt {
- public:
- virtual int getNumPaths() = 0;
- virtual void generatePath(int index, SkPath* out) = 0;
-#ifdef SK_DEBUG
- virtual bool isEqualTo(const SkDescriptor&) const { return false; }
-#endif
- virtual ~PathGenerator() {}
- };
-
- /**
- * Initialize a lazy-loaded path range. This class will generate an SkPath and call
- * onInitPath() for each path within the range before it is drawn for the first time.
- */
- GrPathRange(GrGpu*, PathGenerator*);
-
- /**
- * Initialize an eager-loaded path range. The subclass is responsible for ensuring all
- * the paths are initialized up front.
- */
- GrPathRange(GrGpu*, int numPaths);
-
- int getNumPaths() const { return fNumPaths; }
- const PathGenerator* getPathGenerator() const { return fPathGenerator.get(); }
-
- void loadPathsIfNeeded(const void* indices, PathIndexType, int count) const;
-
- template<typename IndexType> void loadPathsIfNeeded(const IndexType* indices, int count) const {
- if (!fPathGenerator) {
- return;
- }
-
- bool didLoadPaths = false;
-
- for (int i = 0; i < count; ++i) {
- SkASSERT(indices[i] < static_cast<uint32_t>(fNumPaths));
-
- const int groupIndex = indices[i] / kPathsPerGroup;
- const int groupByte = groupIndex / 8;
- const uint8_t groupBit = 1 << (groupIndex % 8);
-
- const bool hasPath = SkToBool(fGeneratedPaths[groupByte] & groupBit);
- if (!hasPath) {
- // We track which paths are loaded in groups of kPathsPerGroup. To
- // mark a path as loaded we need to load the entire group.
- const int groupFirstPath = groupIndex * kPathsPerGroup;
- const int groupLastPath = SkTMin(groupFirstPath + kPathsPerGroup, fNumPaths) - 1;
-
- SkPath path;
- for (int pathIdx = groupFirstPath; pathIdx <= groupLastPath; ++pathIdx) {
- fPathGenerator->generatePath(pathIdx, &path);
- this->onInitPath(pathIdx, path);
- }
-
- fGeneratedPaths[groupByte] |= groupBit;
- didLoadPaths = true;
- }
- }
-
- if (didLoadPaths) {
- this->didChangeGpuMemorySize();
- }
- }
-
-#ifdef SK_DEBUG
- void assertPathsLoaded(const void* indices, PathIndexType, int count) const;
-
- template<typename IndexType> void assertPathsLoaded(const IndexType* indices, int count) const {
- if (!fPathGenerator) {
- return;
- }
-
- for (int i = 0; i < count; ++i) {
- SkASSERT(indices[i] < static_cast<uint32_t>(fNumPaths));
-
- const int groupIndex = indices[i] / kPathsPerGroup;
- const int groupByte = groupIndex / 8;
- const uint8_t groupBit = 1 << (groupIndex % 8);
-
- SkASSERT(fGeneratedPaths[groupByte] & groupBit);
- }
- }
-
- virtual bool isEqualTo(const SkDescriptor& desc) const {
- return nullptr != fPathGenerator.get() && fPathGenerator->isEqualTo(desc);
- }
-#endif
-protected:
- // Initialize a path in the range before drawing. This is only called when
- // fPathGenerator is non-null. The child class need not call didChangeGpuMemorySize(),
- // GrPathRange will take care of that after the call is complete.
- virtual void onInitPath(int index, const SkPath&) const = 0;
-
-private:
- enum {
- kPathsPerGroup = 16 // Paths get tracked in groups of 16 for lazy loading.
- };
-
- mutable sk_sp<PathGenerator> fPathGenerator;
- mutable SkTArray<uint8_t, true /*MEM_COPY*/> fGeneratedPaths;
- const int fNumPaths;
-
- typedef GrGpuResource INHERITED;
-};
-
-#endif