blob: b448922db9e6e56e19f84176c855a6e87845f619 [file] [log] [blame]
/*
* Copyright 2021 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkBaseGpuDevice_DEFINED
#define SkBaseGpuDevice_DEFINED
#include "src/gpu/GrSurfaceProxyView.h"
#include "include/core/SkImage.h"
// NOTE: when not defined, SkGpuDevice extends SkBaseDevice directly and manages its clip stack
// using GrClipStack. When false, SkGpuDevice continues to extend SkClipStackDevice and uses
// SkClipStack and GrClipStackClip to manage the clip stack.
#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK)
// For staging purposes, disable this for Android Framework
#if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
#define SK_DISABLE_NEW_GR_CLIP_STACK
#endif
#endif
#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK)
#include "src/core/SkDevice.h"
#define BASE_DEVICE SkBaseDevice
#else
#include "src/core/SkClipStackDevice.h"
#define BASE_DEVICE SkClipStackDevice
#endif
class SkBaseGpuDevice : public BASE_DEVICE {
public:
enum InitContents {
kClear_InitContents,
kUninit_InitContents
};
SkBaseGpuDevice(sk_sp<GrRecordingContext> rContext,
const SkImageInfo& ii,
const SkSurfaceProps& props)
: INHERITED(ii, props)
, fContext(std::move(rContext)) {
}
virtual GrSurfaceProxyView readSurfaceView() = 0;
GrRenderTargetProxy* targetProxy() override {
return this->readSurfaceView().asRenderTargetProxy();
}
GrRecordingContext* recordingContext() const override { return fContext.get(); }
virtual bool wait(int numSemaphores,
const GrBackendSemaphore* waitSemaphores,
bool deleteSemaphoresAfterWait) = 0;
virtual void discard() = 0;
virtual bool replaceBackingProxy(SkSurface::ContentChangeMode,
sk_sp<GrRenderTargetProxy>,
GrColorType,
sk_sp<SkColorSpace>,
GrSurfaceOrigin,
const SkSurfaceProps&) = 0;
bool replaceBackingProxy(SkSurface::ContentChangeMode);
using RescaleGamma = SkImage::RescaleGamma;
using RescaleMode = SkImage::RescaleMode;
using ReadPixelsCallback = SkImage::ReadPixelsCallback;
using ReadPixelsContext = SkImage::ReadPixelsContext;
virtual void asyncRescaleAndReadPixels(const SkImageInfo& info,
const SkIRect& srcRect,
RescaleGamma rescaleGamma,
RescaleMode rescaleMode,
ReadPixelsCallback callback,
ReadPixelsContext context) = 0;
virtual void asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace,
sk_sp<SkColorSpace> dstColorSpace,
const SkIRect& srcRect,
SkISize dstSize,
RescaleGamma rescaleGamma,
RescaleMode,
ReadPixelsCallback callback,
ReadPixelsContext context) = 0;
protected:
sk_sp<GrRecordingContext> fContext;
private:
using INHERITED = BASE_DEVICE;
};
#undef BASE_DEVICE
#endif