Make a bunch of virtuals in GrDrawTarget and GrGpu private. Subclasses shouldn't call them directly.
R=robertphillips@google.com
Review URL: https://codereview.appspot.com/7228048
git-svn-id: http://skia.googlecode.com/svn/trunk@7413 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 70fdff9..b0bac8a 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -942,7 +942,7 @@
for (int s = drawState.getFirstCoverageStage();
!hasCoverage && s < GrDrawState::kNumStages;
++s) {
- if (this->isStageEnabled(s)) {
+ if (drawState.isStageEnabled(s)) {
hasCoverage = true;
}
}
@@ -1145,6 +1145,9 @@
}
}
+void GrDrawTarget::clipWillBeSet(const GrClipData* clipData) {
+}
+
////////////////////////////////////////////////////////////////////////////////
GrDrawTarget::AutoStateRestore::AutoStateRestore() {
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h
index a54dd0f..544cfc3 100644
--- a/src/gpu/GrDrawTarget.h
+++ b/src/gpu/GrDrawTarget.h
@@ -952,35 +952,58 @@
}
}
- bool isStageEnabled(int stageIdx) const {
- return this->getDrawState().isStageEnabled(stageIdx);
+ // allows derived class to set the caps
+ CapsInternals* capsInternals() { return &fCaps.fInternals; }
+
+ // A subclass may override this function if it wishes to be notified when the clip is changed.
+ // The override should call INHERITED::clipWillBeSet().
+ virtual void clipWillBeSet(const GrClipData* clipData);
+
+ // subclasses must call this in their destructors to ensure all vertex
+ // and index sources have been released (including those held by
+ // pushGeometrySource())
+ void releaseGeometry();
+
+ // accessors for derived classes
+ const GeometrySrcState& getGeomSrc() const { return fGeoSrcStateStack.back(); }
+ // it is preferable to call this rather than getGeomSrc()->fVertexLayout because of the assert.
+ GrVertexLayout getVertexLayout() const {
+ // the vertex layout is only valid if a vertex source has been specified.
+ GrAssert(this->getGeomSrc().fVertexSrc != kNone_GeometrySrcType);
+ return this->getGeomSrc().fVertexLayout;
}
- // A sublcass can optionally overload this function to be notified before
- // vertex and index space is reserved.
- virtual void willReserveVertexAndIndexSpace(GrVertexLayout vertexLayout,
- int vertexCount,
- int indexCount) {}
+ // Helpers for drawRect, protected so subclasses that override drawRect can use them.
+ static GrVertexLayout GetRectVertexLayout(const GrRect* srcRects[]);
+ static void SetRectVertices(const GrRect& rect,
+ const SkMatrix* matrix,
+ const GrRect* srcRects[],
+ const SkMatrix* srcMatrices[],
+ GrColor color,
+ GrVertexLayout layout,
+ void* vertices);
+
+ Caps fCaps;
+
+private:
+ // A subclass can optionally overload this function to be notified before
+ // vertex and index space is reserved.
+ virtual void willReserveVertexAndIndexSpace(GrVertexLayout,int vertexCount, int indexCount) {}
// implemented by subclass to allocate space for reserved geom
- virtual bool onReserveVertexSpace(GrVertexLayout vertexLayout,
- int vertexCount,
- void** vertices) = 0;
+ virtual bool onReserveVertexSpace(GrVertexLayout, int vertexCount, void** vertices) = 0;
virtual bool onReserveIndexSpace(int indexCount, void** indices) = 0;
// implemented by subclass to handle release of reserved geom space
virtual void releaseReservedVertexSpace() = 0;
virtual void releaseReservedIndexSpace() = 0;
// subclass must consume array contents when set
- virtual void onSetVertexSourceToArray(const void* vertexArray,
- int vertexCount) = 0;
- virtual void onSetIndexSourceToArray(const void* indexArray,
- int indexCount) = 0;
+ virtual void onSetVertexSourceToArray(const void* vertexArray, int vertexCount) = 0;
+ virtual void onSetIndexSourceToArray(const void* indexArray, int indexCount) = 0;
// subclass is notified that geom source will be set away from an array
virtual void releaseVertexArray() = 0;
virtual void releaseIndexArray() = 0;
- // subclass overrides to be notified just before geo src state
- // is pushed/popped.
+ // subclass overrides to be notified just before geo src state is pushed/popped.
virtual void geometrySourceWillPush() = 0;
virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) = 0;
// subclass called to perform drawing
@@ -994,51 +1017,6 @@
int vertexCount) = 0;
virtual void onStencilPath(const GrPath*, const SkStrokeRec& stroke, SkPath::FillType fill) = 0;
- // subclass overrides to be notified when clip is set. Must call
- // INHERITED::clipwillBeSet
- virtual void clipWillBeSet(const GrClipData* clipData) {}
-
- // Helpers for drawRect, protected so subclasses that override drawRect
- // can use them.
- static GrVertexLayout GetRectVertexLayout(const GrRect* srcRects[]);
-
- static void SetRectVertices(const GrRect& rect,
- const SkMatrix* matrix,
- const GrRect* srcRects[],
- const SkMatrix* srcMatrices[],
- GrColor color,
- GrVertexLayout layout,
- void* vertices);
-
- // accessors for derived classes
- const GeometrySrcState& getGeomSrc() const {
- return fGeoSrcStateStack.back();
- }
- // it is prefereable to call this rather than getGeomSrc()->fVertexLayout
- // because of the assert.
- GrVertexLayout getVertexLayout() const {
- // the vertex layout is only valid if a vertex source has been
- // specified.
- GrAssert(this->getGeomSrc().fVertexSrc != kNone_GeometrySrcType);
- return this->getGeomSrc().fVertexLayout;
- }
-
- // allows derived class to set the caps
- CapsInternals* capsInternals() { return &fCaps.fInternals; }
-
- const GrClipData* fClip;
-
- GrDrawState* fDrawState;
- GrDrawState fDefaultDrawState;
-
- Caps fCaps;
-
- // subclasses must call this in their destructors to ensure all vertex
- // and index sources have been released (including those held by
- // pushGeometrySource())
- void releaseGeometry();
-
-private:
// helpers for reserving vertex and index space.
bool reserveVertexSpace(GrVertexLayout vertexLayout,
int vertexCount,
@@ -1057,8 +1035,10 @@
enum {
kPreallocGeoSrcStateStackCnt = 4,
};
- SkSTArray<kPreallocGeoSrcStateStackCnt,
- GeometrySrcState, true> fGeoSrcStateStack;
+ SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcStateStack;
+ const GrClipData* fClip;
+ GrDrawState* fDrawState;
+ GrDrawState fDefaultDrawState;
typedef GrRefCnt INHERITED;
};
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
index 2eb5ad7..d2a8852 100644
--- a/src/gpu/GrGpu.cpp
+++ b/src/gpu/GrGpu.cpp
@@ -331,7 +331,7 @@
bool GrGpu::setupClipAndFlushState(DrawType type) {
- if (!fClipMaskManager.setupClipping(fClip)) {
+ if (!fClipMaskManager.setupClipping(this->getClip())) {
return false;
}
diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
index 4bc4c25..5708c1c 100644
--- a/src/gpu/GrGpu.h
+++ b/src/gpu/GrGpu.h
@@ -417,43 +417,36 @@
// constructors
bool fConfigRenderSupport[kGrPixelConfigCount];
- // GrDrawTarget overrides
- virtual bool onReserveVertexSpace(GrVertexLayout vertexLayout,
- int vertexCount,
- void** vertices) SK_OVERRIDE;
- virtual bool onReserveIndexSpace(int indexCount,
- void** indices) SK_OVERRIDE;
- virtual void releaseReservedVertexSpace() SK_OVERRIDE;
- virtual void releaseReservedIndexSpace() SK_OVERRIDE;
- virtual void onSetVertexSourceToArray(const void* vertexArray,
- int vertexCount) SK_OVERRIDE;
- virtual void onSetIndexSourceToArray(const void* indexArray,
- int indexCount) SK_OVERRIDE;
- virtual void releaseVertexArray() SK_OVERRIDE;
- virtual void releaseIndexArray() SK_OVERRIDE;
- virtual void geometrySourceWillPush() SK_OVERRIDE;
- virtual void geometrySourceWillPop(
- const GeometrySrcState& restoredState) SK_OVERRIDE;
-
// Helpers for setting up geometry state
void finalizeReservedVertices();
void finalizeReservedIndices();
+private:
+ // GrDrawTarget overrides
+ virtual bool onReserveVertexSpace(GrVertexLayout, int vertexCount, void** vertices) SK_OVERRIDE;
+ virtual bool onReserveIndexSpace(int indexCount, void** indices) SK_OVERRIDE;
+ virtual void releaseReservedVertexSpace() SK_OVERRIDE;
+ virtual void releaseReservedIndexSpace() SK_OVERRIDE;
+ virtual void onSetVertexSourceToArray(const void* vertexArray, int vertexCount) SK_OVERRIDE;
+ virtual void onSetIndexSourceToArray(const void* indexArray, int indexCount) SK_OVERRIDE;
+ virtual void releaseVertexArray() SK_OVERRIDE;
+ virtual void releaseIndexArray() SK_OVERRIDE;
+ virtual void geometrySourceWillPush() SK_OVERRIDE;
+ virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK_OVERRIDE;
+
+
// called when the 3D context state is unknown. Subclass should emit any
// assumed 3D context state and dirty any state cache.
virtual void onResetContext() = 0;
-
// overridden by backend-specific derived class to create objects.
virtual GrTexture* onCreateTexture(const GrTextureDesc& desc,
const void* srcData,
size_t rowBytes) = 0;
virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&) = 0;
virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTargetDesc&) = 0;
- virtual GrVertexBuffer* onCreateVertexBuffer(uint32_t size,
- bool dynamic) = 0;
- virtual GrIndexBuffer* onCreateIndexBuffer(uint32_t size,
- bool dynamic) = 0;
+ virtual GrVertexBuffer* onCreateVertexBuffer(uint32_t size, bool dynamic) = 0;
+ virtual GrIndexBuffer* onCreateIndexBuffer(uint32_t size, bool dynamic) = 0;
virtual GrPath* onCreatePath(const SkPath& path) = 0;
// overridden by backend-specific derived class to perform the clear and
@@ -528,36 +521,6 @@
// clears the entire stencil buffer to 0
virtual void clearStencil() = 0;
-private:
- GrContext* fContext; // not reffed (context refs gpu)
-
- ResetTimestamp fResetTimestamp;
-
- GrVertexBufferAllocPool* fVertexPool;
-
- GrIndexBufferAllocPool* fIndexPool;
-
- // counts number of uses of vertex/index pool in the geometry stack
- int fVertexPoolUseCnt;
- int fIndexPoolUseCnt;
-
- enum {
- kPreallocGeomPoolStateStackCnt = 4,
- };
- SkSTArray<kPreallocGeomPoolStateStackCnt,
- GeometryPoolState, true> fGeomPoolStateStack;
-
- mutable GrIndexBuffer* fQuadIndexBuffer; // mutable so it can be
- // created on-demand
-
- mutable GrVertexBuffer* fUnitSquareVertexBuffer; // mutable so it can be
- // created on-demand
-
- bool fContextIsDirty;
-
- typedef SkTInternalLList<GrResource> ResourceList;
- ResourceList fResourceList;
-
// Given a rt, find or create a stencil buffer and attach it
bool attachStencilBufferToRenderTarget(GrRenderTarget* target);
@@ -593,6 +556,24 @@
}
}
+ enum {
+ kPreallocGeomPoolStateStackCnt = 4,
+ };
+ typedef SkTInternalLList<GrResource> ResourceList;
+ SkSTArray<kPreallocGeomPoolStateStackCnt, GeometryPoolState, true> fGeomPoolStateStack;
+ GrContext* fContext; // not reffed
+ ResetTimestamp fResetTimestamp;
+ GrVertexBufferAllocPool* fVertexPool;
+ GrIndexBufferAllocPool* fIndexPool;
+ // counts number of uses of vertex/index pool in the geometry stack
+ int fVertexPoolUseCnt;
+ int fIndexPoolUseCnt;
+ // these are mutable so they can be created on-demand
+ mutable GrVertexBuffer* fUnitSquareVertexBuffer;
+ mutable GrIndexBuffer* fQuadIndexBuffer;
+ bool fContextIsDirty;
+ ResourceList fResourceList;
+
typedef GrDrawTarget INHERITED;
};
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
index 87ecc85..aceff2e 100644
--- a/src/gpu/GrInOrderDrawBuffer.cpp
+++ b/src/gpu/GrInOrderDrawBuffer.cpp
@@ -167,13 +167,13 @@
GrRect devClipRect;
bool isIntersectionOfRects = false;
-
- fClip->fClipStack->getConservativeBounds(-fClip->fOrigin.fX,
- -fClip->fOrigin.fY,
- drawState->getRenderTarget()->width(),
- drawState->getRenderTarget()->height(),
- &devClipRect,
- &isIntersectionOfRects);
+ const GrClipData* clip = this->getClip();
+ clip->fClipStack->getConservativeBounds(-clip->fOrigin.fX,
+ -clip->fOrigin.fY,
+ drawState->getRenderTarget()->width(),
+ drawState->getRenderTarget()->height(),
+ &devClipRect,
+ &isIntersectionOfRects);
if (isIntersectionOfRects) {
// If the clip rect touches the edge of the viewport, extended it
@@ -872,8 +872,8 @@
if (this->getDrawState().isClipState()) {
if (fClipSet &&
(fClips.empty() ||
- fClips.back() != *fClip->fClipStack ||
- fClipOrigins.back() != fClip->fOrigin)) {
+ fClips.back() != *this->getClip()->fClipStack ||
+ fClipOrigins.back() != this->getClip()->fOrigin)) {
return true;
}
}
@@ -881,8 +881,8 @@
}
void GrInOrderDrawBuffer::recordClip() {
- fClips.push_back() = *fClip->fClipStack;
- fClipOrigins.push_back() = fClip->fOrigin;
+ fClips.push_back() = *this->getClip()->fClipStack;
+ fClipOrigins.push_back() = this->getClip()->fOrigin;
fClipSet = false;
fCmds.push_back(kSetClip_Cmd);
}
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
index 35cccbd..38cc890 100644
--- a/src/gpu/GrInOrderDrawBuffer.h
+++ b/src/gpu/GrInOrderDrawBuffer.h
@@ -109,9 +109,8 @@
GrRenderTarget* renderTarget = NULL) SK_OVERRIDE;
protected:
- virtual void willReserveVertexAndIndexSpace(GrVertexLayout vertexLayout,
- int vertexCount,
- int indexCount) SK_OVERRIDE;
+ virtual void clipWillBeSet(const GrClipData* newClip) SK_OVERRIDE;
+
private:
enum Cmd {
kDraw_Cmd = 1,
@@ -173,9 +172,11 @@
virtual void releaseVertexArray() SK_OVERRIDE;
virtual void releaseIndexArray() SK_OVERRIDE;
virtual void geometrySourceWillPush() SK_OVERRIDE;
- virtual void geometrySourceWillPop(
- const GeometrySrcState& restoredState) SK_OVERRIDE;
- virtual void clipWillBeSet(const GrClipData* newClip) SK_OVERRIDE;
+ virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK_OVERRIDE;
+ virtual void willReserveVertexAndIndexSpace(GrVertexLayout vertexLayout,
+ int vertexCount,
+ int indexCount) SK_OVERRIDE;
+
// we lazily record state and clip changes in order to skip clips and states
// that have no effect.
diff --git a/src/gpu/gl/GrGpuGL.h b/src/gpu/gl/GrGpuGL.h
index fd391d8..0210c65 100644
--- a/src/gpu/gl/GrGpuGL.h
+++ b/src/gpu/gl/GrGpuGL.h
@@ -56,7 +56,7 @@
virtual void abandonResources() SK_OVERRIDE;
-protected:
+private:
// GrGpu overrides
virtual void onResetContext() SK_OVERRIDE;
@@ -120,8 +120,6 @@
int vertexCount,
int indexCount) SK_OVERRIDE;
-private:
-
const GrGLCaps& glCaps() const { return fGLContextInfo.caps(); }
// binds texture unit in GL
@@ -129,17 +127,13 @@
// binds appropriate vertex and index buffers, also returns any extra
// extra verts or indices to offset by.
- void setBuffers(bool indexed,
- int* extraVertexOffset,
- int* extraIndexOffset);
+ void setBuffers(bool indexed, int* extraVertexOffset, int* extraIndexOffset);
// Subclasses should call this to flush the blend state.
// The params should be the final coeffecients to apply
// (after any blending optimizations or dual source blending considerations
// have been accounted for).
- void flushBlend(bool isLines,
- GrBlendCoeff srcCoeff,
- GrBlendCoeff dstCoeff);
+ void flushBlend(bool isLines, GrBlendCoeff srcCoeff, GrBlendCoeff dstCoeff);
bool hasExtension(const char* ext) const {
return fGLContextInfo.hasExtension(ext);
diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp
index 7e0d0b0..b8d5f08 100644
--- a/src/gpu/gl/GrGpuGL_program.cpp
+++ b/src/gpu/gl/GrGpuGL_program.cpp
@@ -317,7 +317,7 @@
GrIRect* devRect = NULL;
GrIRect devClipBounds;
if (drawState.isClipState()) {
- fClip->getConservativeBounds(drawState.getRenderTarget(), &devClipBounds);
+ this->getClip()->getConservativeBounds(drawState.getRenderTarget(), &devClipBounds);
devRect = &devClipBounds;
}
// This must come after textures are flushed because a texture may need