diff options
author | Chris Dalton <csmartdalton@google.com> | 2018-05-07 19:19:06 -0600 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-08 15:39:04 +0000 |
commit | d925f2d38dff377b5ef8e3f71410237de80811aa (patch) | |
tree | 77e7ec17f38b8adee98342006671b43ead437b74 /src/gpu/ccpr/GrCCPathProcessor.cpp | |
parent | 75ce242a4662d7d7b724f55806508106349b9180 (diff) |
Add a drawPaths method to GrCCPathProcessor
Bug: skia:
Change-Id: I5d3762203cbe1d823ea3f3967240bcab76651f2c
Reviewed-on: https://skia-review.googlesource.com/126662
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu/ccpr/GrCCPathProcessor.cpp')
-rw-r--r-- | src/gpu/ccpr/GrCCPathProcessor.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/gpu/ccpr/GrCCPathProcessor.cpp b/src/gpu/ccpr/GrCCPathProcessor.cpp index 55cbcaba6e..5dacc6a3b5 100644 --- a/src/gpu/ccpr/GrCCPathProcessor.cpp +++ b/src/gpu/ccpr/GrCCPathProcessor.cpp @@ -7,6 +7,7 @@ #include "GrCCPathProcessor.h" +#include "GrGpuCommandBuffer.h" #include "GrOnFlushResourceProvider.h" #include "GrTexture.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" @@ -74,11 +75,6 @@ sk_sp<const GrBuffer> GrCCPathProcessor::FindIndexBuffer(GrOnFlushResourceProvid } } -int GrCCPathProcessor::NumIndicesPerInstance(const GrCaps& caps) { - return caps.usePrimitiveRestart() ? SK_ARRAY_COUNT(kOctoIndicesAsStrips) - : SK_ARRAY_COUNT(kOctoIndicesAsTris); -} - GrCCPathProcessor::GrCCPathProcessor(GrResourceProvider* resourceProvider, sk_sp<GrTextureProxy> atlas, SkPath::FillType fillType) : INHERITED(kGrCCPathProcessor_ClassID) @@ -144,6 +140,25 @@ GrGLSLPrimitiveProcessor* GrCCPathProcessor::createGLSLInstance(const GrShaderCa return new GLSLPathProcessor(); } +void GrCCPathProcessor::drawPaths(GrOpFlushState* flushState, const GrPipeline& pipeline, + const GrBuffer* indexBuffer, const GrBuffer* vertexBuffer, + GrBuffer* instanceBuffer, int baseInstance, int endInstance, + const SkRect& bounds) const { + const GrCaps& caps = flushState->caps(); + GrPrimitiveType primitiveType = caps.usePrimitiveRestart() + ? GrPrimitiveType::kTriangleStrip + : GrPrimitiveType::kTriangles; + int numIndicesPerInstance = caps.usePrimitiveRestart() + ? SK_ARRAY_COUNT(kOctoIndicesAsStrips) + : SK_ARRAY_COUNT(kOctoIndicesAsTris); + GrMesh mesh(primitiveType); + mesh.setIndexedInstanced(indexBuffer, numIndicesPerInstance, instanceBuffer, + endInstance - baseInstance, baseInstance); + mesh.setVertexData(vertexBuffer); + + flushState->rtCommandBuffer()->draw(pipeline, *this, &mesh, nullptr, 1, bounds); +} + void GLSLPathProcessor::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { using InstanceAttribs = GrCCPathProcessor::InstanceAttribs; using Interpolation = GrGLSLVaryingHandler::Interpolation; |