commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2014 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
| 7 | |
| 8 | #ifndef SkLocalMatrixShader_DEFINED |
| 9 | #define SkLocalMatrixShader_DEFINED |
| 10 | |
Florin Malita | 4aed138 | 2017-05-25 10:38:07 -0400 | [diff] [blame] | 11 | #include "SkShaderBase.h" |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 12 | #include "SkReadBuffer.h" |
| 13 | #include "SkWriteBuffer.h" |
| 14 | |
bungeman | 06ca8ec | 2016-06-09 08:01:03 -0700 | [diff] [blame] | 15 | class GrFragmentProcessor; |
Herb Derby | 83e939b | 2017-02-07 14:25:11 -0500 | [diff] [blame] | 16 | class SkArenaAlloc; |
Matt Sarett | 6cc6ae75 | 2017-04-18 18:29:12 -0400 | [diff] [blame] | 17 | class SkColorSpaceXformer; |
bungeman | 06ca8ec | 2016-06-09 08:01:03 -0700 | [diff] [blame] | 18 | |
Florin Malita | 5769dd2 | 2017-07-12 13:31:25 -0400 | [diff] [blame] | 19 | class SkLocalMatrixShader final : public SkShaderBase { |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 20 | public: |
Ben Wagner | a8834bb | 2016-10-24 11:36:21 -0400 | [diff] [blame] | 21 | SkLocalMatrixShader(sk_sp<SkShader> proxy, const SkMatrix& localMatrix) |
scroggo | c870d49 | 2014-07-11 10:42:12 -0700 | [diff] [blame] | 22 | : INHERITED(&localMatrix) |
Ben Wagner | a8834bb | 2016-10-24 11:36:21 -0400 | [diff] [blame] | 23 | , fProxyShader(std::move(proxy)) |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 24 | {} |
skia.committer@gmail.com | e92c68f7 | 2014-05-13 03:06:05 +0000 | [diff] [blame] | 25 | |
mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 26 | GradientType asAGradient(GradientInfo* info) const override { |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 27 | return fProxyShader->asAGradient(info); |
| 28 | } |
skia.committer@gmail.com | e92c68f7 | 2014-05-13 03:06:05 +0000 | [diff] [blame] | 29 | |
dandov | 9de5b51 | 2014-06-10 14:38:28 -0700 | [diff] [blame] | 30 | #if SK_SUPPORT_GPU |
Brian Salomon | aff329b | 2017-08-11 09:40:37 -0400 | [diff] [blame] | 31 | std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; |
dandov | 9de5b51 | 2014-06-10 14:38:28 -0700 | [diff] [blame] | 32 | #endif |
mtklein | 3f3b3d0 | 2014-12-01 11:47:08 -0800 | [diff] [blame] | 33 | |
Ben Wagner | a8834bb | 2016-10-24 11:36:21 -0400 | [diff] [blame] | 34 | sk_sp<SkShader> makeAsALocalMatrixShader(SkMatrix* localMatrix) const override { |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 35 | if (localMatrix) { |
scroggo | c870d49 | 2014-07-11 10:42:12 -0700 | [diff] [blame] | 36 | *localMatrix = this->getLocalMatrix(); |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 37 | } |
Ben Wagner | a8834bb | 2016-10-24 11:36:21 -0400 | [diff] [blame] | 38 | return fProxyShader; |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 39 | } |
skia.committer@gmail.com | e92c68f7 | 2014-05-13 03:06:05 +0000 | [diff] [blame] | 40 | |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 41 | SK_TO_STRING_OVERRIDE() |
| 42 | SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixShader) |
skia.committer@gmail.com | e92c68f7 | 2014-05-13 03:06:05 +0000 | [diff] [blame] | 43 | |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 44 | protected: |
mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 45 | void flatten(SkWriteBuffer&) const override; |
skia.committer@gmail.com | e92c68f7 | 2014-05-13 03:06:05 +0000 | [diff] [blame] | 46 | |
Herb Derby | 83e939b | 2017-02-07 14:25:11 -0500 | [diff] [blame] | 47 | Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override; |
reed | 773ceda | 2016-03-03 18:18:25 -0800 | [diff] [blame] | 48 | |
Matt Sarett | 547a727 | 2017-04-12 11:52:47 -0400 | [diff] [blame] | 49 | SkImage* onIsAImage(SkMatrix* matrix, TileMode* mode) const override; |
Mike Reed | 627778d | 2016-09-28 17:13:38 -0400 | [diff] [blame] | 50 | |
Florin Malita | 882ccaf | 2017-01-27 10:51:58 -0500 | [diff] [blame] | 51 | bool onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, |
| 52 | const SkMatrix&, const SkPaint&, const SkMatrix*) const override; |
| 53 | |
Matt Sarett | 6cc6ae75 | 2017-04-18 18:29:12 -0400 | [diff] [blame] | 54 | sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override { |
Florin Malita | 4aed138 | 2017-05-25 10:38:07 -0400 | [diff] [blame] | 55 | return as_SB(fProxyShader)->makeColorSpace(xformer)->makeWithLocalMatrix( |
| 56 | this->getLocalMatrix()); |
Matt Sarett | 6cc6ae75 | 2017-04-18 18:29:12 -0400 | [diff] [blame] | 57 | } |
| 58 | |
Mike Reed | 627778d | 2016-09-28 17:13:38 -0400 | [diff] [blame] | 59 | #ifdef SK_SUPPORT_LEGACY_SHADER_ISABITMAP |
reed | 0f0af23 | 2015-09-08 11:02:04 -0700 | [diff] [blame] | 60 | bool onIsABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* mode) const override { |
| 61 | return fProxyShader->isABitmap(bitmap, matrix, mode); |
| 62 | } |
Mike Reed | 627778d | 2016-09-28 17:13:38 -0400 | [diff] [blame] | 63 | #endif |
reed | 0f0af23 | 2015-09-08 11:02:04 -0700 | [diff] [blame] | 64 | |
Mike Reed | 3404207 | 2017-08-08 16:29:22 -0400 | [diff] [blame] | 65 | bool onIsRasterPipelineOnly(const SkMatrix& ctm) const override { |
Mike Reed | eefe9f9 | 2017-08-21 11:39:15 -0400 | [diff] [blame] | 66 | return as_SB(fProxyShader)->isRasterPipelineOnly(SkMatrix::Concat(ctm, |
| 67 | this->getLocalMatrix())); |
Florin Malita | 7d022e0 | 2017-05-15 15:06:39 -0400 | [diff] [blame] | 68 | } |
| 69 | |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 70 | private: |
Ben Wagner | a8834bb | 2016-10-24 11:36:21 -0400 | [diff] [blame] | 71 | sk_sp<SkShader> fProxyShader; |
skia.committer@gmail.com | e92c68f7 | 2014-05-13 03:06:05 +0000 | [diff] [blame] | 72 | |
Florin Malita | 4aed138 | 2017-05-25 10:38:07 -0400 | [diff] [blame] | 73 | typedef SkShaderBase INHERITED; |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 74 | }; |
| 75 | |
| 76 | #endif |