Index: include/gpu/GrContext.h |
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h |
index e95f2c03df8c818272ae9b26c7cab1d8e94db286..acd7b1ad911ee3e1ce92d5f40a8e846fdc66f243 100644 |
--- a/include/gpu/GrContext.h |
+++ b/include/gpu/GrContext.h |
@@ -43,6 +43,7 @@ |
class GrVertexBuffer; |
class GrStrokeInfo; |
class GrSoftwarePathRenderer; |
+class SkGpuDevice; |
class SK_API GrContext : public SkRefCnt { |
public: |
@@ -173,16 +174,11 @@ |
/** |
* 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(const SkDeviceProperties* devProps = NULL, bool useDFT = false) { |
- return fDrawingMgr.drawContext(devProps, useDFT); |
+ GrDrawContext* drawContext() { |
+ return fDrawingMgr.drawContext(); |
} |
/////////////////////////////////////////////////////////////////////////// |
@@ -394,17 +390,15 @@ |
GrContext(); // init must be called after the constructor. |
bool init(GrBackend, GrBackendContext, const GrContextOptions& options); |
- // 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. |
+ // 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. |
class DrawingMgr { |
public: |
- DrawingMgr() : fDrawTarget(NULL) { |
- sk_bzero(fDrawContext, sizeof(fDrawContext)); |
+ DrawingMgr() |
+ : fDrawTarget(NULL) |
+ , fDrawContext(NULL) { |
} |
~DrawingMgr(); |
@@ -420,24 +414,32 @@ |
// 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(const SkDeviceProperties* devProps, bool useDFT); |
+ GrDrawContext* drawContext(); |
private: |
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[kNumPixelGeometries][kNumDFTOptions]; |
+ GrDrawContext* fDrawContext; |
}; |
DrawingMgr fDrawingMgr; |
void initMockContext(); |
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 |
@@ -459,6 +461,9 @@ |
*/ |
static void TextBlobCacheOverBudgetCB(void* data); |
+ // TODO see note on createTextContext |
+ friend class SkGpuDevice; |
+ |
typedef SkRefCnt INHERITED; |
}; |