Add way to determine at link time what path renderer will be used.
Added mechanism for a custom path renderer to punt and fallback to default path renderer
git-svn-id: http://skia.googlecode.com/svn/trunk@1005 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrContext.cpp b/gpu/src/GrContext.cpp
index a20c6be..f6009f5 100644
--- a/gpu/src/GrContext.cpp
+++ b/gpu/src/GrContext.cpp
@@ -63,7 +63,7 @@
delete fDrawBuffer;
delete fDrawBufferVBAllocPool;
delete fDrawBufferIBAllocPool;
- delete fPathRenderer;
+ GrSafeUnref(fCustomPathRenderer);
}
void GrContext::abandonAllTextures() {
@@ -546,7 +546,8 @@
if (NULL != paint.getTexture()) {
enabledStages |= 1;
}
- fPathRenderer->drawPath(target, enabledStages, path, fill, translate);
+ GrPathRenderer* pr = getPathRenderer(target, path, fill);
+ pr->drawPath(target, enabledStages, path, fill, translate);
}
void GrContext::drawPath(const GrPaint& paint,
@@ -738,9 +739,16 @@
fGpu->printStats();
}
-GrContext::GrContext(GrGpu* gpu) {
+GrContext::GrContext(GrGpu* gpu) :
+ fDefaultPathRenderer(gpu->supportsTwoSidedStencil(),
+ gpu->supportsStencilWrapOps()) {
+
fGpu = gpu;
fGpu->ref();
+
+ fCustomPathRenderer = GrPathRenderer::CreatePathRenderer();
+ fGpu->setClipPathRenderer(fCustomPathRenderer);
+
fTextureCache = new GrTextureCache(MAX_TEXTURE_CACHE_COUNT,
MAX_TEXTURE_CACHE_BYTES);
fFontCache = new GrFontCache(fGpu);
@@ -768,8 +776,6 @@
#if BATCH_RECT_TO_RECT
fDrawBuffer->setQuadIndexBuffer(this->getQuadIndexBuffer());
#endif
- fPathRenderer = new GrDefaultPathRenderer(fGpu->supportsTwoSidedStencil(),
- fGpu->supportsStencilWrapOps());
}
bool GrContext::finalizeTextureKey(GrTextureKey* key,
@@ -808,3 +814,15 @@
const GrIndexBuffer* GrContext::getQuadIndexBuffer() const {
return fGpu->getQuadIndexBuffer();
}
+
+GrPathRenderer* GrContext::getPathRenderer(const GrDrawTarget* target,
+ GrPathIter* path,
+ GrPathFill fill) {
+ if (NULL != fCustomPathRenderer &&
+ fCustomPathRenderer->canDrawPath(target, path, fill)) {
+ return fCustomPathRenderer;
+ } else {
+ GrAssert(fDefaultPathRenderer.canDrawPath(target, path, fill));
+ return &fDefaultPathRenderer;
+ }
+}