diff options
Diffstat (limited to 'include/gpu/GrContext.h')
-rw-r--r-- | include/gpu/GrContext.h | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h index acd7b1ad91..e95f2c03df 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,18 @@ 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: 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 +440,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 +459,6 @@ private: */ static void TextBlobCacheOverBudgetCB(void* data); - // TODO see note on createTextContext - friend class SkGpuDevice; - typedef SkRefCnt INHERITED; }; |