Index: src/gpu/batches/GrTInstanceBatch.h |
diff --git a/src/gpu/batches/GrTInstanceBatch.h b/src/gpu/batches/GrTInstanceBatch.h |
deleted file mode 100644 |
index e63f2e519d6cb31dba82fb108725ac1aa95cf33d..0000000000000000000000000000000000000000 |
--- a/src/gpu/batches/GrTInstanceBatch.h |
+++ /dev/null |
@@ -1,151 +0,0 @@ |
-/* |
- * Copyright 2015 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#ifndef GrTInstanceBatch_DEFINED |
-#define GrTInstanceBatch_DEFINED |
- |
-#include "GrVertexBatch.h" |
- |
-#include "GrBatchFlushState.h" |
- |
-/** |
- * GrTInstanceBatch is an optional template to help with writing batches |
- * To use this template, The 'Impl' must define the following statics: |
- * A Geometry struct |
- * |
- * static const int kVertsPerInstance |
- * static const int kIndicesPerInstance |
- * |
- * const char* Name() |
- * |
- * void InvariantOutputCoverage(GrInitInvariantOutput* out) |
- * |
- * void SetBounds(const Geometry& seedGeometry, SkRect* outBounds) |
- * |
- * void UpdateBoundsAfterAppend(const Geometry& lastGeometry, SkRect* currentBounds) |
- * |
- * bool CanCombine(const Geometry& mine, const Geometry& theirs, |
- * const GrXPOverridesForBatch&) |
- * |
- * const GrGeometryProcessor* CreateGP(const Geometry& seedGeometry, |
- * const GrXPOverridesForBatch& overrides) |
- * |
- * const GrBuffer* GetIndexBuffer(GrResourceProvider*) |
- * |
- * Tesselate(intptr_t vertices, size_t vertexStride, const Geometry& geo, |
- * const GrXPOverridesForBatch& overrides) |
- */ |
-template <typename Impl> |
-class GrTInstanceBatch : public GrVertexBatch { |
-public: |
- DEFINE_BATCH_CLASS_ID |
- |
- typedef typename Impl::Geometry Geometry; |
- |
- static GrTInstanceBatch* Create() { return new GrTInstanceBatch; } |
- |
- const char* name() const override { return Impl::Name(); } |
- |
- SkString dumpInfo() const override { |
- SkString str; |
- str.appendf("# batched: %d\n", fGeoData.count()); |
- for (int i = 0; i < fGeoData.count(); ++i) { |
- str.append(Impl::DumpInfo(fGeoData[i], i)); |
- } |
- str.append(INHERITED::dumpInfo()); |
- return str; |
- } |
- |
- void computePipelineOptimizations(GrInitInvariantOutput* color, |
- GrInitInvariantOutput* coverage, |
- GrBatchToXPOverrides* overrides) const override { |
- // When this is called on a batch, there is only one geometry bundle |
- color->setKnownFourComponents(fGeoData[0].fColor); |
- Impl::InitInvariantOutputCoverage(coverage); |
- } |
- |
- void initBatchTracker(const GrXPOverridesForBatch& overrides) override { |
- overrides.getOverrideColorIfSet(&fGeoData[0].fColor); |
- fOverrides = overrides; |
- } |
- |
- SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
- |
- // After seeding, the client should call init() so the Batch can initialize itself |
- void init() { |
- const Geometry& geo = fGeoData[0]; |
- Impl::SetBounds(geo, &fBounds); |
- } |
- |
- void updateBoundsAfterAppend() { |
- const Geometry& geo = fGeoData.back(); |
- Impl::UpdateBoundsAfterAppend(geo, &fBounds); |
- } |
- |
-private: |
- GrTInstanceBatch() : INHERITED(ClassID()) {} |
- |
- void onPrepareDraws(Target* target) const override { |
- sk_sp<GrGeometryProcessor> gp(Impl::MakeGP(this->seedGeometry(), fOverrides)); |
- if (!gp) { |
- SkDebugf("Couldn't create GrGeometryProcessor\n"); |
- return; |
- } |
- |
- size_t vertexStride = gp->getVertexStride(); |
- int instanceCount = fGeoData.count(); |
- |
- SkAutoTUnref<const GrBuffer> indexBuffer( |
- Impl::GetIndexBuffer(target->resourceProvider())); |
- InstancedHelper helper; |
- void* vertices = helper.init(target, kTriangles_GrPrimitiveType, vertexStride, |
- indexBuffer, Impl::kVertsPerInstance, |
- Impl::kIndicesPerInstance, instanceCount); |
- if (!vertices || !indexBuffer) { |
- SkDebugf("Could not allocate vertices\n"); |
- return; |
- } |
- |
- for (int i = 0; i < instanceCount; i++) { |
- intptr_t verts = reinterpret_cast<intptr_t>(vertices) + |
- i * Impl::kVertsPerInstance * vertexStride; |
- Impl::Tesselate(verts, vertexStride, fGeoData[i], fOverrides); |
- } |
- helper.recordDraw(target, gp.get()); |
- } |
- |
- const Geometry& seedGeometry() const { return fGeoData[0]; } |
- |
- bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
- GrTInstanceBatch* that = t->cast<GrTInstanceBatch>(); |
- if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pipeline(), |
- that->bounds(), caps)) { |
- return false; |
- } |
- |
- if (!Impl::CanCombine(this->seedGeometry(), that->seedGeometry(), fOverrides)) { |
- return false; |
- } |
- |
- // In the event of two batches, one who can tweak, one who cannot, we just fall back to |
- // not tweaking |
- if (fOverrides.canTweakAlphaForCoverage() && !that->fOverrides.canTweakAlphaForCoverage()) { |
- fOverrides = that->fOverrides; |
- } |
- |
- fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()); |
- this->joinBounds(that->bounds()); |
- return true; |
- } |
- |
- GrXPOverridesForBatch fOverrides; |
- SkSTArray<1, Geometry, true> fGeoData; |
- |
- typedef GrVertexBatch INHERITED; |
-}; |
- |
-#endif |