diff options
author | Ruiqi Mao <ruiqimao@google.com> | 2018-07-09 14:16:56 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-09 20:31:28 +0000 |
commit | 9a6e42ff18133ef77066b82cb7e2d19788edd968 (patch) | |
tree | 29ca7c0dbd690c572b8fe222314f83b65cab493b /include | |
parent | c3833b4c152af3b6fa2a4c4ba7b1da02acd1af80 (diff) |
added caching of SkVertices
SkVertices can now be "volatile", meaning they should not be cached.
SkVertices is volatile by default if the argument is not given.
Pulled from reverted CL: https://skia-review.googlesource.com/c/skia/+/138596
Docs-Preview: https://skia.org/?cl=139545
Bug: skia:
Change-Id: I92cf832efe1c0aaa8f432eedde2678582dd2454e
Reviewed-on: https://skia-review.googlesource.com/139545
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Ruiqi Mao <ruiqimao@google.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/core/SkCanvas.h | 4 | ||||
-rw-r--r-- | include/core/SkVertices.h | 30 |
2 files changed, 24 insertions, 10 deletions
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 90e51e9b0e..abac335a0c 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -6,7 +6,7 @@ */ /* Generated by tools/bookmaker from include/core/SkCanvas.h and docs/SkCanvas_Reference.bmh - on 2018-07-02 10:27:08. Additional documentation and examples can be found at: + on 2018-07-03 11:34:22. Additional documentation and examples can be found at: https://skia.org/user/api/SkCanvas_Reference You may edit either file directly. Structural changes to public interfaces require @@ -2156,6 +2156,7 @@ public: The first element of bones should be an object to world space transformation matrix that will be applied before performing mesh deformations. If no such transformation is needed, it should be the identity matrix. + boneCount must be at most 100, and thus the size of bones should be at most 100. @param vertices triangle mesh to draw @param bones bone matrix data @@ -2173,6 +2174,7 @@ public: The first element of bones should be an object to world space transformation matrix that will be applied before performing mesh deformations. If no such transformation is needed, it should be the identity matrix. + boneCount must be at most 100, and thus the size of bones should be at most 100. @param vertices triangle mesh to draw @param bones bone matrix data diff --git a/include/core/SkVertices.h b/include/core/SkVertices.h index 6c4fb390d0..9c1300b0a5 100644 --- a/include/core/SkVertices.h +++ b/include/core/SkVertices.h @@ -55,14 +55,16 @@ public: const BoneIndices boneIndices[], const BoneWeights boneWeights[], int indexCount, - const uint16_t indices[]); + const uint16_t indices[], + bool isVolatile = true); static sk_sp<SkVertices> MakeCopy(VertexMode mode, int vertexCount, const SkPoint positions[], const SkPoint texs[], const SkColor colors[], const BoneIndices boneIndices[], - const BoneWeights boneWeights[]) { + const BoneWeights boneWeights[], + bool isVolatile = true) { return MakeCopy(mode, vertexCount, positions, @@ -71,7 +73,8 @@ public: boneIndices, boneWeights, 0, - nullptr); + nullptr, + isVolatile); } static sk_sp<SkVertices> MakeCopy(VertexMode mode, int vertexCount, @@ -79,7 +82,8 @@ public: const SkPoint texs[], const SkColor colors[], int indexCount, - const uint16_t indices[]) { + const uint16_t indices[], + bool isVolatile = true) { return MakeCopy(mode, vertexCount, positions, @@ -88,14 +92,16 @@ public: nullptr, nullptr, indexCount, - indices); + indices, + isVolatile); } static sk_sp<SkVertices> MakeCopy(VertexMode mode, int vertexCount, const SkPoint positions[], const SkPoint texs[], - const SkColor colors[]) { - return MakeCopy(mode, vertexCount, positions, texs, colors, nullptr, nullptr); + const SkColor colors[], + bool isVolatile = true) { + return MakeCopy(mode, vertexCount, positions, texs, colors, nullptr, nullptr, isVolatile); } struct Sizes; @@ -104,6 +110,7 @@ public: kHasTexCoords_BuilderFlag = 1 << 0, kHasColors_BuilderFlag = 1 << 1, kHasBones_BuilderFlag = 1 << 2, + kIsNonVolatile_BuilderFlag = 1 << 3, }; class Builder { public: @@ -114,6 +121,7 @@ public: // if the builder is invalid, these will return 0 int vertexCount() const; int indexCount() const; + bool isVolatile() const; SkPoint* positions(); SkPoint* texCoords(); // returns null if there are no texCoords SkColor* colors(); // returns null if there are no colors @@ -125,9 +133,9 @@ public: sk_sp<SkVertices> detach(); private: - Builder(VertexMode mode, int vertexCount, int indexCount, const Sizes&); + Builder(VertexMode mode, int vertexCount, int indexCount, bool isVolatile, const Sizes&); - void init(VertexMode mode, int vertexCount, int indexCount, const Sizes&); + void init(VertexMode mode, int vertexCount, int indexCount, bool isVolatile, const Sizes&); // holds a partially complete object. only completed in detach() sk_sp<SkVertices> fVertices; @@ -158,6 +166,8 @@ public: int indexCount() const { return fIndexCnt; } const uint16_t* indices() const { return fIndices; } + bool isVolatile() const { return fIsVolatile; } + // returns approximate byte size of the vertices object size_t approximateSize() const; @@ -199,6 +209,8 @@ private: int fVertexCnt; int fIndexCnt; + bool fIsVolatile; + VertexMode fMode; // below here is where the actual array data is stored. }; |