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:
parent
dfd1a70f39
commit
65ec198696
2
BUILD.gn
2
BUILD.gn
@ -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",
|
||||
|
@ -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;
|
||||
|
@ -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"
|
||||
|
@ -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) {}
|
||||
|
Loading…
Reference in New Issue
Block a user