| /* |
| * Copyright 2024 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef skgpu_graphite_precompile_PrecompileBlender_DEFINED |
| #define skgpu_graphite_precompile_PrecompileBlender_DEFINED |
| |
| #include "include/core/SkBlendMode.h" |
| #include "include/gpu/graphite/precompile/PrecompileBase.h" |
| |
| #include <optional> |
| |
| namespace skgpu::graphite { |
| |
| class PrecompileBlenderPriv; |
| |
| /** \class PrecompileBlender |
| This class corresponds to the SkBlender class in the main API. |
| */ |
| class SK_API PrecompileBlender : public PrecompileBase { |
| public: |
| // Provides access to functions that aren't part of the public API. |
| PrecompileBlenderPriv priv(); |
| const PrecompileBlenderPriv priv() const; // NOLINT(readability-const-return-type) |
| |
| protected: |
| friend class PrecompileBlenderPriv; |
| |
| virtual std::optional<SkBlendMode> asBlendMode() const { return {}; } |
| |
| PrecompileBlender() : PrecompileBase(Type::kBlender) {} |
| ~PrecompileBlender() override; |
| }; |
| |
| //-------------------------------------------------------------------------------------------------- |
| // This is the Precompile correlate to the SkBlenders namespace in the main API |
| namespace PrecompileBlenders { |
| |
| // This factory creates a Precompilation object that represents the Arithmetic SkBlender from |
| // the main API. Note that the actual Arithmetic parameters (i.e., k1, k2, k3 and k4) are |
| // abstracted away since they do not impact the generated shader. |
| SK_API sk_sp<PrecompileBlender> Arithmetic(); |
| |
| // This is the Precompilation correlate to the SkBlender::Mode factory in the main API. It |
| // creates an object that represents SkBlendMode-based blending. |
| SK_API sk_sp<PrecompileBlender> Mode(SkBlendMode); |
| |
| } // namespace PrecompileBlenders |
| |
| |
| } // namespace skgpu::graphite |
| |
| #endif // skgpu_graphite_precompile_PrecompileBlender_DEFINED |