blob: 1446d8fd0f0a1f321e1e26f1476b8faa7af527fb [file] [log] [blame]
commit-bot@chromium.org5970f622014-05-12 20:42:21 +00001/*
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
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "src/core/SkReadBuffer.h"
12#include "src/core/SkWriteBuffer.h"
13#include "src/shaders/SkShaderBase.h"
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000014
bungeman06ca8ec2016-06-09 08:01:03 -070015class GrFragmentProcessor;
Herb Derby83e939b2017-02-07 14:25:11 -050016class SkArenaAlloc;
bungeman06ca8ec2016-06-09 08:01:03 -070017
Florin Malita5769dd22017-07-12 13:31:25 -040018class SkLocalMatrixShader final : public SkShaderBase {
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000019public:
Ben Wagnera8834bb2016-10-24 11:36:21 -040020 SkLocalMatrixShader(sk_sp<SkShader> proxy, const SkMatrix& localMatrix)
scroggoc870d492014-07-11 10:42:12 -070021 : INHERITED(&localMatrix)
Ben Wagnera8834bb2016-10-24 11:36:21 -040022 , fProxyShader(std::move(proxy))
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000023 {}
skia.committer@gmail.come92c68f72014-05-13 03:06:05 +000024
mtklein36352bf2015-03-25 18:17:31 -070025 GradientType asAGradient(GradientInfo* info) const override {
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000026 return fProxyShader->asAGradient(info);
27 }
skia.committer@gmail.come92c68f72014-05-13 03:06:05 +000028
dandov9de5b512014-06-10 14:38:28 -070029#if SK_SUPPORT_GPU
Mike Reede3429e62018-01-19 11:43:34 -050030 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
dandov9de5b512014-06-10 14:38:28 -070031#endif
mtklein3f3b3d02014-12-01 11:47:08 -080032
Ben Wagnera8834bb2016-10-24 11:36:21 -040033 sk_sp<SkShader> makeAsALocalMatrixShader(SkMatrix* localMatrix) const override {
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000034 if (localMatrix) {
scroggoc870d492014-07-11 10:42:12 -070035 *localMatrix = this->getLocalMatrix();
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000036 }
Ben Wagnera8834bb2016-10-24 11:36:21 -040037 return fProxyShader;
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000038 }
skia.committer@gmail.come92c68f72014-05-13 03:06:05 +000039
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000040protected:
mtklein36352bf2015-03-25 18:17:31 -070041 void flatten(SkWriteBuffer&) const override;
skia.committer@gmail.come92c68f72014-05-13 03:06:05 +000042
Mike Reede92aae62018-10-17 10:21:51 -040043#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Herb Derby83e939b2017-02-07 14:25:11 -050044 Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
Mike Reede92aae62018-10-17 10:21:51 -040045#endif
reed773ceda2016-03-03 18:18:25 -080046
Mike Reedfae8fce2019-04-03 10:27:45 -040047 SkImage* onIsAImage(SkMatrix* matrix, SkTileMode* mode) const override;
Mike Reed627778d2016-09-28 17:13:38 -040048
Mike Reed1386b2d2019-03-13 21:15:05 -040049 bool onAppendStages(const SkStageRec&) const override;
Florin Malita882ccaf2017-01-27 10:51:58 -050050
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000051private:
Mike Klein4fee3232018-10-18 17:27:16 -040052 SK_FLATTENABLE_HOOKS(SkLocalMatrixShader)
53
Ben Wagnera8834bb2016-10-24 11:36:21 -040054 sk_sp<SkShader> fProxyShader;
skia.committer@gmail.come92c68f72014-05-13 03:06:05 +000055
Florin Malita4aed1382017-05-25 10:38:07 -040056 typedef SkShaderBase INHERITED;
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000057};
58
59#endif