| /* |
| * Copyright 2016 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef gr_instanced_InstanceProcessor_DEFINED |
| #define gr_instanced_InstanceProcessor_DEFINED |
| |
| #include "GrCaps.h" |
| #include "GrGeometryProcessor.h" |
| #include "instanced/InstancedRenderingTypes.h" |
| |
| namespace gr_instanced { |
| |
| /** |
| * This class provides a GP implementation that uses instanced rendering. Is sends geometry in as |
| * basic, pre-baked canonical shapes, and uses instanced vertex attribs to control how these shapes |
| * are transformed and drawn. MSAA is accomplished with the sample mask rather than finely |
| * tesselated geometry. |
| */ |
| class InstanceProcessor : public GrGeometryProcessor { |
| public: |
| InstanceProcessor(BatchInfo, GrBuffer* paramsBuffer); |
| |
| const char* name() const override { return "Instance Processor"; } |
| BatchInfo batchInfo() const { return fBatchInfo; } |
| |
| void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const override { |
| b->add32(fBatchInfo.fData); |
| } |
| GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; |
| |
| /** |
| * Returns a buffer of ShapeVertex that defines the canonical instanced geometry. |
| */ |
| static const GrBuffer* SK_WARN_UNUSED_RESULT FindOrCreateVertexBuffer(GrGpu*); |
| |
| /** |
| * Returns a buffer of 8-bit indices for the canonical instanced geometry. The client can call |
| * GetIndexRangeForXXX to know which indices to use for a specific shape. |
| */ |
| static const GrBuffer* SK_WARN_UNUSED_RESULT FindOrCreateIndex8Buffer(GrGpu*); |
| |
| static IndexRange GetIndexRangeForRect(AntialiasMode); |
| static IndexRange GetIndexRangeForOval(AntialiasMode, const SkRect& devBounds); |
| static IndexRange GetIndexRangeForRRect(AntialiasMode); |
| |
| static const char* GetNameOfIndexRange(IndexRange); |
| |
| private: |
| /** |
| * Called by the platform-specific instanced rendering implementation to determine the level of |
| * support this class can offer on the given GLSL platform. |
| */ |
| static GrCaps::InstancedSupport CheckSupport(const GrShaderCaps&, const GrCaps&); |
| |
| const BatchInfo fBatchInfo; |
| BufferAccess fParamsAccess; |
| |
| friend class GLInstancedRendering; // For CheckSupport. |
| |
| typedef GrGeometryProcessor INHERITED; |
| }; |
| |
| } |
| |
| #endif |