Index: src/gpu/GrDrawTarget.h |
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h |
index 8706702866bcfa726b53fa2160f837e7c88599e8..cd2f43646c48448569949a5bcf18849126fa340d 100644 |
--- a/src/gpu/GrDrawTarget.h |
+++ b/src/gpu/GrDrawTarget.h |
@@ -31,9 +31,11 @@ |
class GrBatch; |
class GrClip; |
class GrDrawTargetCaps; |
+class GrIndexBufferAllocPool; |
class GrPath; |
class GrPathRange; |
class GrPipeline; |
+class GrVertexBufferAllocPool; |
class GrDrawTarget : public SkRefCnt { |
public: |
@@ -46,10 +48,22 @@ public: |
// The context may not be fully constructed and should not be used during GrDrawTarget |
// construction. |
- GrDrawTarget(GrContext* context); |
+ GrDrawTarget(GrContext* context, GrVertexBufferAllocPool*, GrIndexBufferAllocPool*); |
+ |
virtual ~GrDrawTarget() {} |
/** |
+ * Empties the draw buffer of any queued up draws. |
+ */ |
+ void reset(); |
+ |
+ /** |
+ * This plays any queued up draws to its GrGpu target. It also resets this object (i.e. flushing |
+ * is destructive). |
+ */ |
+ void flush(); |
+ |
+ /** |
* Gets the capabilities of the draw target. |
*/ |
const GrDrawTargetCaps* caps() const { return fCaps.get(); } |
@@ -301,8 +315,17 @@ protected: |
GrContext* getContext() { return fContext; } |
const GrContext* getContext() const { return fContext; } |
- // Subclass must initialize this in its constructor. |
- SkAutoTUnref<const GrDrawTargetCaps> fCaps; |
+ GrGpu* getGpu() { |
+ SkASSERT(fContext && fContext->getGpu()); |
+ return fContext->getGpu(); |
+ } |
+ const GrGpu* getGpu() const { |
+ SkASSERT(fContext && fContext->getGpu()); |
+ return fContext->getGpu(); |
+ } |
+ |
+ GrVertexBufferAllocPool* getVertexAllocPool() { return fVertexPool; } |
+ GrIndexBufferAllocPool* getIndexAllocPool() { return fIndexPool; } |
const GrTraceMarkerSet& getActiveTraceMarkers() { return fActiveTraceMarkers; } |
@@ -342,24 +365,9 @@ protected: |
void setupPipeline(const PipelineInfo& pipelineInfo, GrPipeline* pipeline); |
private: |
- /** |
- * This will be called before allocating a texture as a dst for copySurface. This function |
- * populates the dstDesc's config, flags, and origin so as to maximize efficiency and guarantee |
- * success of the copySurface call. |
- */ |
- void initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* dstDesc) { |
- if (!this->onInitCopySurfaceDstDesc(src, dstDesc)) { |
- dstDesc->fOrigin = kDefault_GrSurfaceOrigin; |
- dstDesc->fFlags = kRenderTarget_GrSurfaceFlag; |
- dstDesc->fConfig = src->config(); |
- } |
- } |
+ virtual void onReset() = 0; |
- /** Internal implementation of canCopySurface. */ |
- bool internalCanCopySurface(const GrSurface* dst, |
- const GrSurface* src, |
- const SkIRect& clippedSrcRect, |
- const SkIPoint& clippedDstRect); |
+ virtual void onFlush() = 0; |
virtual void onDrawBatch(GrBatch*, const PipelineInfo&) = 0; |
// TODO copy in order drawbuffer onDrawRect to here |
@@ -392,30 +400,13 @@ private: |
virtual void onClear(const SkIRect* rect, GrColor color, bool canIgnoreRect, |
GrRenderTarget* renderTarget) = 0; |
- /** The subclass will get a chance to copy the surface for falling back to the default |
- implementation, which simply draws a rectangle (and fails if dst isn't a render target). It |
- should assume that any clipping has already been performed on the rect and point. It won't |
- be called if the copy can be skipped. */ |
- virtual bool onCopySurface(GrSurface* dst, |
+ /** The subclass's copy surface implementation. It should assume that any clipping has already |
+ been performed on the rect and point and that the GrGpu supports the copy. */ |
+ virtual void onCopySurface(GrSurface* dst, |
GrSurface* src, |
const SkIRect& srcRect, |
const SkIPoint& dstPoint) = 0; |
- /** Indicates whether onCopySurface would succeed. It should assume that any clipping has |
- already been performed on the rect and point. It won't be called if the copy can be |
- skipped. */ |
- virtual bool onCanCopySurface(const GrSurface* dst, |
- const GrSurface* src, |
- const SkIRect& srcRect, |
- const SkIPoint& dstPoint) = 0; |
- /** |
- * This will be called before allocating a texture to be a dst for onCopySurface. Only the |
- * dstDesc's config, flags, and origin need be set by the function. If the subclass cannot |
- * create a surface that would succeed its implementation of onCopySurface, it should return |
- * false. The base class will fall back to creating a render target to draw into using the src. |
- */ |
- virtual bool onInitCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* dstDesc) = 0; |
- |
// Check to see if this set of draw commands has been sent out |
virtual bool isIssued(uint32_t drawID) { return true; } |
void getPathStencilSettingsForFilltype(GrPathRendering::FillType, |
@@ -430,10 +421,14 @@ private: |
// The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTarget. |
GrContext* fContext; |
+ SkAutoTUnref<const GrDrawTargetCaps> fCaps; |
// To keep track that we always have at least as many debug marker adds as removes |
int fGpuTraceMarkerCount; |
GrTraceMarkerSet fActiveTraceMarkers; |
GrTraceMarkerSet fStoredTraceMarkers; |
+ GrVertexBufferAllocPool* fVertexPool; |
+ GrIndexBufferAllocPool* fIndexPool; |
+ bool fFlushing; |
typedef SkRefCnt INHERITED; |
}; |
@@ -443,7 +438,10 @@ private: |
*/ |
class GrClipTarget : public GrDrawTarget { |
public: |
- GrClipTarget(GrContext* context) : INHERITED(context) { |
+ GrClipTarget(GrContext* context, |
+ GrVertexBufferAllocPool* vpool, |
+ GrIndexBufferAllocPool* ipool) |
+ : INHERITED(context, vpool, ipool) { |
fClipMaskManager.setClipTarget(this); |
} |