blob: 2895dca65937168f109f7a517301c997ce722460 [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.come92c68f2014-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.come92c68f2014-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.come92c68f2014-05-13 03:06:05 +000039
Hal Canary8a64fa62019-05-30 10:29:40 -040040 SkPicture* isAPicture(SkMatrix*, SkTileMode[2], SkRect* tile) const override;
41
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000042protected:
mtklein36352bf2015-03-25 18:17:31 -070043 void flatten(SkWriteBuffer&) const override;
skia.committer@gmail.come92c68f2014-05-13 03:06:05 +000044
Mike Reede92aae62018-10-17 10:21:51 -040045#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Herb Derby83e939b2017-02-07 14:25:11 -050046 Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
Mike Reede92aae62018-10-17 10:21:51 -040047#endif
reed773ceda2016-03-03 18:18:25 -080048
Mike Reedfae8fce2019-04-03 10:27:45 -040049 SkImage* onIsAImage(SkMatrix* matrix, SkTileMode* mode) const override;
Mike Reed627778d2016-09-28 17:13:38 -040050
Mike Reed1386b2d2019-03-13 21:15:05 -040051 bool onAppendStages(const SkStageRec&) const override;
Florin Malita882ccaf2017-01-27 10:51:58 -050052
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000053private:
Mike Klein4fee3232018-10-18 17:27:16 -040054 SK_FLATTENABLE_HOOKS(SkLocalMatrixShader)
55
Ben Wagnera8834bb2016-10-24 11:36:21 -040056 sk_sp<SkShader> fProxyShader;
skia.committer@gmail.come92c68f2014-05-13 03:06:05 +000057
Florin Malita4aed1382017-05-25 10:38:07 -040058 typedef SkShaderBase INHERITED;
commit-bot@chromium.org5970f622014-05-12 20:42:21 +000059};
60
61#endif