aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/GrDrawContext.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/gpu/GrDrawContext.h')
-rw-r--r--include/gpu/GrDrawContext.h45
1 files changed, 36 insertions, 9 deletions
diff --git a/include/gpu/GrDrawContext.h b/include/gpu/GrDrawContext.h
index 4b78c89f91..7e711260ce 100644
--- a/include/gpu/GrDrawContext.h
+++ b/include/gpu/GrDrawContext.h
@@ -22,14 +22,18 @@ class GrPipelineBuilder;
class GrRenderTarget;
class GrStrokeInfo;
class GrSurface;
+class GrTextContext;
+struct SkDeviceProperties;
+class SkDrawFilter;
struct SkIPoint;
struct SkIRect;
class SkMatrix;
+class SkPaint;
class SkPath;
struct SkPoint;
struct SkRect;
class SkRRect;
-
+class SkTextBlob;
/*
* A helper object to orchestrate draws
@@ -38,14 +42,28 @@ class SK_API GrDrawContext : public SkRefCnt {
public:
SK_DECLARE_INST_COUNT(GrDrawContext)
+ ~GrDrawContext() override;
+
void copySurface(GrRenderTarget* dst, GrSurface* src,
const SkIRect& srcRect, const SkIPoint& dstPoint);
- // drawText and drawPaths are thanks to the GrAtlasTextContext and the
- // GrStencilAndCoverTextContext respectively
- // TODO: remove these two
- void drawText(GrPipelineBuilder* pipelineBuilder, GrBatch* batch);
+ // TODO: it is odd that we need both the SkPaint in the following 3 methods.
+ // We should extract the text parameters from SkPaint and pass them separately
+ // akin to GrStrokeInfo (GrTextInfo?)
+ void drawText(GrRenderTarget*, const GrClip&, const GrPaint&, const SkPaint&,
+ const SkMatrix& viewMatrix, const char text[], size_t byteLength,
+ SkScalar x, SkScalar y, const SkIRect& clipBounds);
+ void drawPosText(GrRenderTarget*, const GrClip&, const GrPaint&, const SkPaint&,
+ const SkMatrix& viewMatrix, const char text[], size_t byteLength,
+ const SkScalar pos[], int scalarsPerPosition,
+ const SkPoint& offset, const SkIRect& clipBounds);
+ void drawTextBlob(GrRenderTarget*, const GrClip&, const SkPaint&,
+ const SkMatrix& viewMatrix, const SkTextBlob*,
+ SkScalar x, SkScalar y,
+ SkDrawFilter*, const SkIRect& clipBounds);
+ // drawPaths is thanks to GrStencilAndCoverTextContext
+ // TODO: remove
void drawPaths(GrPipelineBuilder* pipelineBuilder,
const GrPathProcessor* pathProc,
const GrPathRange* pathRange,
@@ -223,16 +241,17 @@ public:
private:
+ friend class GrAtlasTextContext; // for access to drawBatch
friend class GrContext; // for ctor
- GrDrawContext(GrContext* context, GrDrawTarget* drawTarget);
- ~GrDrawContext() override;
+ GrDrawContext(GrContext*, GrDrawTarget*, const SkDeviceProperties&, bool useDFT);
// Sets the paint. Returns true on success; false on failure.
bool prepareToDraw(GrPipelineBuilder*,
GrRenderTarget* rt,
const GrClip&,
const GrPaint* paint);
+ GrTextContext* createTextContext(GrRenderTarget*, const SkDeviceProperties&, bool useDFT);
// A simpler version of the above which just returns true on success; false on failure.
// Clip is *NOT* set
@@ -246,8 +265,16 @@ private:
const SkPath&,
const GrStrokeInfo&);
- GrContext* fContext; // owning context -> no ref
- GrDrawTarget* fDrawTarget;
+ // This entry point allows the GrTextContext-derived classes to add their batches to
+ // the drawTarget.
+ void drawBatch(GrPipelineBuilder* pipelineBuilder, GrBatch* batch);
+
+ GrContext* fContext; // owning context -> no ref
+ GrDrawTarget* fDrawTarget;
+ GrTextContext* fTextContext; // lazily created
+
+ SkDeviceProperties* fDevProps; // ptr b.c. SkDeviceProperties isn't public
+ bool fUseDFT;
};
#endif