Add dm via-option rtblend- to test using Runtime Blends.

Change-Id: I46844754a86ae44b61747b7244edf6cc1fd73d61
Bug: skia:12080
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/429102
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
This commit is contained in:
John Stiles 2021-07-20 12:53:54 -04:00 committed by Skia Commit-Bot
parent dfd1a70f39
commit 65ec198696
4 changed files with 42 additions and 2 deletions

View File

@ -2104,7 +2104,9 @@ if (skia_enable_tools) {
"dm/DM.cpp",
"dm/DMGpuTestProcs.cpp",
"dm/DMJsonWriter.cpp",
"dm/DMJsonWriter.h",
"dm/DMSrcSink.cpp",
"dm/DMSrcSink.h",
]
deps = [
":common_flags_aa",

View File

@ -1032,6 +1032,7 @@ static Sink* create_via(const SkString& tag, Sink* wrapped) {
#endif
VIA("serialize", ViaSerialization, wrapped);
VIA("pic", ViaPicture, wrapped);
VIA("rtblend", ViaRuntimeBlend, wrapped);
if (FLAGS_matrix.count() == 4) {
SkMatrix m;

View File

@ -30,6 +30,7 @@
#include "include/private/SkTLogic.h"
#include "include/third_party/skcms/skcms.h"
#include "include/utils/SkNullCanvas.h"
#include "include/utils/SkPaintFilterCanvas.h"
#include "include/utils/SkRandom.h"
#include "modules/skottie/utils/SkottieUtils.h"
#include "src/codec/SkCodecImageGenerator.h"
@ -50,6 +51,7 @@
#include "tools/DDLPromiseImageHelper.h"
#include "tools/DDLTileHelper.h"
#include "tools/Resources.h"
#include "tools/RuntimeBlendUtils.h"
#include "tools/debugger/DebugCanvas.h"
#include "tools/gpu/BackendSurfaceFactory.h"
#include "tools/gpu/MemoryCache.h"
@ -1560,8 +1562,8 @@ Result GPUSink::onDraw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log,
if (FLAGS_preAbandonGpuContext) {
factory.abandonContexts();
}
SkCanvas* canvas = surface->getCanvas();
Result result = src.draw(direct, canvas);
Result result = src.draw(direct, surface->getCanvas());
if (!result.isOk()) {
return result;
}
@ -2265,6 +2267,35 @@ Result ViaPicture::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkS
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
Result ViaRuntimeBlend::draw(const Src& src,
SkBitmap* bitmap,
SkWStream* stream,
SkString* log) const {
class RuntimeBlendFilterCanvas : public SkPaintFilterCanvas {
public:
RuntimeBlendFilterCanvas(SkCanvas* canvas) : INHERITED(canvas) { }
protected:
bool onFilter(SkPaint& paint) const override {
if (skstd::optional<SkBlendMode> mode = paint.asBlendMode()) {
paint.setBlender(GetRuntimeBlendForBlendMode(*mode));
}
return true;
}
private:
using INHERITED = SkPaintFilterCanvas;
};
return draw_to_canvas(fSink.get(), bitmap, stream, log, src.size(),
[&](GrDirectContext* context, SkCanvas* canvas) {
RuntimeBlendFilterCanvas runtimeBlendCanvas{canvas};
return src.draw(context, &runtimeBlendCanvas);
});
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#ifdef TEST_VIA_SVG
#include "include/svg/SkSVGCanvas.h"
#include "modules/svg/include/SkSVGDOM.h"

View File

@ -625,6 +625,12 @@ public:
Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
};
class ViaRuntimeBlend : public Via {
public:
explicit ViaRuntimeBlend(Sink* sink) : Via(sink) {}
Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
};
class ViaSVG : public Via {
public:
explicit ViaSVG(Sink* sink) : Via(sink) {}