| /* |
| * Copyright 2022 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "include/core/SkTypes.h" |
| |
| #ifdef SK_ENABLE_PRECOMPILE |
| |
| #include "src/core/SkFactoryFunctions.h" |
| |
| #include "src/core/SkPrecompile.h" |
| |
| // TODO: wrap this in an SK_PRECOMPILE check |
| |
| //-------------------------------------------------------------------------------------------------- |
| class SkPrecompileBlendModeBlender : public SkPrecompileBlender { |
| public: |
| SkPrecompileBlendModeBlender(SkBlendMode blendMode) : fBlendMode(blendMode) {} |
| |
| std::optional<SkBlendMode> asBlendMode() const final { return fBlendMode; } |
| |
| private: |
| SkBlendMode fBlendMode; |
| }; |
| |
| sk_sp<SkPrecompileBlender> SkPrecompileBlender::Mode(SkBlendMode blendMode) { |
| return sk_make_sp<SkPrecompileBlendModeBlender>(blendMode); |
| } |
| |
| //-------------------------------------------------------------------------------------------------- |
| class SkBlendPrecompileShader : public SkPrecompileShader { |
| public: |
| SkBlendPrecompileShader(SkSpan<const sk_sp<SkPrecompileBlender>> blenders, |
| SkSpan<const sk_sp<SkPrecompileShader>> dsts, |
| SkSpan<const sk_sp<SkPrecompileShader>> srcs) |
| : fBlenders(blenders.begin(), blenders.end()) |
| , fDsts(dsts.begin(), dsts.end()) |
| , fSrcs(srcs.begin(), srcs.end()) { |
| } |
| |
| private: |
| std::vector<sk_sp<SkPrecompileBlender>> fBlenders; |
| std::vector<sk_sp<SkPrecompileShader>> fDsts; |
| std::vector<sk_sp<SkPrecompileShader>> fSrcs; |
| }; |
| |
| //-------------------------------------------------------------------------------------------------- |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::Color() { |
| return sk_make_sp<SkPrecompileShader>(); |
| } |
| |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::Blend( |
| SkSpan<const sk_sp<SkPrecompileBlender>> blenders, |
| SkSpan<const sk_sp<SkPrecompileShader>> dsts, |
| SkSpan<const sk_sp<SkPrecompileShader>> srcs) { |
| return sk_make_sp<SkBlendPrecompileShader>(std::move(blenders), |
| std::move(dsts), std::move(srcs)); |
| } |
| |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::Blend( |
| SkSpan<SkBlendMode> blendModes, |
| SkSpan<const sk_sp<SkPrecompileShader>> dsts, |
| SkSpan<const sk_sp<SkPrecompileShader>> srcs) { |
| std::vector<sk_sp<SkPrecompileBlender>> tmp; |
| tmp.reserve(blendModes.size()); |
| for (SkBlendMode bm : blendModes) { |
| tmp.emplace_back(SkPrecompileBlender::Mode(bm)); |
| } |
| |
| return sk_make_sp<SkBlendPrecompileShader>(tmp, std::move(dsts), std::move(srcs)); |
| } |
| |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::Image() { |
| return sk_make_sp<SkPrecompileShader>(); |
| } |
| |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::LinearGradient() { |
| return sk_make_sp<SkPrecompileShader>(); |
| } |
| |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::RadialGradient() { |
| return sk_make_sp<SkPrecompileShader>(); |
| } |
| |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::TwoPointConicalGradient() { |
| return sk_make_sp<SkPrecompileShader>(); |
| } |
| |
| sk_sp<SkPrecompileShader> SkPrecompileShaders::SweepGradient() { |
| return sk_make_sp<SkPrecompileShader>(); |
| } |
| |
| //-------------------------------------------------------------------------------------------------- |
| sk_sp<SkPrecompileMaskFilter> SkPrecompileMaskFilters::Blur() { |
| return sk_make_sp<SkPrecompileMaskFilter>(); |
| } |
| |
| //-------------------------------------------------------------------------------------------------- |
| sk_sp<SkPrecompileColorFilter> SkPrecompileColorFilters::Matrix() { |
| return sk_make_sp<SkPrecompileColorFilter>(); |
| } |
| |
| //-------------------------------------------------------------------------------------------------- |
| sk_sp<SkPrecompileImageFilter> SkPrecompileImageFilters::Blur() { |
| return sk_make_sp<SkPrecompileImageFilter>(); |
| } |
| |
| sk_sp<SkPrecompileImageFilter> SkPrecompileImageFilters::Image() { |
| return sk_make_sp<SkPrecompileImageFilter>(); |
| } |
| |
| //-------------------------------------------------------------------------------------------------- |
| |
| #endif // SK_ENABLE_PRECOMPILE |