Make SkGpuDevice hold a GrRecordingContext (take 2)
This makes the code reflect what is actually going on. During DDL
recording the SkGpuDevice only holds a recording context.
This can't land until the following Chrome-side CL lands:
https://chromium-review.googlesource.com/c/chromium/src/+/2277964 (Add GrContext.h include to skia renderer for upcoming Skia roll)
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/299867
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Adlai Holler <adlai@google.com>
Change-Id: I6ef3896f5a270a4fa7af37f9121f68a66653cce2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/300896
diff --git a/gm/image.cpp b/gm/image.cpp
index 390d668..c4c417d 100644
--- a/gm/image.cpp
+++ b/gm/image.cpp
@@ -40,7 +40,6 @@
#include <functional>
#include <utility>
-class GrContext;
class GrRenderTargetContext;
static void drawContents(SkSurface* surface, SkColor fillC) {
@@ -160,7 +159,7 @@
SkImageInfo info = SkImageInfo::MakeN32Premul(W, H);
sk_sp<SkSurface> surf0(SkSurface::MakeRasterDirect(info, fBuffer, RB));
sk_sp<SkSurface> surf1(SkSurface::MakeRaster(info));
- sk_sp<SkSurface> surf2(SkSurface::MakeRenderTarget(canvas->getGrContext(),
+ sk_sp<SkSurface> surf2(SkSurface::MakeRenderTarget(canvas->recordingContext(),
SkBudgeted::kNo, info));
test_surface(canvas, surf0.get(), true);
@@ -222,13 +221,17 @@
canvas->drawCircle(50, 50, 35, paint);
}
-static sk_sp<SkImage> make_raster(const SkImageInfo& info, GrContext*, void (*draw)(SkCanvas*)) {
+static sk_sp<SkImage> make_raster(const SkImageInfo& info,
+ GrRecordingContext*,
+ void (*draw)(SkCanvas*)) {
auto surface(SkSurface::MakeRaster(info));
draw(surface->getCanvas());
return surface->makeImageSnapshot();
}
-static sk_sp<SkImage> make_picture(const SkImageInfo& info, GrContext*, void (*draw)(SkCanvas*)) {
+static sk_sp<SkImage> make_picture(const SkImageInfo& info,
+ GrRecordingContext*,
+ void (*draw)(SkCanvas*)) {
SkPictureRecorder recorder;
draw(recorder.beginRecording(SkRect::MakeIWH(info.width(), info.height())));
return SkImage::MakeFromPicture(recorder.finishRecordingAsPicture(),
@@ -236,20 +239,32 @@
SkColorSpace::MakeSRGB());
}
-static sk_sp<SkImage> make_codec(const SkImageInfo& info, GrContext*, void (*draw)(SkCanvas*)) {
+static sk_sp<SkImage> make_codec(const SkImageInfo& info,
+ GrRecordingContext*,
+ void (*draw)(SkCanvas*)) {
sk_sp<SkImage> image(make_raster(info, nullptr, draw));
return SkImage::MakeFromEncoded(image->encodeToData());
}
-static sk_sp<SkImage> make_gpu(const SkImageInfo& info, GrContext* ctx, void (*draw)(SkCanvas*)) {
- if (!ctx) { return nullptr; }
+static sk_sp<SkImage> make_gpu(const SkImageInfo& info,
+ GrRecordingContext* ctx,
+ void (*draw)(SkCanvas*)) {
+ if (!ctx) {
+ return nullptr;
+ }
+
auto surface(SkSurface::MakeRenderTarget(ctx, SkBudgeted::kNo, info));
- if (!surface) { return nullptr; }
+ if (!surface) {
+ return nullptr;
+ }
+
draw(surface->getCanvas());
return surface->makeImageSnapshot();
}
-typedef sk_sp<SkImage> (*ImageMakerProc)(const SkImageInfo&, GrContext*, void (*)(SkCanvas*));
+typedef sk_sp<SkImage> (*ImageMakerProc)(const SkImageInfo&,
+ GrRecordingContext*,
+ void (*)(SkCanvas*));
class ScalePixelsGM : public skiagm::GM {
public:
@@ -271,7 +286,7 @@
make_codec, make_raster, make_picture, make_codec, make_gpu,
};
for (auto& proc : procs) {
- sk_sp<SkImage> image(proc(info, canvas->getGrContext(), draw_contents));
+ sk_sp<SkImage> image(proc(info, canvas->recordingContext(), draw_contents));
if (image) {
show_scaled_pixels(canvas, image.get());
}
@@ -337,8 +352,8 @@
SkImage::BitDepth::kU8, srgbColorSpace);
},
// Create a texture image
- [direct, render_image]() -> sk_sp<SkImage> {
- auto surface(SkSurface::MakeRenderTarget(direct, SkBudgeted::kYes,
+ [context, render_image]() -> sk_sp<SkImage> {
+ auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes,
SkImageInfo::MakeS32(kSize, kSize,
kPremul_SkAlphaType)));
if (!surface) {