|  | /* | 
|  | * Copyright 2014 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #ifndef SkSurface_Ganesh_DEFINED | 
|  | #define SkSurface_Ganesh_DEFINED | 
|  |  | 
|  | #include "include/core/SkTypes.h" | 
|  |  | 
|  | #include "include/core/SkImageInfo.h" | 
|  | #include "include/core/SkRefCnt.h" | 
|  | #include "include/core/SkSamplingOptions.h" | 
|  | #include "include/core/SkScalar.h" | 
|  | #include "include/gpu/GrBackendSurface.h" | 
|  | #include "src/image/SkSurface_Base.h" | 
|  |  | 
|  | class GrBackendSemaphore; | 
|  | class GrDeferredDisplayList; | 
|  | class GrRecordingContext; | 
|  | class GrSurfaceCharacterization; | 
|  | class SkCanvas; | 
|  | class SkCapabilities; | 
|  | class SkColorSpace; | 
|  | class SkImage; | 
|  | class SkPaint; | 
|  | class SkPixmap; | 
|  | class SkSurface; | 
|  | enum GrSurfaceOrigin : int; | 
|  | namespace skgpu { | 
|  | namespace ganesh { | 
|  | class Device; | 
|  | } | 
|  | }  // namespace skgpu | 
|  | struct SkIRect; | 
|  | struct SkISize; | 
|  |  | 
|  | class SkSurface_Ganesh : public SkSurface_Base { | 
|  | public: | 
|  | SkSurface_Ganesh(sk_sp<skgpu::ganesh::Device>); | 
|  | ~SkSurface_Ganesh() override; | 
|  |  | 
|  | // From SkSurface.h | 
|  | SkImageInfo imageInfo() const override; | 
|  | bool replaceBackendTexture(const GrBackendTexture&, | 
|  | GrSurfaceOrigin, | 
|  | ContentChangeMode, | 
|  | TextureReleaseProc, | 
|  | ReleaseContext) override; | 
|  |  | 
|  | // From SkSurface_Base.h | 
|  | SkSurface_Base::Type type() const override { return SkSurface_Base::Type::kGanesh; } | 
|  |  | 
|  | GrRecordingContext* onGetRecordingContext() const override; | 
|  |  | 
|  | SkCanvas* onNewCanvas() override; | 
|  | sk_sp<SkSurface> onNewSurface(const SkImageInfo&) override; | 
|  | sk_sp<SkImage> onNewImageSnapshot(const SkIRect* subset) override; | 
|  | void onWritePixels(const SkPixmap&, int x, int y) override; | 
|  | void onAsyncRescaleAndReadPixels(const SkImageInfo& info, | 
|  | SkIRect srcRect, | 
|  | RescaleGamma rescaleGamma, | 
|  | RescaleMode, | 
|  | ReadPixelsCallback callback, | 
|  | ReadPixelsContext context) override; | 
|  | void onAsyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, | 
|  | bool readAlpha, | 
|  | sk_sp<SkColorSpace> dstColorSpace, | 
|  | SkIRect srcRect, | 
|  | SkISize dstSize, | 
|  | RescaleGamma rescaleGamma, | 
|  | RescaleMode, | 
|  | ReadPixelsCallback callback, | 
|  | ReadPixelsContext context) override; | 
|  | bool onCopyOnWrite(ContentChangeMode) override; | 
|  | void onDiscard() override; | 
|  | bool onWait(int numSemaphores, | 
|  | const GrBackendSemaphore* waitSemaphores, | 
|  | bool deleteSemaphoresAfterWait) override; | 
|  | bool onCharacterize(GrSurfaceCharacterization*) const override; | 
|  | bool onIsCompatible(const GrSurfaceCharacterization&) const override; | 
|  | void onDraw(SkCanvas* canvas, | 
|  | SkScalar x, | 
|  | SkScalar y, | 
|  | const SkSamplingOptions&, | 
|  | const SkPaint* paint) override; | 
|  |  | 
|  | sk_sp<const SkCapabilities> onCapabilities() override; | 
|  |  | 
|  | skgpu::ganesh::Device* getDevice(); | 
|  | GrBackendTexture getBackendTexture(BackendHandleAccess); | 
|  | GrBackendRenderTarget getBackendRenderTarget(BackendHandleAccess); | 
|  | void resolveMSAA(); | 
|  | bool draw(sk_sp<const GrDeferredDisplayList>); | 
|  |  | 
|  | private: | 
|  | sk_sp<skgpu::ganesh::Device> fDevice; | 
|  |  | 
|  | using INHERITED = SkSurface_Base; | 
|  | }; | 
|  |  | 
|  | #endif  // SkSurface_Ganesh_DEFINED |