| /* |
| * Copyright 2021 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "experimental/graphite/src/Renderer.h" |
| |
| #include "experimental/graphite/src/geom/Shape.h" |
| #include "src/gpu/BufferWriter.h" |
| |
| namespace skgpu { |
| |
| namespace { |
| |
| // TODO: Hand off to csmartdalton, this should roughly correspond to the fStencilFanProgram and |
| // simple triangulator shader stage of the skgpu::v1::PathStencilCoverOp |
| /* |
| class StencilFanRenderStep : public RenderStep { |
| public: |
| StencilFanRenderStep() {} |
| |
| ~StencilFanRenderStep() override {} |
| |
| const char* name() const override { return "stencil-fan"; } |
| bool requiresStencil() const override { return true; } |
| bool requiresMSAA() const override { return true; } |
| bool performsShading() const override { return false; } |
| |
| private: |
| }; |
| */ |
| |
| // TODO: Hand off to csmartdalton, this should roughly correspond to the fStencilPathProgram stage |
| // of skgpu::v1::PathStencilCoverOp using the PathCurveTessellator |
| /* |
| class StencilCurvesRenderStep : public RenderStep { |
| public: |
| StencilCurvesRenderStep() {} |
| |
| ~StencilCurvesRenderStep() override {} |
| |
| const char* name() const override { return "stencil-curves"; } |
| bool requiresStencil() const override { return true; } |
| bool requiresMSAA() const override { return true; } |
| bool performsShading() const override { return false; } |
| |
| private: |
| }; |
| */ |
| |
| // TODO: Hand off to csmartdalton, this should roughly correspond to the fCoverBBoxProgram stage |
| // of skgpu::v1::PathStencilCoverOp. |
| class FillBoundsRenderStep : public RenderStep { |
| public: |
| FillBoundsRenderStep() {} |
| |
| ~FillBoundsRenderStep() override {} |
| |
| const char* name() const override { return "fill-bounds"; } |
| // TODO: true when combined with a stencil step |
| bool requiresStencil() const override { return false; } |
| bool requiresMSAA() const override { return false; } |
| bool performsShading() const override { return true; } |
| |
| size_t requiredVertexSpace(const Shape&) const override { |
| return 8 * sizeof(float); |
| } |
| |
| size_t requiredIndexSpace(const Shape&) const override { |
| return 0; |
| } |
| |
| void writeVertices(VertexWriter vertexWriter, |
| IndexWriter indexWriter, |
| const Shape& shape) const override { |
| vertexWriter.writeQuad(VertexWriter::TriStripFromRect(shape.bounds().asSkRect())); |
| } |
| |
| |
| private: |
| }; |
| |
| } // anonymous namespace |
| |
| const Renderer& Renderer::StencilAndFillPath() { |
| // TODO: Uncomment and include in kRenderer to draw flattened paths instead of bboxes |
| // static const StencilFanRenderStep kStencilFan; |
| // TODO: Uncomment and include in kRenderer to draw curved paths |
| // static const StencilCurvesRenderStep kStencilCurves; |
| // TODO: This could move into a header and be reused across renderers |
| static const FillBoundsRenderStep kCover; |
| static const Renderer kRenderer("stencil-and-fill", |
| /*&kStencilFan,*/ /*&kStencilCurves,*/ &kCover); |
| |
| return kRenderer; |
| } |
| |
| } // namespace skgpu |