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

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

Issue 1229143007: Start to propagate constness of GrPipelineBuilder up the stack (Closed) Base URL: https://skia.googlesource.com/skia.git@const-fix
Patch Set: rebase Created 5 years, 5 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/GrDefaultPathRenderer.cpp ('k') | src/gpu/GrDrawTarget.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" 10 #include "GrAtlasTextContext.h"
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 109
110 void GrDrawContext::drawPaths(GrPipelineBuilder* pipelineBuilder, 110 void GrDrawContext::drawPaths(GrPipelineBuilder* pipelineBuilder,
111 const GrPathProcessor* pathProc, 111 const GrPathProcessor* pathProc,
112 const GrPathRange* pathRange, 112 const GrPathRange* pathRange,
113 const void* indices, 113 const void* indices,
114 int /*GrDrawTarget::PathIndexType*/ indexType, 114 int /*GrDrawTarget::PathIndexType*/ indexType,
115 const float transformValues[], 115 const float transformValues[],
116 int /*GrDrawTarget::PathTransformType*/ transformT ype, 116 int /*GrDrawTarget::PathTransformType*/ transformT ype,
117 int count, 117 int count,
118 int /*GrPathRendering::FillType*/ fill) { 118 int /*GrPathRendering::FillType*/ fill) {
119 fDrawTarget->drawPaths(pipelineBuilder, pathProc, pathRange, 119 fDrawTarget->drawPaths(*pipelineBuilder, pathProc, pathRange,
120 indices, (GrDrawTarget::PathIndexType) indexType, 120 indices, (GrDrawTarget::PathIndexType) indexType,
121 transformValues, 121 transformValues,
122 (GrDrawTarget::PathTransformType) transformType, 122 (GrDrawTarget::PathTransformType) transformType,
123 count, (GrPathRendering::FillType) fill); 123 count, (GrPathRendering::FillType) fill);
124 } 124 }
125 125
126 void GrDrawContext::discard(GrRenderTarget* renderTarget) { 126 void GrDrawContext::discard(GrRenderTarget* renderTarget) {
127 RETURN_IF_ABANDONED 127 RETURN_IF_ABANDONED
128 SkASSERT(renderTarget); 128 SkASSERT(renderTarget);
129 AutoCheckFlush acf(fContext); 129 AutoCheckFlush acf(fContext);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 SkDebugf("Could not invert matrix\n"); 185 SkDebugf("Could not invert matrix\n");
186 return; 186 return;
187 } 187 }
188 188
189 AutoCheckFlush acf(fContext); 189 AutoCheckFlush acf(fContext);
190 if (!this->prepareToDraw(rt)) { 190 if (!this->prepareToDraw(rt)) {
191 return; 191 return;
192 } 192 }
193 193
194 GrPipelineBuilder pipelineBuilder(*paint, rt, clip); 194 GrPipelineBuilder pipelineBuilder(*paint, rt, clip);
195 fDrawTarget->drawBWRect(&pipelineBuilder, 195 fDrawTarget->drawBWRect(pipelineBuilder,
196 paint->getColor(), 196 paint->getColor(),
197 SkMatrix::I(), 197 SkMatrix::I(),
198 r, 198 r,
199 NULL, 199 NULL,
200 &localMatrix); 200 &localMatrix);
201 } 201 }
202 } 202 }
203 203
204 static inline bool is_irect(const SkRect& r) { 204 static inline bool is_irect(const SkRect& r) {
205 return SkScalarIsInt(r.fLeft) && SkScalarIsInt(r.fTop) && 205 return SkScalarIsInt(r.fLeft) && SkScalarIsInt(r.fTop) &&
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 GrColor color = paint.getColor(); 480 GrColor color = paint.getColor();
481 SkRect devBoundRect; 481 SkRect devBoundRect;
482 bool needAA = paint.isAntiAlias() && 482 bool needAA = paint.isAntiAlias() &&
483 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled(); 483 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled();
484 bool doAA = needAA && apply_aa_to_rect(fDrawTarget, &pipelineBuilder, &devBo undRect, rect, 484 bool doAA = needAA && apply_aa_to_rect(fDrawTarget, &pipelineBuilder, &devBo undRect, rect,
485 width, viewMatrix, color); 485 width, viewMatrix, color);
486 486
487 if (doAA) { 487 if (doAA) {
488 if (width >= 0) { 488 if (width >= 0) {
489 GrAARectRenderer::StrokeAARect(fDrawTarget, 489 GrAARectRenderer::StrokeAARect(fDrawTarget,
490 &pipelineBuilder, 490 pipelineBuilder,
491 color, 491 color,
492 viewMatrix, 492 viewMatrix,
493 rect, 493 rect,
494 devBoundRect, 494 devBoundRect,
495 *strokeInfo); 495 *strokeInfo);
496 } else { 496 } else {
497 // filled AA rect 497 // filled AA rect
498 GrAARectRenderer::FillAARect(fDrawTarget, 498 GrAARectRenderer::FillAARect(fDrawTarget,
499 &pipelineBuilder, 499 pipelineBuilder,
500 color, 500 color,
501 viewMatrix, 501 viewMatrix,
502 rect, 502 rect,
503 devBoundRect); 503 devBoundRect);
504 } 504 }
505 return; 505 return;
506 } 506 }
507 507
508 if (width >= 0) { 508 if (width >= 0) {
509 StrokeRectBatch::Geometry geometry; 509 StrokeRectBatch::Geometry geometry;
510 geometry.fViewMatrix = viewMatrix; 510 geometry.fViewMatrix = viewMatrix;
511 geometry.fColor = color; 511 geometry.fColor = color;
512 geometry.fRect = rect; 512 geometry.fRect = rect;
513 geometry.fStrokeWidth = width; 513 geometry.fStrokeWidth = width;
514 514
515 // Non-AA hairlines are snapped to pixel centers to make which pixels ar e hit deterministic 515 // Non-AA hairlines are snapped to pixel centers to make which pixels ar e hit deterministic
516 bool snapToPixelCenters = (0 == width && !rt->isUnifiedMultisampled()); 516 bool snapToPixelCenters = (0 == width && !rt->isUnifiedMultisampled());
517 SkAutoTUnref<GrBatch> batch(StrokeRectBatch::Create(geometry, snapToPixe lCenters)); 517 SkAutoTUnref<GrBatch> batch(StrokeRectBatch::Create(geometry, snapToPixe lCenters));
518 518
519 // Depending on sub-pixel coordinates and the particular GPU, we may los e a corner of 519 // Depending on sub-pixel coordinates and the particular GPU, we may los e a corner of
520 // hairline rects. We jam all the vertices to pixel centers to avoid thi s, but not when MSAA 520 // hairline rects. We jam all the vertices to pixel centers to avoid thi s, but not when MSAA
521 // is enabled because it can cause ugly artifacts. 521 // is enabled because it can cause ugly artifacts.
522 pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_ Flag, 522 pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_ Flag,
523 snapToPixelCenters); 523 snapToPixelCenters);
524 fDrawTarget->drawBatch(&pipelineBuilder, batch); 524 fDrawTarget->drawBatch(pipelineBuilder, batch);
525 } else { 525 } else {
526 // filled BW rect 526 // filled BW rect
527 fDrawTarget->drawSimpleRect(&pipelineBuilder, color, viewMatrix, rect); 527 fDrawTarget->drawSimpleRect(pipelineBuilder, color, viewMatrix, rect);
528 } 528 }
529 } 529 }
530 530
531 void GrDrawContext::drawNonAARectToRect(GrRenderTarget* rt, 531 void GrDrawContext::drawNonAARectToRect(GrRenderTarget* rt,
532 const GrClip& clip, 532 const GrClip& clip,
533 const GrPaint& paint, 533 const GrPaint& paint,
534 const SkMatrix& viewMatrix, 534 const SkMatrix& viewMatrix,
535 const SkRect& rectToDraw, 535 const SkRect& rectToDraw,
536 const SkRect& localRect, 536 const SkRect& localRect,
537 const SkMatrix* localMatrix) { 537 const SkMatrix* localMatrix) {
538 RETURN_IF_ABANDONED 538 RETURN_IF_ABANDONED
539 AutoCheckFlush acf(fContext); 539 AutoCheckFlush acf(fContext);
540 if (!this->prepareToDraw(rt)) { 540 if (!this->prepareToDraw(rt)) {
541 return; 541 return;
542 } 542 }
543 543
544 GrPipelineBuilder pipelineBuilder(paint, rt, clip); 544 GrPipelineBuilder pipelineBuilder(paint, rt, clip);
545 fDrawTarget->drawBWRect(&pipelineBuilder, 545 fDrawTarget->drawBWRect(pipelineBuilder,
546 paint.getColor(), 546 paint.getColor(),
547 viewMatrix, 547 viewMatrix,
548 rectToDraw, 548 rectToDraw,
549 &localRect, 549 &localRect,
550 localMatrix); 550 localMatrix);
551 } 551 }
552 552
553 static const GrGeometryProcessor* set_vertex_attributes(bool hasLocalCoords, 553 static const GrGeometryProcessor* set_vertex_attributes(bool hasLocalCoords,
554 bool hasColors, 554 bool hasColors,
555 int* colorOffset, 555 int* colorOffset,
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 bounds.outset(0.5f, 0.5f); 854 bounds.outset(0.5f, 0.5f);
855 } 855 }
856 856
857 DrawVerticesBatch::Geometry geometry; 857 DrawVerticesBatch::Geometry geometry;
858 geometry.fColor = paint.getColor(); 858 geometry.fColor = paint.getColor();
859 SkAutoTUnref<GrBatch> batch(DrawVerticesBatch::Create(geometry, primitiveTyp e, viewMatrix, 859 SkAutoTUnref<GrBatch> batch(DrawVerticesBatch::Create(geometry, primitiveTyp e, viewMatrix,
860 positions, vertexCount , indices, 860 positions, vertexCount , indices,
861 indexCount, colors, te xCoords, 861 indexCount, colors, te xCoords,
862 bounds)); 862 bounds));
863 863
864 fDrawTarget->drawBatch(&pipelineBuilder, batch); 864 fDrawTarget->drawBatch(pipelineBuilder, batch);
865 } 865 }
866 866
867 /////////////////////////////////////////////////////////////////////////////// 867 ///////////////////////////////////////////////////////////////////////////////
868 868
869 void GrDrawContext::drawRRect(GrRenderTarget*rt, 869 void GrDrawContext::drawRRect(GrRenderTarget*rt,
870 const GrClip& clip, 870 const GrClip& clip,
871 const GrPaint& paint, 871 const GrPaint& paint,
872 const SkMatrix& viewMatrix, 872 const SkMatrix& viewMatrix,
873 const SkRRect& rrect, 873 const SkRRect& rrect,
874 const GrStrokeInfo& strokeInfo) { 874 const GrStrokeInfo& strokeInfo) {
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 GrPipelineBuilder pipelineBuilder(paint, rt, clip); 1068 GrPipelineBuilder pipelineBuilder(paint, rt, clip);
1069 if (!strokeInfo.isDashed()) { 1069 if (!strokeInfo.isDashed()) {
1070 bool useCoverageAA = paint.isAntiAlias() && 1070 bool useCoverageAA = paint.isAntiAlias() &&
1071 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled(); 1071 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled();
1072 1072
1073 if (useCoverageAA && strokeInfo.getWidth() < 0 && !path.isConvex()) { 1073 if (useCoverageAA && strokeInfo.getWidth() < 0 && !path.isConvex()) {
1074 // Concave AA paths are expensive - try to avoid them for special ca ses 1074 // Concave AA paths are expensive - try to avoid them for special ca ses
1075 SkRect rects[2]; 1075 SkRect rects[2];
1076 1076
1077 if (is_nested_rects(viewMatrix, path, strokeInfo, rects)) { 1077 if (is_nested_rects(viewMatrix, path, strokeInfo, rects)) {
1078 GrAARectRenderer::FillAANestedRects(fDrawTarget, &pipelineBuilde r, color, 1078 GrAARectRenderer::FillAANestedRects(fDrawTarget, pipelineBuilder , color,
1079 viewMatrix, rects); 1079 viewMatrix, rects);
1080 return; 1080 return;
1081 } 1081 }
1082 } 1082 }
1083 SkRect ovalRect; 1083 SkRect ovalRect;
1084 bool isOval = path.isOval(&ovalRect); 1084 bool isOval = path.isOval(&ovalRect);
1085 1085
1086 if (isOval && !path.isInverseFillType()) { 1086 if (isOval && !path.isInverseFillType()) {
1087 if (GrOvalRenderer::DrawOval(fDrawTarget, 1087 if (GrOvalRenderer::DrawOval(fDrawTarget,
1088 &pipelineBuilder, 1088 &pipelineBuilder,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 1181
1182 bool GrDrawContext::prepareToDraw(GrRenderTarget* rt) { 1182 bool GrDrawContext::prepareToDraw(GrRenderTarget* rt) {
1183 RETURN_FALSE_IF_ABANDONED 1183 RETURN_FALSE_IF_ABANDONED
1184 1184
1185 ASSERT_OWNED_RESOURCE(rt); 1185 ASSERT_OWNED_RESOURCE(rt);
1186 SkASSERT(rt); 1186 SkASSERT(rt);
1187 return true; 1187 return true;
1188 } 1188 }
1189 1189
1190 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrBatch* batch ) { 1190 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrBatch* batch ) {
1191 fDrawTarget->drawBatch(pipelineBuilder, batch); 1191 fDrawTarget->drawBatch(*pipelineBuilder, batch);
1192 } 1192 }
1193 1193
1194 //////////////////////////////////////////////////////////////////////////////// /////////////////// 1194 //////////////////////////////////////////////////////////////////////////////// ///////////////////
1195 1195
1196 #ifdef GR_TEST_UTILS 1196 #ifdef GR_TEST_UTILS
1197 1197
1198 BATCH_TEST_DEFINE(StrokeRectBatch) { 1198 BATCH_TEST_DEFINE(StrokeRectBatch) {
1199 StrokeRectBatch::Geometry geometry; 1199 StrokeRectBatch::Geometry geometry;
1200 geometry.fViewMatrix = GrTest::TestMatrix(random); 1200 geometry.fViewMatrix = GrTest::TestMatrix(random);
1201 geometry.fColor = GrRandomColor(random); 1201 geometry.fColor = GrRandomColor(random);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1311 return DrawVerticesBatch::Create(geometry, type, viewMatrix, 1311 return DrawVerticesBatch::Create(geometry, type, viewMatrix,
1312 positions.begin(), vertexCount, 1312 positions.begin(), vertexCount,
1313 indices.begin(), hasIndices ? vertexCount : 0, 1313 indices.begin(), hasIndices ? vertexCount : 0,
1314 colors.begin(), 1314 colors.begin(),
1315 texCoords.begin(), 1315 texCoords.begin(),
1316 bounds); 1316 bounds);
1317 } 1317 }
1318 1318
1319 #endif 1319 #endif
1320 1320
OLDNEW
« no previous file with comments | « src/gpu/GrDefaultPathRenderer.cpp ('k') | src/gpu/GrDrawTarget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698