Index: include/gpu/GrContext.h |
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h |
index acd7b1ad911ee3e1ce92d5f40a8e846fdc66f243..31cb4d0eb102e9a5abfac1129c78e8b1407d1d94 100644 |
--- a/include/gpu/GrContext.h |
+++ b/include/gpu/GrContext.h |
@@ -43,7 +43,6 @@ class GrTextureParams; |
class GrVertexBuffer; |
class GrStrokeInfo; |
class GrSoftwarePathRenderer; |
-class SkGpuDevice; |
class SK_API GrContext : public SkRefCnt { |
public: |
@@ -174,11 +173,16 @@ public: |
/** |
* Returns a helper object to orchestrate draws. |
+ * Callers should take a ref if they rely on the GrDrawContext sticking around. |
+ * NULL will be returned if the context has been abandoned. |
+ * |
+ * @param devProps the device properties (mainly defines text drawing) |
+ * @param uesDFT should Distance Field Text be used? |
* |
* @return a draw context |
*/ |
- GrDrawContext* drawContext() { |
- return fDrawingMgr.drawContext(); |
+ GrDrawContext* drawContext(const SkDeviceProperties* devProps = NULL, bool useDFT = false) { |
+ return fDrawingMgr.drawContext(devProps, useDFT); |
} |
/////////////////////////////////////////////////////////////////////////// |
@@ -390,15 +394,17 @@ private: |
GrContext(); // init must be called after the constructor. |
bool init(GrBackend, GrBackendContext, const GrContextOptions& options); |
- // Currently the DrawingMgr just wraps the single GrDrawTarget in a single |
- // GrDrawContext and hands it out. In the future this class will allocate |
- // a new GrDrawContext for each GrRenderTarget/GrDrawTarget and manage |
- // the DAG. |
+ // Currently the DrawingMgr stores a separate GrDrawContext for each |
+ // combination of text drawing options (pixel geometry x DFT use) |
+ // and hands the appropriate one back given the user's request. |
+ // All of the GrDrawContexts still land in the same GrDrawTarget! |
+ // |
+ // In the future this class will allocate a new GrDrawContext for |
+ // each GrRenderTarget/GrDrawTarget and manage the DAG. |
class DrawingMgr { |
public: |
- DrawingMgr() |
- : fDrawTarget(NULL) |
- , fDrawContext(NULL) { |
+ DrawingMgr() : fDrawTarget(NULL) { |
+ sk_bzero(fDrawContext, sizeof(fDrawContext)); |
} |
~DrawingMgr(); |
@@ -414,14 +420,20 @@ private: |
// Callers should take a ref if they rely on the GrDrawContext sticking around. |
// NULL will be returned if the context has been abandoned. |
- GrDrawContext* drawContext(); |
+ GrDrawContext* drawContext(const SkDeviceProperties* devProps, bool useDFT); |
private: |
+ void cleanup(); |
+ |
friend class GrContext; // for access to fDrawTarget for testing |
+ static const int kNumPixelGeometries = 5; // The different pixel geometries |
+ static const int kNumDFTOptions = 2; // DFT or no DFT |
+ |
+ GrContext* fContext; |
GrDrawTarget* fDrawTarget; |
- GrDrawContext* fDrawContext; |
+ GrDrawContext* fDrawContext[kNumPixelGeometries][kNumDFTOptions]; |
}; |
DrawingMgr fDrawingMgr; |
@@ -430,18 +442,6 @@ private: |
void initCommon(); |
/** |
- * Creates a new text rendering context that is optimal for the |
- * render target and the context. Caller assumes the ownership |
- * of the returned object. The returned object must be deleted |
- * before the context is destroyed. |
- * TODO bury this behind context! |
- */ |
- GrTextContext* createTextContext(GrRenderTarget*, |
- const SkDeviceProperties&, |
- bool enableDistanceFieldFonts); |
- |
- |
- /** |
* These functions create premul <-> unpremul effects if it is possible to generate a pair |
* of effects that make a readToUPM->writeToPM->readToUPM cycle invariant. Otherwise, they |
* return NULL. |
@@ -461,9 +461,6 @@ private: |
*/ |
static void TextBlobCacheOverBudgetCB(void* data); |
- // TODO see note on createTextContext |
- friend class SkGpuDevice; |
- |
typedef SkRefCnt INHERITED; |
}; |