64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
/*
|
|
* 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<SkBlender> blender,
|
|
sk_sp<SkShader> 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<SkBlendMode> PaintParams::asBlendMode() const {
|
|
return fBlender ? as_BB(fBlender)->asBlendMode()
|
|
: SkBlendMode::kSrcOver;
|
|
}
|
|
|
|
sk_sp<SkBlender> PaintParams::refBlender() const { return fBlender; }
|
|
|
|
sk_sp<SkShader> 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
|