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

Side by Side Diff: src/gpu/GrDrawContext.cpp

Issue 1178383003: Revert of Make GrTextContext be owned by the GrDrawContext (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrStencilAndCoverTextContext.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2015 Google Inc. 3 * Copyright 2015 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrAARectRenderer.h" 9 #include "GrAARectRenderer.h"
10 #include "GrAtlasTextContext.h"
11 #include "GrBatch.h" 10 #include "GrBatch.h"
12 #include "GrBatchTest.h" 11 #include "GrBatchTest.h"
13 #include "GrDefaultGeoProcFactory.h" 12 #include "GrDefaultGeoProcFactory.h"
14 #include "GrDrawContext.h" 13 #include "GrDrawContext.h"
15 #include "GrOvalRenderer.h" 14 #include "GrOvalRenderer.h"
16 #include "GrPathRenderer.h" 15 #include "GrPathRenderer.h"
17 #include "GrRenderTarget.h"
18 #include "GrRenderTargetPriv.h"
19 #include "GrStencilAndCoverTextContext.h"
20 16
21 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == fContext) 17 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == fContext)
22 #define RETURN_IF_ABANDONED if (!fDrawTarget) { return; } 18 #define RETURN_IF_ABANDONED if (!fDrawTarget) { return; }
23 #define RETURN_FALSE_IF_ABANDONED if (!fDrawTarget) { return false; } 19 #define RETURN_FALSE_IF_ABANDONED if (!fDrawTarget) { return false; }
24 #define RETURN_NULL_IF_ABANDONED if (!fDrawTarget) { return NULL; } 20 #define RETURN_NULL_IF_ABANDONED if (!fDrawTarget) { return NULL; }
25 21
26 class AutoCheckFlush { 22 class AutoCheckFlush {
27 public: 23 public:
28 AutoCheckFlush(GrContext* context) : fContext(context) { SkASSERT(context); } 24 AutoCheckFlush(GrContext* context) : fContext(context) { SkASSERT(context); }
29 ~AutoCheckFlush() { fContext->flushIfNecessary(); } 25 ~AutoCheckFlush() { fContext->flushIfNecessary(); }
30 26
31 private: 27 private:
32 GrContext* fContext; 28 GrContext* fContext;
33 }; 29 };
34 30
35 GrDrawContext::GrDrawContext(GrContext* context, 31 GrDrawContext::GrDrawContext(GrContext* context, GrDrawTarget* drawTarget)
36 GrDrawTarget* drawTarget,
37 const SkDeviceProperties& devProps,
38 bool useDFT)
39 : fContext(context) 32 : fContext(context)
40 , fDrawTarget(SkRef(drawTarget)) 33 , fDrawTarget(SkRef(drawTarget)) {
41 , fTextContext(NULL)
42 , fDevProps(SkNEW_ARGS(SkDeviceProperties, (devProps)))
43 , fUseDFT(useDFT) {
44 } 34 }
45 35
46 GrDrawContext::~GrDrawContext() { 36 GrDrawContext::~GrDrawContext() {
47 SkSafeUnref(fDrawTarget); 37 SkSafeUnref(fDrawTarget);
48 SkDELETE(fTextContext);
49 SkDELETE(fDevProps);
50 } 38 }
51 39
52 void GrDrawContext::copySurface(GrRenderTarget* dst, GrSurface* src, 40 void GrDrawContext::copySurface(GrRenderTarget* dst, GrSurface* src,
53 const SkIRect& srcRect, const SkIPoint& dstPoint ) { 41 const SkIRect& srcRect, const SkIPoint& dstPoint ) {
54 if (!this->prepareToDraw(dst)) { 42 if (!this->prepareToDraw(dst)) {
55 return; 43 return;
56 } 44 }
57 45
58 fDrawTarget->copySurface(dst, src, srcRect, dstPoint); 46 fDrawTarget->copySurface(dst, src, srcRect, dstPoint);
59 } 47 }
60 48
61 GrTextContext* GrDrawContext::createTextContext(GrRenderTarget* renderTarget, 49 void GrDrawContext::drawText(GrPipelineBuilder* pipelineBuilder, GrBatch* batch) {
62 const SkDeviceProperties& leakyP roperties, 50 fDrawTarget->drawBatch(pipelineBuilder, batch);
63 bool enableDistanceFieldFonts) {
64 if (fContext->caps()->shaderCaps()->pathRenderingSupport() &&
65 renderTarget->isStencilBufferMultisampled()) {
66 GrStencilAttachment* sb = renderTarget->renderTargetPriv().attachStencil Attachment();
67 if (sb) {
68 return GrStencilAndCoverTextContext::Create(fContext, this,
69 leakyProperties,
70 enableDistanceFieldFonts );
71 }
72 }
73
74 return GrAtlasTextContext::Create(fContext, this, leakyProperties, enableDis tanceFieldFonts);
75 }
76
77 void GrDrawContext::drawText(GrRenderTarget* rt, const GrClip& clip, const GrPai nt& grPaint,
78 const SkPaint& skPaint,
79 const SkMatrix& viewMatrix,
80 const char text[], size_t byteLength,
81 SkScalar x, SkScalar y, const SkIRect& clipBounds) {
82 if (!fTextContext) {
83 fTextContext = this->createTextContext(rt, *fDevProps, fUseDFT);
84 }
85
86 fTextContext->drawText(rt, clip, grPaint, skPaint, viewMatrix,
87 text, byteLength, x, y, clipBounds);
88
89 }
90 void GrDrawContext::drawPosText(GrRenderTarget* rt, const GrClip& clip, const Gr Paint& grPaint,
91 const SkPaint& skPaint,
92 const SkMatrix& viewMatrix,
93 const char text[], size_t byteLength,
94 const SkScalar pos[], int scalarsPerPosition,
95 const SkPoint& offset, const SkIRect& clipBounds ) {
96 if (!fTextContext) {
97 fTextContext = this->createTextContext(rt, *fDevProps, fUseDFT);
98 }
99
100 fTextContext->drawPosText(rt, clip, grPaint, skPaint, viewMatrix, text, byte Length,
101 pos, scalarsPerPosition, offset, clipBounds);
102
103 }
104 void GrDrawContext::drawTextBlob(GrRenderTarget* rt, const GrClip& clip, const S kPaint& skPaint,
105 const SkMatrix& viewMatrix, const SkTextBlob* b lob,
106 SkScalar x, SkScalar y,
107 SkDrawFilter* filter, const SkIRect& clipBounds ) {
108 if (!fTextContext) {
109 fTextContext = this->createTextContext(rt, *fDevProps, fUseDFT);
110 }
111
112 fTextContext->drawTextBlob(rt, clip, skPaint, viewMatrix, blob, x, y, filter , clipBounds);
113 } 51 }
114 52
115 void GrDrawContext::drawPaths(GrPipelineBuilder* pipelineBuilder, 53 void GrDrawContext::drawPaths(GrPipelineBuilder* pipelineBuilder,
116 const GrPathProcessor* pathProc, 54 const GrPathProcessor* pathProc,
117 const GrPathRange* pathRange, 55 const GrPathRange* pathRange,
118 const void* indices, 56 const void* indices,
119 int /*GrDrawTarget::PathIndexType*/ indexType, 57 int /*GrDrawTarget::PathIndexType*/ indexType,
120 const float transformValues[], 58 const float transformValues[],
121 int /*GrDrawTarget::PathTransformType*/ transformT ype, 59 int /*GrDrawTarget::PathTransformType*/ transformT ype,
122 int count, 60 int count,
(...skipping 1079 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 } 1140 }
1203 1141
1204 bool GrDrawContext::prepareToDraw(GrRenderTarget* rt) { 1142 bool GrDrawContext::prepareToDraw(GrRenderTarget* rt) {
1205 RETURN_FALSE_IF_ABANDONED 1143 RETURN_FALSE_IF_ABANDONED
1206 1144
1207 ASSERT_OWNED_RESOURCE(rt); 1145 ASSERT_OWNED_RESOURCE(rt);
1208 SkASSERT(rt); 1146 SkASSERT(rt);
1209 return true; 1147 return true;
1210 } 1148 }
1211 1149
1212 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrBatch* batch ) {
1213 fDrawTarget->drawBatch(pipelineBuilder, batch);
1214 }
1215
1216 //////////////////////////////////////////////////////////////////////////////// /////////////////// 1150 //////////////////////////////////////////////////////////////////////////////// ///////////////////
1217 1151
1218 #ifdef GR_TEST_UTILS 1152 #ifdef GR_TEST_UTILS
1219 1153
1220 BATCH_TEST_DEFINE(StrokeRectBatch) { 1154 BATCH_TEST_DEFINE(StrokeRectBatch) {
1221 StrokeRectBatch::Geometry geometry; 1155 StrokeRectBatch::Geometry geometry;
1222 geometry.fViewMatrix = GrTest::TestMatrix(random); 1156 geometry.fViewMatrix = GrTest::TestMatrix(random);
1223 geometry.fColor = GrRandomColor(random); 1157 geometry.fColor = GrRandomColor(random);
1224 geometry.fRect = GrTest::TestRect(random); 1158 geometry.fRect = GrTest::TestRect(random);
1225 geometry.fStrokeWidth = random->nextBool() ? 0.0f : 1.0f; 1159 geometry.fStrokeWidth = random->nextBool() ? 0.0f : 1.0f;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 return DrawVerticesBatch::Create(geometry, type, viewMatrix, 1267 return DrawVerticesBatch::Create(geometry, type, viewMatrix,
1334 positions.begin(), vertexCount, 1268 positions.begin(), vertexCount,
1335 indices.begin(), hasIndices ? vertexCount : 0, 1269 indices.begin(), hasIndices ? vertexCount : 0,
1336 colors.begin(), 1270 colors.begin(),
1337 texCoords.begin(), 1271 texCoords.begin(),
1338 bounds); 1272 bounds);
1339 } 1273 }
1340 1274
1341 #endif 1275 #endif
1342 1276
OLDNEW
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrStencilAndCoverTextContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698