diff options
Diffstat (limited to 'src/gpu/batches/GrVertexBatch.h')
-rw-r--r-- | src/gpu/batches/GrVertexBatch.h | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/src/gpu/batches/GrVertexBatch.h b/src/gpu/batches/GrVertexBatch.h index 882cfa0c8d..b868962411 100644 --- a/src/gpu/batches/GrVertexBatch.h +++ b/src/gpu/batches/GrVertexBatch.h @@ -9,20 +9,25 @@ #define GrVertexBatch_DEFINED #include "GrDrawBatch.h" -#include "GrBatchTarget.h" +#include "GrPrimitiveProcessor.h" +#include "GrPendingProgramElement.h" +#include "GrVertices.h" + +#include "SkTLList.h" + +class GrBatchFlushState; /** * Base class for vertex-based GrBatches. */ class GrVertexBatch : public GrDrawBatch { public: - GrVertexBatch(); + class Target; - virtual void generateGeometry(GrBatchTarget*) = 0; + GrVertexBatch(); - // TODO this goes away when batches are everywhere - void setNumberOfDraws(int numberOfDraws) { fNumberOfDraws = numberOfDraws; } - int numberOfDraws() const { return fNumberOfDraws; } + void prepareDraws(GrBatchFlushState* state); + void issueDraws(GrBatchFlushState* state); protected: /** Helper for rendering instances using an instanced index index buffer. This class creates the @@ -32,15 +37,12 @@ protected: InstancedHelper() {} /** Returns the allocated storage for the vertices. The caller should populate the before vertices before calling issueDraws(). */ - void* init(GrBatchTarget* batchTarget, GrPrimitiveType, size_t vertexStride, + void* init(Target*, GrPrimitiveType, size_t vertexStride, const GrIndexBuffer*, int verticesPerInstance, int indicesPerInstance, int instancesToDraw); /** Call after init() to issue draws to the batch target.*/ - void issueDraw(GrBatchTarget* batchTarget) { - SkASSERT(fVertices.instanceCount()); - batchTarget->draw(fVertices); - } + void recordDraw(Target* target); private: GrVertices fVertices; }; @@ -55,16 +57,31 @@ protected: /** Finds the cached quad index buffer and reserves vertex space. Returns NULL on failure and on sucess a pointer to the vertex data that the caller should populate before calling issueDraws(). */ - void* init(GrBatchTarget* batchTarget, size_t vertexStride, int quadsToDraw); - - using InstancedHelper::issueDraw; + void* init(Target* batchTarget, size_t vertexStride, int quadsToDraw); + using InstancedHelper::recordDraw; private: typedef InstancedHelper INHERITED; }; private: - int fNumberOfDraws; + virtual void onPrepareDraws(Target*) = 0; + + // A set of contiguous draws with no inline uploads between them that all use the same + // primitive processor. All the draws in a DrawArray share a primitive processor and use the + // the batch's GrPipeline. + struct DrawArray { + SkSTArray<1, GrVertices, true> fDraws; + GrPendingProgramElement<const GrPrimitiveProcessor> fPrimitiveProcessor; + }; + + // Array of DrawArray. There may be inline uploads between each DrawArray and each DrawArray + // may use a different primitive processor. + SkTLList<DrawArray> fDrawArrays; + + // What is this? + GrBatchTracker fBatchTracker; + typedef GrDrawBatch INHERITED; }; |