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 | |
Mike Reed | 1d8c42e | 2017-08-29 14:58:19 -0400 | [diff] [blame^] | 51 | bool onAppendStages(const StageRec&) const override; |
Florin Malita | 882ccaf | 2017-01-27 10:51:58 -0500 | [diff] [blame] | 52 | |
Matt Sarett | 6cc6ae75 | 2017-04-18 18:29:12 -0400 | [diff] [blame] | 53 | sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override { |
Florin Malita | 4aed138 | 2017-05-25 10:38:07 -0400 | [diff] [blame] | 54 | return as_SB(fProxyShader)->makeColorSpace(xformer)->makeWithLocalMatrix( |
| 55 | this->getLocalMatrix()); |
Matt Sarett | 6cc6ae75 | 2017-04-18 18:29:12 -0400 | [diff] [blame] | 56 | } |
| 57 | |
Mike Reed | 627778d | 2016-09-28 17:13:38 -0400 | [diff] [blame] | 58 | #ifdef SK_SUPPORT_LEGACY_SHADER_ISABITMAP |
reed | 0f0af23 | 2015-09-08 11:02:04 -0700 | [diff] [blame] | 59 | bool onIsABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* mode) const override { |
| 60 | return fProxyShader->isABitmap(bitmap, matrix, mode); |
| 61 | } |
Mike Reed | 627778d | 2016-09-28 17:13:38 -0400 | [diff] [blame] | 62 | #endif |
reed | 0f0af23 | 2015-09-08 11:02:04 -0700 | [diff] [blame] | 63 | |
Mike Reed | 3404207 | 2017-08-08 16:29:22 -0400 | [diff] [blame] | 64 | bool onIsRasterPipelineOnly(const SkMatrix& ctm) const override { |
Mike Reed | eefe9f9 | 2017-08-21 11:39:15 -0400 | [diff] [blame] | 65 | return as_SB(fProxyShader)->isRasterPipelineOnly(SkMatrix::Concat(ctm, |
| 66 | this->getLocalMatrix())); |
Florin Malita | 7d022e0 | 2017-05-15 15:06:39 -0400 | [diff] [blame] | 67 | } |
| 68 | |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 69 | private: |
Ben Wagner | a8834bb | 2016-10-24 11:36:21 -0400 | [diff] [blame] | 70 | sk_sp<SkShader> fProxyShader; |
skia.committer@gmail.com | e92c68f7 | 2014-05-13 03:06:05 +0000 | [diff] [blame] | 71 | |
Florin Malita | 4aed138 | 2017-05-25 10:38:07 -0400 | [diff] [blame] | 72 | typedef SkShaderBase INHERITED; |
commit-bot@chromium.org | 5970f62 | 2014-05-12 20:42:21 +0000 | [diff] [blame] | 73 | }; |
| 74 | |
| 75 | #endif |