xref: /aosp_15_r20/external/skia/src/gpu/ganesh/ops/SoftwarePathRenderer.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2012 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker #ifndef SoftwarePathRenderer_DEFINED
8*c8dee2aaSAndroid Build Coastguard Worker #define SoftwarePathRenderer_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker 
10*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/PathRenderer.h"
11*c8dee2aaSAndroid Build Coastguard Worker 
12*c8dee2aaSAndroid Build Coastguard Worker class GrClip;
13*c8dee2aaSAndroid Build Coastguard Worker class GrPaint;
14*c8dee2aaSAndroid Build Coastguard Worker class GrProxyProvider;
15*c8dee2aaSAndroid Build Coastguard Worker class GrStyledShape;
16*c8dee2aaSAndroid Build Coastguard Worker class GrSurfaceProxyView;
17*c8dee2aaSAndroid Build Coastguard Worker class SkMatrix;
18*c8dee2aaSAndroid Build Coastguard Worker struct GrUserStencilSettings;
19*c8dee2aaSAndroid Build Coastguard Worker struct SkIPoint;
20*c8dee2aaSAndroid Build Coastguard Worker struct SkIRect;
21*c8dee2aaSAndroid Build Coastguard Worker struct SkRect;
22*c8dee2aaSAndroid Build Coastguard Worker 
23*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::ganesh {
24*c8dee2aaSAndroid Build Coastguard Worker class SurfaceDrawContext;
25*c8dee2aaSAndroid Build Coastguard Worker 
26*c8dee2aaSAndroid Build Coastguard Worker /**
27*c8dee2aaSAndroid Build Coastguard Worker  * This class uses the software side to render a path to an SkBitmap and
28*c8dee2aaSAndroid Build Coastguard Worker  * then uploads the result to the gpu
29*c8dee2aaSAndroid Build Coastguard Worker  */
30*c8dee2aaSAndroid Build Coastguard Worker class SoftwarePathRenderer final : public PathRenderer {
31*c8dee2aaSAndroid Build Coastguard Worker public:
name()32*c8dee2aaSAndroid Build Coastguard Worker     const char* name() const override { return "SW"; }
33*c8dee2aaSAndroid Build Coastguard Worker 
SoftwarePathRenderer(GrProxyProvider * proxyProvider,bool allowCaching)34*c8dee2aaSAndroid Build Coastguard Worker     SoftwarePathRenderer(GrProxyProvider* proxyProvider, bool allowCaching)
35*c8dee2aaSAndroid Build Coastguard Worker             : fProxyProvider(proxyProvider)
36*c8dee2aaSAndroid Build Coastguard Worker             , fAllowCaching(allowCaching) {
37*c8dee2aaSAndroid Build Coastguard Worker     }
38*c8dee2aaSAndroid Build Coastguard Worker 
39*c8dee2aaSAndroid Build Coastguard Worker     static bool GetShapeAndClipBounds(SurfaceDrawContext*,
40*c8dee2aaSAndroid Build Coastguard Worker                                       const GrClip*,
41*c8dee2aaSAndroid Build Coastguard Worker                                       const GrStyledShape&,
42*c8dee2aaSAndroid Build Coastguard Worker                                       const SkMatrix& viewMatrix,
43*c8dee2aaSAndroid Build Coastguard Worker                                       SkIRect* unclippedDevShapeBounds,
44*c8dee2aaSAndroid Build Coastguard Worker                                       SkIRect* clippedDevShapeBounds,
45*c8dee2aaSAndroid Build Coastguard Worker                                       SkIRect* devClipBounds);
46*c8dee2aaSAndroid Build Coastguard Worker 
47*c8dee2aaSAndroid Build Coastguard Worker private:
48*c8dee2aaSAndroid Build Coastguard Worker     static void DrawNonAARect(SurfaceDrawContext*,
49*c8dee2aaSAndroid Build Coastguard Worker                               GrPaint&&,
50*c8dee2aaSAndroid Build Coastguard Worker                               const GrUserStencilSettings&,
51*c8dee2aaSAndroid Build Coastguard Worker                               const GrClip*,
52*c8dee2aaSAndroid Build Coastguard Worker                               const SkMatrix& viewMatrix,
53*c8dee2aaSAndroid Build Coastguard Worker                               const SkRect& rect,
54*c8dee2aaSAndroid Build Coastguard Worker                               const SkMatrix& localMatrix);
55*c8dee2aaSAndroid Build Coastguard Worker     static void DrawAroundInvPath(SurfaceDrawContext*,
56*c8dee2aaSAndroid Build Coastguard Worker                                   GrPaint&&,
57*c8dee2aaSAndroid Build Coastguard Worker                                   const GrUserStencilSettings&,
58*c8dee2aaSAndroid Build Coastguard Worker                                   const GrClip*,
59*c8dee2aaSAndroid Build Coastguard Worker                                   const SkMatrix& viewMatrix,
60*c8dee2aaSAndroid Build Coastguard Worker                                   const SkIRect& devClipBounds,
61*c8dee2aaSAndroid Build Coastguard Worker                                   const SkIRect& devPathBounds);
62*c8dee2aaSAndroid Build Coastguard Worker 
63*c8dee2aaSAndroid Build Coastguard Worker     // This utility draws a path mask using a provided paint. The rectangle is drawn in device
64*c8dee2aaSAndroid Build Coastguard Worker     // space. The 'viewMatrix' will be used to ensure the correct local coords are provided to
65*c8dee2aaSAndroid Build Coastguard Worker     // any fragment processors in the paint.
66*c8dee2aaSAndroid Build Coastguard Worker     static void DrawToTargetWithShapeMask(GrSurfaceProxyView,
67*c8dee2aaSAndroid Build Coastguard Worker                                           SurfaceDrawContext*,
68*c8dee2aaSAndroid Build Coastguard Worker                                           GrPaint&&,
69*c8dee2aaSAndroid Build Coastguard Worker                                           const GrUserStencilSettings&,
70*c8dee2aaSAndroid Build Coastguard Worker                                           const GrClip*,
71*c8dee2aaSAndroid Build Coastguard Worker                                           const SkMatrix& viewMatrix,
72*c8dee2aaSAndroid Build Coastguard Worker                                           const SkIPoint& textureOriginInDeviceSpace,
73*c8dee2aaSAndroid Build Coastguard Worker                                           const SkIRect& deviceSpaceRectToDraw);
74*c8dee2aaSAndroid Build Coastguard Worker 
onGetStencilSupport(const GrStyledShape &)75*c8dee2aaSAndroid Build Coastguard Worker     StencilSupport onGetStencilSupport(const GrStyledShape&) const override {
76*c8dee2aaSAndroid Build Coastguard Worker         return PathRenderer::kNoSupport_StencilSupport;
77*c8dee2aaSAndroid Build Coastguard Worker     }
78*c8dee2aaSAndroid Build Coastguard Worker 
79*c8dee2aaSAndroid Build Coastguard Worker     CanDrawPath onCanDrawPath(const CanDrawPathArgs&) const override;
80*c8dee2aaSAndroid Build Coastguard Worker 
81*c8dee2aaSAndroid Build Coastguard Worker     bool onDrawPath(const DrawPathArgs&) override;
82*c8dee2aaSAndroid Build Coastguard Worker 
83*c8dee2aaSAndroid Build Coastguard Worker private:
84*c8dee2aaSAndroid Build Coastguard Worker     GrProxyProvider* fProxyProvider;
85*c8dee2aaSAndroid Build Coastguard Worker     bool             fAllowCaching;
86*c8dee2aaSAndroid Build Coastguard Worker };
87*c8dee2aaSAndroid Build Coastguard Worker 
88*c8dee2aaSAndroid Build Coastguard Worker }  // namespace skgpu::ganesh
89*c8dee2aaSAndroid Build Coastguard Worker 
90*c8dee2aaSAndroid Build Coastguard Worker #endif // SoftwarePathRenderer_DEFINED
91