1 /*
2 * Copyright 2021 Google LLC
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "experimental/graphite/src/Surface_Graphite.h"
9
10 #include "experimental/graphite/include/Recorder.h"
11 #include "experimental/graphite/include/SkStuff.h"
12 #include "experimental/graphite/src/Device.h"
13 #include "experimental/graphite/src/Image_Graphite.h"
14
15 namespace skgpu {
16
Surface(sk_sp<Device> device)17 Surface::Surface(sk_sp<Device> device)
18 : SkSurface_Base(device->width(), device->height(), &device->surfaceProps())
19 , fDevice(std::move(device)) {
20 }
21
~Surface()22 Surface::~Surface() {}
23
onNewCanvas()24 SkCanvas* Surface::onNewCanvas() { return new SkCanvas(fDevice); }
25
onNewSurface(const SkImageInfo & ii)26 sk_sp<SkSurface> Surface::onNewSurface(const SkImageInfo& ii) {
27 return MakeGraphite(fDevice->recorder(), ii);
28 }
29
onNewImageSnapshot(const SkIRect * subset)30 sk_sp<SkImage> Surface::onNewImageSnapshot(const SkIRect* subset) {
31 SkImageInfo ii = subset ? this->imageInfo().makeDimensions(subset->size())
32 : this->imageInfo();
33
34 return sk_sp<Image_Graphite>(new Image_Graphite(ii));
35 }
36
onWritePixels(const SkPixmap & pixmap,int x,int y)37 void Surface::onWritePixels(const SkPixmap& pixmap, int x, int y) {
38 fDevice->writePixels(pixmap, x, y);
39 }
40
onCopyOnWrite(ContentChangeMode)41 bool Surface::onCopyOnWrite(ContentChangeMode) { return true; }
42
onReadPixels(Context * context,Recorder * recorder,const SkPixmap & dst,int srcX,int srcY)43 bool Surface::onReadPixels(Context* context,
44 Recorder* recorder,
45 const SkPixmap& dst,
46 int srcX,
47 int srcY) {
48 return fDevice->readPixels(context, recorder, dst, srcX, srcY);
49 }
50
51 } // namespace skgpu
52