/* * 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 "experimental/graphite/src/PaintParams.h" #include "include/core/SkShader.h" #include "src/core/SkBlenderBase.h" #include "src/core/SkKeyHelpers.h" #include "src/core/SkPaintParamsKey.h" #include "src/shaders/SkShaderBase.h" namespace skgpu { PaintParams::PaintParams(const SkColor4f& color, sk_sp blender, sk_sp shader) : fColor(color) , fBlender(std::move(blender)) , fShader(std::move(shader)) {} PaintParams::PaintParams(const SkPaint& paint) : fColor(paint.getColor4f()) , fBlender(paint.refBlender()) , fShader(paint.refShader()) {} PaintParams::PaintParams(const PaintParams& other) = default; PaintParams::~PaintParams() = default; PaintParams& PaintParams::operator=(const PaintParams& other) = default; std::optional PaintParams::asBlendMode() const { return fBlender ? as_BB(fBlender)->asBlendMode() : SkBlendMode::kSrcOver; } sk_sp PaintParams::refBlender() const { return fBlender; } sk_sp PaintParams::refShader() const { return fShader; } void PaintParams::toKey(SkShaderCodeDictionary* dict, SkBackend backend, SkPaintParamsKeyBuilder* builder, SkUniformBlock* uniformBlock) const { if (fShader) { as_SB(fShader)->addToKey(dict, backend, builder, uniformBlock); } else { SolidColorShaderBlock::AddToKey(dict, backend, builder, uniformBlock, fColor); } if (fBlender) { as_BB(fBlender)->addToKey(dict, backend, builder, uniformBlock); } else { BlendModeBlock::AddToKey(dict, backend, builder, uniformBlock, SkBlendMode::kSrcOver); } SkASSERT(builder->sizeInBytes() > 0); } } // namespace skgpu