Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Unified Diff: include/gpu/GrContext.h

Issue 1151283004: Split drawing functionality out of GrContext and into new GrDrawContext (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix no-GPU builds Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gyp/gpu.gypi ('k') | include/gpu/GrDrawContext.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/gpu/GrContext.h
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h
index b6fef3d80c3baca0d156776b9d3ebeb44137fbef..2167513d2eb7cd51c60b87eec4e2dff036ba9034 100644
--- a/include/gpu/GrContext.h
+++ b/include/gpu/GrContext.h
@@ -21,6 +21,7 @@
class GrAARectRenderer;
class GrBatchFontCache;
struct GrContextOptions;
+class GrDrawContext;
class GrDrawTarget;
class GrFragmentProcessor;
class GrGpu;
@@ -158,6 +159,11 @@ public:
/// Texture and Render Target Queries
/**
+ * Are shader derivatives supported?
+ */
+ bool shaderDerivativeSupport() const;
+
+ /**
* Can the provided configuration act as a texture?
*/
bool isConfigTexturable(GrPixelConfig) const;
@@ -211,167 +217,14 @@ public:
*/
int getRecommendedSampleCount(GrPixelConfig config, SkScalar dpi) const;
- ///////////////////////////////////////////////////////////////////////////
- // Draws
-
/**
- * Clear the entire or rect of the render target, ignoring any clips.
- * @param rect the rect to clear or the whole thing if rect is NULL.
- * @param color the color to clear to.
- * @param canIgnoreRect allows partial clears to be converted to whole
- * clears on platforms for which that is cheap
- * @param target The render target to clear.
- */
- void clear(const SkIRect* rect, GrColor color, bool canIgnoreRect, GrRenderTarget* target);
-
- /**
- * Draw everywhere (respecting the clip) with the paint.
- */
- void drawPaint(GrRenderTarget*, const GrClip&, const GrPaint&, const SkMatrix& viewMatrix);
-
- /**
- * Draw the rect using a paint.
- * @param paint describes how to color pixels.
- * @param viewMatrix transformation matrix
- * @param strokeInfo the stroke information (width, join, cap), and.
- * the dash information (intervals, count, phase).
- * If strokeInfo == NULL, then the rect is filled.
- * Otherwise, if stroke width == 0, then the stroke
- * is always a single pixel thick, else the rect is
- * mitered/beveled stroked based on stroke width.
- * The rects coords are used to access the paint (through texture matrix)
- */
- void drawRect(GrRenderTarget*,
- const GrClip&,
- const GrPaint& paint,
- const SkMatrix& viewMatrix,
- const SkRect&,
- const GrStrokeInfo* strokeInfo = NULL);
-
- /**
- * Maps a rectangle of shader coordinates to a rectangle and draws that rectangle
- *
- * @param paint describes how to color pixels.
- * @param viewMatrix transformation matrix which applies to rectToDraw
- * @param rectToDraw the rectangle to draw
- * @param localRect the rectangle of shader coordinates applied to rectToDraw
- * @param localMatrix an optional matrix to transform the shader coordinates before applying
- * to rectToDraw
- */
- void drawNonAARectToRect(GrRenderTarget*,
- const GrClip&,
- const GrPaint& paint,
- const SkMatrix& viewMatrix,
- const SkRect& rectToDraw,
- const SkRect& localRect,
- const SkMatrix* localMatrix = NULL);
-
- /**
- * Draws a non-AA rect with paint and a localMatrix
- */
- void drawNonAARectWithLocalMatrix(GrRenderTarget* rt,
- const GrClip& clip,
- const GrPaint& paint,
- const SkMatrix& viewMatrix,
- const SkRect& rect,
- const SkMatrix& localMatrix) {
- this->drawNonAARectToRect(rt, clip, paint, viewMatrix, rect, rect, &localMatrix);
- }
-
- /**
- * Draw a roundrect using a paint.
- *
- * @param paint describes how to color pixels.
- * @param viewMatrix transformation matrix
- * @param rrect the roundrect to draw
- * @param strokeInfo the stroke information (width, join, cap) and
- * the dash information (intervals, count, phase).
- */
- void drawRRect(GrRenderTarget*,
- const GrClip&,
- const GrPaint&,
- const SkMatrix& viewMatrix,
- const SkRRect& rrect,
- const GrStrokeInfo&);
-
- /**
- * Shortcut for drawing an SkPath consisting of nested rrects using a paint.
- * Does not support stroking. The result is undefined if outer does not contain
- * inner.
+ * Returns a helper object to orchestrate draws.
*
- * @param paint describes how to color pixels.
- * @param viewMatrix transformation matrix
- * @param outer the outer roundrect
- * @param inner the inner roundrect
- */
- void drawDRRect(GrRenderTarget*,
- const GrClip&,
- const GrPaint&,
- const SkMatrix& viewMatrix,
- const SkRRect& outer,
- const SkRRect& inner);
-
-
- /**
- * Draws a path.
- *
- * @param paint describes how to color pixels.
- * @param viewMatrix transformation matrix
- * @param path the path to draw
- * @param strokeInfo the stroke information (width, join, cap) and
- * the dash information (intervals, count, phase).
+ * @return a draw context
*/
- void drawPath(GrRenderTarget*,
- const GrClip&,
- const GrPaint&,
- const SkMatrix& viewMatrix,
- const SkPath&,
- const GrStrokeInfo&);
-
- /**
- * Draws vertices with a paint.
- *
- * @param paint describes how to color pixels.
- * @param viewMatrix transformation matrix
- * @param primitiveType primitives type to draw.
- * @param vertexCount number of vertices.
- * @param positions array of vertex positions, required.
- * @param texCoords optional array of texture coordinates used
- * to access the paint.
- * @param colors optional array of per-vertex colors, supercedes
- * the paint's color field.
- * @param indices optional array of indices. If NULL vertices
- * are drawn non-indexed.
- * @param indexCount if indices is non-null then this is the
- * number of indices.
- */
- void drawVertices(GrRenderTarget*,
- const GrClip&,
- const GrPaint& paint,
- const SkMatrix& viewMatrix,
- GrPrimitiveType primitiveType,
- int vertexCount,
- const SkPoint positions[],
- const SkPoint texs[],
- const GrColor colors[],
- const uint16_t indices[],
- int indexCount);
-
- /**
- * Draws an oval.
- *
- * @param paint describes how to color pixels.
- * @param viewMatrix transformation matrix
- * @param oval the bounding rect of the oval.
- * @param strokeInfo the stroke information (width, join, cap) and
- * the dash information (intervals, count, phase).
- */
- void drawOval(GrRenderTarget*,
- const GrClip&,
- const GrPaint& paint,
- const SkMatrix& viewMatrix,
- const SkRect& oval,
- const GrStrokeInfo& strokeInfo);
+ GrDrawContext* drawContext() {
+ return fDrawingMgr.drawContext();
+ }
///////////////////////////////////////////////////////////////////////////
// Misc.
@@ -397,6 +250,12 @@ public:
*/
void flush(int flagsBitfield = 0);
+ void flushIfNecessary() {
+ if (fFlushToReduceCacheSize) {
+ this->flush();
+ }
+ }
+
/**
* These flags can be used with the read/write pixels functions below.
*/
@@ -500,12 +359,6 @@ public:
void prepareSurfaceForExternalRead(GrSurface*);
/**
- * Provides a perfomance hint that the render target's contents are allowed
- * to become undefined.
- */
- void discardRenderTarget(GrRenderTarget*);
-
- /**
* An ID associated with this context, guaranteed to be unique.
*/
uint32_t uniqueID() { return fUniqueID; }
@@ -517,8 +370,7 @@ public:
GrBatchFontCache* getBatchFontCache() { return fBatchFontCache; }
GrLayerCache* getLayerCache() { return fLayerCache.get(); }
GrTextBlobCache* getTextBlobCache() { return fTextBlobCache; }
- GrDrawTarget* getTextTarget();
- GrAARectRenderer* getAARectRenderer() { return fAARectRenderer; }
+ bool abandoned() const { return fDrawingMgr.abandoned(); }
GrResourceProvider* resourceProvider() { return fResourceProvider; }
const GrResourceProvider* resourceProvider() const { return fResourceProvider; }
GrResourceCache* getResourceCache() { return fResourceCache; }
@@ -564,13 +416,8 @@ private:
GrPathRendererChain* fPathRendererChain;
GrSoftwarePathRenderer* fSoftwarePathRenderer;
- GrDrawTarget* fDrawBuffer;
-
// Set by OverbudgetCB() to request that GrContext flush before exiting a draw.
bool fFlushToReduceCacheSize;
- GrAARectRenderer* fAARectRenderer;
- GrOvalRenderer* fOvalRenderer;
-
bool fDidTestPMConversions;
int fPMToUPMConversion;
int fUPMToPMConversion;
@@ -588,28 +435,46 @@ 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.
+ class DrawingMgr {
+ public:
+ DrawingMgr()
+ : fDrawTarget(NULL)
+ , fDrawContext(NULL) {
+ }
+
+ ~DrawingMgr();
+
+ void init(GrContext* context);
+
+ void abandon();
+ bool abandoned() const { return NULL == fDrawTarget; }
+
+ void purgeResources();
+ void reset();
+ void flush();
+
+ // 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();
+
+ private:
+ friend class GrContext; // for access to fDrawTarget for testing
+
+ GrDrawTarget* fDrawTarget;
+
+ GrDrawContext* fDrawContext;
+ };
+
+ DrawingMgr fDrawingMgr;
+
void initMockContext();
void initCommon();
- class AutoCheckFlush;
- // Sets the paint and returns the target to draw into.
- GrDrawTarget* prepareToDraw(GrPipelineBuilder*,
- GrRenderTarget* rt,
- const GrClip&,
- const GrPaint* paint,
- const AutoCheckFlush*);
-
- // A simpler version of the above which just returns the draw target. Clip is *NOT* set
- GrDrawTarget* prepareToDraw();
-
- void internalDrawPath(GrDrawTarget*,
- GrPipelineBuilder*,
- const SkMatrix& viewMatrix,
- GrColor,
- bool useAA,
- const SkPath&,
- const GrStrokeInfo&);
-
/**
* Creates a new text rendering context that is optimal for the
* render target and the context. Caller assumes the ownership
« no previous file with comments | « gyp/gpu.gypi ('k') | include/gpu/GrDrawContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698