| Index: src/gpu/effects/GrInstanceProcessor.h
|
| diff --git a/src/gpu/effects/GrInstanceProcessor.h b/src/gpu/effects/GrInstanceProcessor.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e8bf9e9d150e1a23716f91e1309076fc86966937
|
| --- /dev/null
|
| +++ b/src/gpu/effects/GrInstanceProcessor.h
|
| @@ -0,0 +1,58 @@
|
| +/*
|
| + * 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 GrInstanceProcessor_DEFINED
|
| +#define GrInstanceProcessor_DEFINED
|
| +
|
| +#include "GrBufferAccess.h"
|
| +#include "GrGeometryProcessor.h"
|
| +#include "GrInstancedRenderingTypes.h"
|
| +
|
| +/**
|
| + * 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 GrInstanceProcessor : public GrGeometryProcessor, private GrInstancedRenderingTypes {
|
| +public:
|
| + static uint32_t GetSupportedAAModes(const GrGLSLCaps&, const GrCaps&);
|
| +
|
| + GrInstanceProcessor(BatchInfo, GrBuffer* paramsBuffer);
|
| +
|
| + const char* name() const override { return "Instance Processor"; }
|
| + BatchInfo batchInfo() const { return fBatchInfo; }
|
| +
|
| + void getGLSLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder* b) const override {
|
| + b->add32(fBatchInfo.fData);
|
| + }
|
| + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrGLSLCaps&) 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 void GetIndexRangeForRect(AntialiasMode, uint32_t* firstIndex, uint32_t* count);
|
| + static void GetIndexRangeForOval(AntialiasMode, const SkRect& devBounds, uint32_t* firstIndex,
|
| + uint32_t* count);
|
| + static void GetIndexRangeForRRect(AntialiasMode, uint32_t* firstIndex, uint32_t* count);
|
| +
|
| +private:
|
| + const BatchInfo fBatchInfo;
|
| + GrBufferAccess fParamsAccess;
|
| +
|
| + typedef GrGeometryProcessor INHERITED;
|
| +};
|
| +
|
| +#endif
|
|
|