| /* |
| * Copyright 2020 Google LLC. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GrPathShader_DEFINED |
| #define GrPathShader_DEFINED |
| |
| #include "src/gpu/GrGeometryProcessor.h" |
| #include "src/gpu/GrOpFlushState.h" |
| #include "src/gpu/GrOpsRenderPass.h" |
| #include "src/gpu/GrProgramInfo.h" |
| |
| // This is a common base class for shaders in the GPU tessellator. |
| class GrPathShader : public GrGeometryProcessor { |
| public: |
| GrPathShader(ClassID classID, const SkMatrix& viewMatrix, GrPrimitiveType primitiveType, |
| int tessellationPatchVertexCount) |
| : GrGeometryProcessor(classID) |
| , fViewMatrix(viewMatrix) |
| , fPrimitiveType(primitiveType) |
| , fTessellationPatchVertexCount(tessellationPatchVertexCount) { |
| if (fTessellationPatchVertexCount) { |
| this->setWillUseTessellationShaders(); |
| } |
| } |
| |
| const SkMatrix& viewMatrix() const { return fViewMatrix; } |
| GrPrimitiveType primitiveType() const { return fPrimitiveType; } |
| int tessellationPatchVertexCount() const { return fTessellationPatchVertexCount; } |
| |
| void issueDraw(GrOpFlushState* state, const GrPipeline* pipeline, |
| const GrPipeline::FixedDynamicState* fixedDynamicState, |
| sk_sp<const GrBuffer> vertexBuffer, int vertexCount, int baseVertex, |
| const SkRect& bounds) { |
| GrMesh mesh; |
| mesh.setNonIndexedNonInstanced(vertexCount); |
| mesh.setVertexData(std::move(vertexBuffer), baseVertex); |
| this->issueDraw(state, pipeline, fixedDynamicState, mesh, bounds); |
| } |
| |
| void issueDraw(GrOpFlushState* state, const GrPipeline* pipeline, |
| const GrPipeline::FixedDynamicState* fixedDynamicState, const GrMesh& mesh, |
| const SkRect& bounds) { |
| GrProgramInfo programInfo(state->proxy()->numSamples(), state->proxy()->numStencilSamples(), |
| state->proxy()->backendFormat(), state->view()->origin(), |
| pipeline, this, fixedDynamicState, nullptr, 0, |
| fPrimitiveType, fTessellationPatchVertexCount); |
| state->opsRenderPass()->draw(programInfo, &mesh, 1, bounds); |
| } |
| |
| private: |
| const SkMatrix fViewMatrix; |
| const GrPrimitiveType fPrimitiveType; |
| const int fTessellationPatchVertexCount; |
| |
| class Impl; |
| }; |
| |
| #endif |