Index: src/gpu/GrDrawTarget.h |
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h |
index 458e6e14a99d787d65e532c81caf0d19ec32facc..5871abfe7e6ba5e0dd81c39428dcef6e410772a1 100644 |
--- a/src/gpu/GrDrawTarget.h |
+++ b/src/gpu/GrDrawTarget.h |
@@ -224,152 +224,6 @@ public: |
virtual DrawToken getCurrentDrawToken() { return DrawToken(this, 0); } |
- /** |
- * Used to communicate draw index vertex offsets and counts toto GPUs / subclasses |
- */ |
- class DrawInfo { |
- public: |
- DrawInfo() {} |
- DrawInfo(const DrawInfo& di) { (*this) = di; } |
- DrawInfo& operator =(const DrawInfo& di); |
- |
- void init(GrPrimitiveType primType, const GrVertexBuffer* vertexBuffer, int startVertex, |
- int vertexCount) { |
- SkASSERT(vertexBuffer); |
- SkASSERT(vertexCount); |
- SkASSERT(startVertex >= 0); |
- fPrimitiveType = primType; |
- fVertexBuffer.reset(SkRef(vertexBuffer)); |
- fIndexBuffer.reset(NULL); |
- fStartVertex = startVertex; |
- fStartIndex = 0; |
- fVertexCount = vertexCount; |
- fIndexCount = 0; |
- fInstanceCount = 0; |
- fVerticesPerInstance = 0; |
- fIndicesPerInstance = 0; |
- } |
- |
- void initIndexed(GrPrimitiveType primType, |
- const GrVertexBuffer* vertexBuffer, |
- const GrIndexBuffer* indexBuffer, |
- int startVertex, |
- int startIndex, |
- int vertexCount, |
- int indexCount) { |
- SkASSERT(indexBuffer); |
- SkASSERT(vertexBuffer); |
- SkASSERT(indexCount); |
- SkASSERT(vertexCount); |
- SkASSERT(startIndex >= 0); |
- SkASSERT(startVertex >= 0); |
- fPrimitiveType = primType; |
- fVertexBuffer.reset(SkRef(vertexBuffer)); |
- fIndexBuffer.reset(SkRef(indexBuffer)); |
- fStartVertex = startVertex; |
- fStartIndex = startIndex; |
- fVertexCount = vertexCount; |
- fIndexCount = indexCount; |
- fInstanceCount = 0; |
- fVerticesPerInstance = 0; |
- fIndicesPerInstance = 0; |
- } |
- |
- void initInstanced(GrPrimitiveType primType, |
- const GrVertexBuffer* vertexBuffer, |
- const GrIndexBuffer* indexBuffer, |
- int startVertex, |
- int verticesPerInstance, |
- int indicesPerInstance, |
- int instanceCount) { |
- SkASSERT(vertexBuffer); |
- SkASSERT(indexBuffer); |
- SkASSERT(instanceCount); |
- SkASSERT(verticesPerInstance); |
- SkASSERT(indicesPerInstance); |
- SkASSERT(startVertex >= 0); |
- fPrimitiveType = primType; |
- fVertexBuffer.reset(SkRef(vertexBuffer)); |
- fIndexBuffer.reset(SkRef(indexBuffer)); |
- fStartVertex = startVertex; |
- fStartIndex = 0; |
- fVerticesPerInstance = verticesPerInstance; |
- fIndicesPerInstance = indicesPerInstance; |
- fInstanceCount = instanceCount; |
- fVertexCount = instanceCount * fVerticesPerInstance; |
- fIndexCount = instanceCount * fIndicesPerInstance; |
- } |
- |
- /** Variation of the above that may be used when the total number of instances may exceed |
- the number of instances supported by the index buffer. To be used with |
- nextInstances() to draw in max-sized batches.*/ |
- void initInstanced(GrPrimitiveType primType, |
- const GrVertexBuffer* vertexBuffer, |
- const GrIndexBuffer* indexBuffer, |
- int startVertex, |
- int verticesPerInstance, |
- int indicesPerInstance, |
- int* instancesRemaining, |
- int maxInstancesPerDraw) { |
- int instanceCount = SkTMin(*instancesRemaining, maxInstancesPerDraw); |
- *instancesRemaining -= instanceCount; |
- this->initInstanced(primType, vertexBuffer, indexBuffer, startVertex, |
- verticesPerInstance, indicesPerInstance, instanceCount); |
- } |
- |
- GrPrimitiveType primitiveType() const { return fPrimitiveType; } |
- int startVertex() const { return fStartVertex; } |
- int startIndex() const { return fStartIndex; } |
- int vertexCount() const { return fVertexCount; } |
- int indexCount() const { return fIndexCount; } |
- |
- /** These return 0 if initInstanced was not used to initialize the DrawInfo. */ |
- int verticesPerInstance() const { return fVerticesPerInstance; } |
- int indicesPerInstance() const { return fIndicesPerInstance; } |
- int instanceCount() const { return fInstanceCount; } |
- |
- bool isIndexed() const { return fIndexCount > 0; } |
- bool isInstanced() const { return fInstanceCount > 0; } |
- |
- /** Called after using this draw info to draw the next set of instances. |
- The vertex offset is advanced while the index buffer is reused at the same |
- position. instancesRemaining is number of instances that remain, maxInstances is |
- the most number of instances that can be used with the index buffer. If there |
- are no instances remaining, the DrawInfo is unmodified and false is returned.*/ |
- bool nextInstances(int* instancesRemaining, int maxInstances) { |
- SkASSERT(this->isInstanced()); |
- if (!*instancesRemaining) { |
- return false; |
- } |
- fStartVertex += fVertexCount; |
- fInstanceCount = SkTMin(*instancesRemaining, maxInstances); |
- fVertexCount = fInstanceCount * fVerticesPerInstance; |
- fIndexCount = fInstanceCount * fIndicesPerInstance; |
- *instancesRemaining -= fInstanceCount; |
- return true; |
- } |
- |
- const GrVertexBuffer* vertexBuffer() const { return fVertexBuffer.get(); } |
- const GrIndexBuffer* indexBuffer() const { return fIndexBuffer.get(); } |
- |
- private: |
- friend class GrDrawTarget; |
- |
- GrPrimitiveType fPrimitiveType; |
- |
- int fStartVertex; |
- int fStartIndex; |
- int fVertexCount; |
- int fIndexCount; |
- |
- int fInstanceCount; |
- int fVerticesPerInstance; |
- int fIndicesPerInstance; |
- |
- GrPendingIOResource<const GrVertexBuffer, kRead_GrIOType> fVertexBuffer; |
- GrPendingIOResource<const GrIndexBuffer, kRead_GrIOType> fIndexBuffer; |
- }; |
- |
bool programUnitTest(int maxStages); |
protected: |