blob: 13b79c6ad093e1be73b39c6f6cc6d23469748063 [file] [log] [blame]
robertphillips7b9e8a42014-12-11 08:20:31 -08001/*
2 * Copyright 2014 Google Inc.
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#ifndef SkSurface_Gpu_DEFINED
9#define SkSurface_Gpu_DEFINED
10
Brian Salomona6a3df72018-03-23 16:32:22 -040011#include "GrTypesPriv.h"
robertphillips7b9e8a42014-12-11 08:20:31 -080012#include "SkSurface_Base.h"
13
14#if SK_SUPPORT_GPU
15
16class SkGpuDevice;
17
18class SkSurface_Gpu : public SkSurface_Base {
19public:
robertphillips24e91282016-04-29 06:46:36 -070020 SkSurface_Gpu(sk_sp<SkGpuDevice>);
Brian Salomond3b65972017-03-22 12:05:03 -040021 ~SkSurface_Gpu() override;
robertphillips7b9e8a42014-12-11 08:20:31 -080022
Robert Phillipsd5f9cdd2018-01-31 09:29:48 -050023 // This is an internal-only factory
24 static sk_sp<SkSurface> MakeWrappedRenderTarget(GrContext*, sk_sp<GrRenderTargetContext>);
25
Robert Phillips8caf85f2018-04-05 09:30:38 -040026 GrBackendTexture onGetBackendTexture(BackendHandleAccess) override;
27 GrBackendRenderTarget onGetBackendRenderTarget(BackendHandleAccess) override;
28
mtklein36352bf2015-03-25 18:17:31 -070029 SkCanvas* onNewCanvas() override;
reede8f30622016-03-23 18:59:25 -070030 sk_sp<SkSurface> onNewSurface(const SkImageInfo&) override;
Mike Reed114bde82018-11-21 09:12:09 -050031 sk_sp<SkImage> onNewImageSnapshot(const SkIRect* subset) override;
Mike Reed4c790bd2018-02-08 14:10:40 -050032 void onWritePixels(const SkPixmap&, int x, int y) override;
mtklein36352bf2015-03-25 18:17:31 -070033 void onCopyOnWrite(ContentChangeMode) override;
34 void onDiscard() override;
Greg Danielb9990e42019-04-10 16:28:52 -040035 GrSemaphoresSubmitted onFlush(BackendSurfaceAccess access, GrFlushFlags flags,
36 int numSemaphores,
Greg Daniel51316782017-08-02 15:10:09 +000037 GrBackendSemaphore signalSemaphores[]) override;
Greg Danielc64ee462017-06-15 16:59:49 -040038 bool onWait(int numSemaphores, const GrBackendSemaphore* waitSemaphores) override;
Robert Phillipsad8a43f2017-08-30 12:06:35 -040039 bool onCharacterize(SkSurfaceCharacterization*) const override;
Brian Salomonc552eaf2019-03-20 15:45:50 -040040 void onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) override;
Robert Phillipsad8a43f2017-08-30 12:06:35 -040041 bool isCompatible(const SkSurfaceCharacterization&) const;
Robert Phillipsd5f9cdd2018-01-31 09:29:48 -050042 bool onDraw(const SkDeferredDisplayList*) override;
robertphillips7b9e8a42014-12-11 08:20:31 -080043
robertphillips24e91282016-04-29 06:46:36 -070044 SkGpuDevice* getDevice() { return fDevice.get(); }
robertphillips7b9e8a42014-12-11 08:20:31 -080045
brianosman0e22eb82016-08-30 07:07:59 -070046 static bool Valid(const SkImageInfo&);
Robert Phillipsbe77a022018-04-03 17:17:05 -040047 static bool Valid(const GrCaps*, GrPixelConfig, SkColorSpace*);
brianosman0e22eb82016-08-30 07:07:59 -070048
robertphillips7b9e8a42014-12-11 08:20:31 -080049private:
robertphillips24e91282016-04-29 06:46:36 -070050 sk_sp<SkGpuDevice> fDevice;
robertphillips7b9e8a42014-12-11 08:20:31 -080051
52 typedef SkSurface_Base INHERITED;
53};
54
55#endif // SK_SUPPORT_GPU
56
57#endif // SkSurface_Gpu_DEFINED