/* * 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(OpInfo, GrBuffer* paramsBuffer); const char* name() const override { return "Instance Processor"; } OpInfo opInfo() const { return fOpInfo; } void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const override { b->add32(fOpInfo.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(GrAAType); static IndexRange GetIndexRangeForOval(GrAAType, const SkRect& devBounds); static IndexRange GetIndexRangeForRRect(GrAAType); 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 OpInfo fOpInfo; BufferAccess fParamsAccess; friend class GLInstancedRendering; // For CheckSupport. typedef GrGeometryProcessor INHERITED; }; } #endif