1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2021 Google LLC 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef GrDstProxyView_DEFINED 9cb93a386Sopenharmony_ci#define GrDstProxyView_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/gpu/GrTypes.h" 12cb93a386Sopenharmony_ci#include "include/private/GrTypesPriv.h" 13cb93a386Sopenharmony_ci#include "src/gpu/GrSurfaceProxyView.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci/** 16cb93a386Sopenharmony_ci * GrDstProxyView holds a texture containing the destination pixel values, and an integer-coordinate 17cb93a386Sopenharmony_ci * offset from device-space to the space of the texture. When framebuffer fetch is not available, a 18cb93a386Sopenharmony_ci * GrDstProxyView may be used to support blending in the fragment shader/xfer processor. 19cb93a386Sopenharmony_ci */ 20cb93a386Sopenharmony_ciclass GrDstProxyView { 21cb93a386Sopenharmony_cipublic: 22cb93a386Sopenharmony_ci GrDstProxyView() {} 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci GrDstProxyView(const GrDstProxyView& other) { 25cb93a386Sopenharmony_ci *this = other; 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci GrDstProxyView& operator=(const GrDstProxyView& other) { 29cb93a386Sopenharmony_ci fProxyView = other.fProxyView; 30cb93a386Sopenharmony_ci fOffset = other.fOffset; 31cb93a386Sopenharmony_ci fDstSampleFlags = other.fDstSampleFlags; 32cb93a386Sopenharmony_ci return *this; 33cb93a386Sopenharmony_ci } 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci bool operator==(const GrDstProxyView& that) const { 36cb93a386Sopenharmony_ci return fProxyView == that.fProxyView && 37cb93a386Sopenharmony_ci fOffset == that.fOffset && 38cb93a386Sopenharmony_ci fDstSampleFlags == that.fDstSampleFlags; 39cb93a386Sopenharmony_ci } 40cb93a386Sopenharmony_ci bool operator!=(const GrDstProxyView& that) const { return !(*this == that); } 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ci const SkIPoint& offset() const { return fOffset; } 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci void setOffset(const SkIPoint& offset) { fOffset = offset; } 45cb93a386Sopenharmony_ci void setOffset(int ox, int oy) { fOffset.set(ox, oy); } 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ci GrSurfaceProxy* proxy() const { return fProxyView.proxy(); } 48cb93a386Sopenharmony_ci const GrSurfaceProxyView& proxyView() const { return fProxyView; } 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci void setProxyView(GrSurfaceProxyView view) { 51cb93a386Sopenharmony_ci fProxyView = std::move(view); 52cb93a386Sopenharmony_ci if (!fProxyView.proxy()) { 53cb93a386Sopenharmony_ci fOffset = {0, 0}; 54cb93a386Sopenharmony_ci } 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci GrDstSampleFlags dstSampleFlags() const { return fDstSampleFlags; } 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci void setDstSampleFlags(GrDstSampleFlags dstSampleFlags) { fDstSampleFlags = dstSampleFlags; } 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ciprivate: 62cb93a386Sopenharmony_ci GrSurfaceProxyView fProxyView; 63cb93a386Sopenharmony_ci SkIPoint fOffset = {0, 0}; 64cb93a386Sopenharmony_ci GrDstSampleFlags fDstSampleFlags = GrDstSampleFlags::kNone; 65cb93a386Sopenharmony_ci}; 66cb93a386Sopenharmony_ci 67cb93a386Sopenharmony_ci#endif 68